в упражнении для моего курса по встроенному программированию мы должны запрограммировать микросхему Atmega328p AVR для приема данных через последовательный порт. Мы должны сделать это, вызвав функцию, которая ждет, пока не получит символ. Затем он должен отображать значение ascii этого символа в светодиодных лампах, но у меня возникают проблемы даже при его получении. Я сделал много отладок, и я думаю, что сузил его до PuTTY, даже не отправляя данные, или AVR не получил должным образом. Я добавлю свой код ниже:
/*
From the PC should come a char, sent via the serial port to the USART data register.
It will arrive in the RXB, which receives data sent to the USART data register.
While running the loop, the program should encounter a function that is called and waits for the RXB to be filled.
Then it will read the RXB and return it to the main loop.
The result will be stored and processed accordingly.
*/
#define F_CPU 15974400
#include <util/delay.h>
#include <avr/io.h>
#include <stdlib.h>
#include <avr/interrupt.h>
void writeChar(char x);
void initSerial();
char readChar();
int main(void)
{
initSerial();
while (1)
{
char c = readChar(); //reads char, puts it in c
_delay_ms(250); //waits
writeChar(c); // spits that char back into the terminal
}
}
void initSerial(){
UCSR0A = 0;
//UCSR0B = (1 << TXEN0); // Enable de USART Transmitter
UCSR0B = 0b00011000; //transmit and receive enable
//UCSR0C = (1 << UCSZ01) | (0 << UCSZ00); /* 8 data bits, 1 stop bit */
UCSR0C = 0b00100110; // Even parity, 8 data bits, 1 stop bit
UBRR0H=00;
UBRR0L=103; //baudrade 9600 bij
}
void writeChar(char x){
while(!(UCSR0A & (1 << UDRE0))); // waits until it can send data
UDR0 = x; // Puts x into the UDR0, outputting it
}
char readChar(){
while (!(UCSR0A & (1 << RXC0))); //waits until it can send data
return UDR0; // returns the contents of the UDR0 (the receiving part of course
}
Проблема заключается в том, что когда я вношу что-либо в PuTTY (что я предполагаю, я настроил правильно. https://prnt.sc/rc7f0f и https://prnt.sc/rc7fbj кажутся важными экранами.
Заранее спасибо, у меня совершенно нет идей.