Добрый вечер всем!
Суть проблемы:
Происходит многократный вход в функцию main - контроллер на терминал выдает символ многократно, хотя по идее должен лишь единожды при пуске.
Сторожевой таймер выключен. Питание и reset - стабильны. При каких ещё условиях может происходить сброс?
CODE
#include <avr/io.h>
#include <avr/interrupt.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <util/delay.h>
#include <avr/iotn2313.h>
// 19200, 8 бит, 2 стоповых
#define USART_BAUDRATE 19200
#define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1)
char ReceivedByte;
char s[] = "Hello";
int main(void)
{
DDRD = 255;
PORTD =255;
DDRB = 255;
PORTB = 255;
sei();
UCSRB |= (1 << RXEN) | (1 << TXEN) | (1 << RXCIE) | (1 << TXCIE);
UCSRC |= (1 << USBS) | (1 << UCSZ0) | (1 << UCSZ1);
UBRRL = BAUD_PRESCALE;
UBRRH = (BAUD_PRESCALE >> 8);
while ((UCSRA & (1 << UDRE)) == 0) {};
UDR = s[1];
while(1)
{
_delay_ms(300);
};
return 0;
};
ISR(USART_RX_vect)
{
ReceivedByte = UDR;
switch (ReceivedByte)
{
case ('1'):
while ((UCSRA & (1 << UDRE)) == 0) {};
UDR = s[2];
break;
}
UDR = ReceivedByte; // Echo back the received byte back to the computer
return;
};
Буду рад любым подсказкам!