Witam
Mam problem, i liczę, że może zechcecie mi pomóc.
Otóż napisałem sobie prosty programik do komunikacji z PC przez UART. Działanie polega na "dawaniu echa", czyli program odsyła do PC to, co zostało mu wysłane i jednoczesnym miganiu diodą LED co 1s. Program działa (i to nawet "na przerwaniach"

). Kod działającego ISR to:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Zwracam uwagę na znaki komentarza w linii 5.
W ramach dalszych działań postanowiłem, aby po otrzymaniu małej litery program odsyłał wielką. No i zima

. Kod ISR to:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Różnica w stosunku do poprzedniego to linia 5, która tym razem nie jest komentarzem. Po tej zmianie program, zamiast grzecznie odpowiadać zaczął wysyłać po dwa znaki, w dodatku żadem z nich nie jest tym właściwym.
Cały kod programu (celowo wpisany do jednego pliku dla łatwiejszego czytania) to:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Jest w nim w zasadzie tylko inicjalizacja portów, Timera 1 i UART-u, a potem pusta pętla i procedury obsługi ISR.
Ponieważ z pierwszą wersją ISR komunikacja działa, więc nie mam wątpliwości odnośnie podłączenia, prędkości itp. łącze na pewno działa i jest dwukierunkowe. Nie rozumiem, dlaczego nie działa w sposób oczekiwany druga wersja ISR. Procesor to ATmega32, taktowanie wewnętrzne 8MHz, Eclipse Indigo, przejściówka na USB (ATB1.03).
Będę bardzo wdzięczny za podpowiedzi.
Pozdrawiam