Написал недавно простенький код для работа с USART, почти копия примеров doc2486.pdf. Все конечно заработало, но на следующий день, запускаю программу со стороны ПК - ответа МК (ATmega8) нет. Плата и подключение не трогались. Беру другую прошивку (в стабильности работы которой я ещё сомневался, там используются прерывания и FIFO), со второй попытки она работает. Возвращаю предыдущую прошивку, теперь работает и она, что это? и так уже 4 дня. Один раз ещё помогло вот это

$ cat /dev/urandom > /dev/ttyS0
$ make reset (reset через LPT)
код,
CODE
void uart_open( uint8_t scale )
{
UBRRH = 0;
UBRRL = scale;
UCSRA = (1<<1);
UCSRB = (1<<4) | (1<<3);
UCSRC = (1<<7) | (1<<2) | (1<<1);
DDRD |= (1<<1);
DDRD &= ~(1<<0);
PORTD |= (1<0);
}
void uart_send( uint8_t data )
{
while ( ( UCSRA & (1<<5) ) == 0 ) ;
UDR = data;
}
uint8_t uart_recv()
{
while ( ( UCSRA & (1<<7) ) == 0 ) ;
return UDR;
}