Otóż sprawa jest taka, że napisałem programik do odczytywania przycisków z klawiatury i wyświetlania ich wartości na 7 segmentowym.
Samo odczytywanie i wyświetlanie działa bez problemu, jedynie problem jest z użyciem timera.
Poniższy kod działa prawidłowo (proszę nie starać się dogłębnie analizować, chodzi tylko o część z timerem co wyjaśnie nieco niżej):
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Gdy zamiast tej pętli sprawdzającej flagę czy timer już się przepełnił :
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
wykorzystam pętlę która działa dopóki nie wystąpi przerwanie, to wszystko się sypie :
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
zmienna koniec jest zmieniana w przerwaniu na =1 żeby wyjść z pętli, oczywiście dopisałem do jej definicji volatile
Cały kod z przerwaniem :
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Konfiguracja timera jest dokładnie ta sama, tyle że dochodzi uruchomienie przerwań przez TIMSK oraz sei().
Wskazywana powyżej pętla while(koniec==0) albo w ogóle się nie wykonuje, albo trwa zdecydowanie krócej niż 0,5 sekundy przez które powinna, zanim pojawi sie przerwanie (nie jestem tego w stanie określić na oko

)
Naprawdę doprowadza mnie to do białej gorączki, jeżeli pomnożę OCR1A = 7812 razy np 4 (czyli timer liczy do 2 sek) to pętla raz działa dobrze a raz znowu zachowuje się jakby przerwanie występowało po ułamku sekundy.
Co jest nie tak ?