У меня проблема с atmega 1284p, я написал этот ISR для получения команд через последовательный порт. Если я отправлю CR или LF в конец команды, программа работает правильно, но если я не отправлю ни одного из них, программа останется в ISR, блокируя мою программу.
Поскольку ISR отключает мне все прерывания, я не знаю, как выйти из этого!
Кто-нибудь может мне помочь?
void USART_init(void)
{
UCSR0B |= (1<<RXEN0) | (1<<TXEN0);
UCSR0C &= ~(1<<USBS0); //Stop bits 1
UCSR0C &= ~((1<<UPM00) | (1<<UPM01)); //Parity check disabled
UCSR0C |= (1<<UCSZ00) | (1<<UCSZ01); //8 bit data
UCSR0B &= ~(1<<UCSZ02); //8 bit data continue
UCSR0B |= (1 << RXCIE0);
UBRR0H = 0;
UBRR0L = 64; //9600 baud for a 16MHz Clock.
}
unsigned char USART_receive(void)
{
while(!(UCSR0A & (1<<RXC0)));
return UDR0;
}
ISR(USART0_RX_vect)
{
clean_variables();
do {
cmd[inc] = USART_receive();
inc++;
} while ((cmd[inc - 1] != '\n') && (command[inc - 1] != '\r'));
inc = 0;
comd = 1;
split();
}