Panowie, ale tak naprawdę co tu ma atomowość do rzeczy skoro dioda ma być toglowana w przerwaniu gdy inne przerwania są przecież wyłączone. To wtedy nie jest istotne czy będzie przestawiana przez sbi, cbi czy też poprzez ładowanie rejestru i maskowanie któregoś tam bitu. To jedno.
A drugie:
Ponieważ mam pod ręką identyczną płytę testową co autor postu i jestem (chociaż na urlopie) to przy kompie - więc zapodałem ten BARDZO DZIWNY kod do procka:
ISR (USART_RXC_vect)
{
UDR_KO=UDR;
if (UDR_KO==48) toggle(IO_PORT, BUZ);
UDR=UDR_KO;
}
Wszystko działa IDEALNIE tak jak zamierzał i wymyślił sobie autor. Dioda się togluje tylko i wyłącznie gdy zostanie naciśnięte zero w terminalu. Wszystko działa w pełni poprawnie.
Ale już wiem co może być przyczyną tego dziwnego zachowania u autora, że dioda LED dziwnie miga, albo czasem dwa razy mignie albo w ogóle nie mignie
ŹLE DOPASOWANA PRĘDKOŚĆ baudrate w mikrokontrolerze i terminalu. Mnie udaje się ten efekt uzyskać dokładnie taki sam czyli dziwny - gdy w procku mam ustawione (jak w listingu programu) baudrate 19200 natomiast w terminalu gdy ustawiam 9600. To dioda zachowuje się dokładnie tak jak opisuje autor (aż sam się dziwię, że echo przylatuje prawidłowe - tak jakby nie było niedopasowania prędkości
Ale gdy w terminalu ustawię 19200 to wtedy wszystko działa jak brzytwa czyli po naciśnięciu ZERO w terminalu dioda LED się zapala, gdy kolejny raz nacisnę ZERO to gaśnie no i tak cyklicznie.
zatem żadne wyłączanie przerwań w przerwaniu nie jest potrzebne.