Dzień dobry,
Trenuję programowanie i natrafiłem na mały lecz bardzo irytujący problem. Po krótce ma działać tak: ustawiony jest Timer0 na generowanie przerwania co 1ms (kwarc 8Mhz, preskaler 64, TCNT0=131), z tym jest wszystko okej. W przerwaniu dodany jest kod który zlicza 20 tyknięć timera i ustawia flagę: FLAGA_CZAS, która ma odblokować kod znajdujący się w pętli głównej i ma się wykonywać co 20ms (część kodu potrzebna do obsługi klawiatury). Testowo do debagowania w przerwaniu dodana instrukcja: PORTB ^= (1<<PB5); której docelowo nie będzie.
W wyniku działania programu na oscyloskopie widzę przebieg prostokątny na PB5 ze zboczami co 20ms (działanie poprawne) natomiast nie wykonuje się instrukcja: PORTB ^= (1<<PB4); zawarta w pętli gółnej programu. Wg mnie na obu pinach powinny być zbliżone do siebie przebiegi prostokątne.
Z tego co ustaliłem w przerwaniu od Timer0 nie jest ustawiana FLAGA_CZAS, ponieważ gdy strSprzet.Flagi |= FLAGA_CZAS; przeniosę na górę funkcji głównej, na PB4 mam przebieg prostokątny o przypadkowej częstotliwości około 500kHz.
Poniżej kod który napisałem:
Co robię nie tak jak trzeba ?? Siedzę nad tym już dłuższy czas i nie mam pomysłu co robić.
Trenuję programowanie i natrafiłem na mały lecz bardzo irytujący problem. Po krótce ma działać tak: ustawiony jest Timer0 na generowanie przerwania co 1ms (kwarc 8Mhz, preskaler 64, TCNT0=131), z tym jest wszystko okej. W przerwaniu dodany jest kod który zlicza 20 tyknięć timera i ustawia flagę: FLAGA_CZAS, która ma odblokować kod znajdujący się w pętli głównej i ma się wykonywać co 20ms (część kodu potrzebna do obsługi klawiatury). Testowo do debagowania w przerwaniu dodana instrukcja: PORTB ^= (1<<PB5); której docelowo nie będzie.
W wyniku działania programu na oscyloskopie widzę przebieg prostokątny na PB5 ze zboczami co 20ms (działanie poprawne) natomiast nie wykonuje się instrukcja: PORTB ^= (1<<PB4); zawarta w pętli gółnej programu. Wg mnie na obu pinach powinny być zbliżone do siebie przebiegi prostokątne.
Z tego co ustaliłem w przerwaniu od Timer0 nie jest ustawiana FLAGA_CZAS, ponieważ gdy strSprzet.Flagi |= FLAGA_CZAS; przeniosę na górę funkcji głównej, na PB4 mam przebieg prostokątny o przypadkowej częstotliwości około 500kHz.
Poniżej kod który napisałem:
Kod: C / C++
Co robię nie tak jak trzeba ?? Siedzę nad tym już dłuższy czas i nie mam pomysłu co robić.