Szanowni Forumowicze,
staram się z byle błahostką tutaj nie pojawiać, ale niestety natrafiłem na problem w trakcie programowania µC z którym nie potrafię sobie poradzić.
Ćwiczę programowanie w C i od kilku dni testuję Timery na Atmega8. Udało mi się zaprogramować je na wszystkie znane mi sposoby. Niestety po zmianie programu i konfiguracji na płytce prototypowej natrafiłem na pewien błąd.
Kiedy odblokowuję globalne przerwania takim poleceniem:
µC nie wykonuje w ogóle programu. Całość wygląda następująco:
W efekcie powinienem uzyskać stan wysoki na porcie D oraz stan niski na porcie C. Dzieję się tak dopiero gdy zakomentuję linijkę podaną wyżej.
Najgorsze w tym wszystkim jest to, że ten oto program działał dzień wcześniej na tym samym µC. Atmega jest sprawna bo gdy wyłączam przerwania to wszystko działa jak należy. Czy ktoś coś z tego rozumie?
staram się z byle błahostką tutaj nie pojawiać, ale niestety natrafiłem na problem w trakcie programowania µC z którym nie potrafię sobie poradzić.
Ćwiczę programowanie w C i od kilku dni testuję Timery na Atmega8. Udało mi się zaprogramować je na wszystkie znane mi sposoby. Niestety po zmianie programu i konfiguracji na płytce prototypowej natrafiłem na pewien błąd.
Kiedy odblokowuję globalne przerwania takim poleceniem:
SREG = _BV(7);
µC nie wykonuje w ogóle programu. Całość wygląda następująco:
#define F_CPU 1000000ul
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
unsigned char flag_timer_1 = 0;
ISR(TIMER2_COMPA_vect)
{
flag_timer_1 = 1;
} // interrupt
int main(void)
{
TCCR1B |= (1 << CS10); //ustaw timer1 z preskalerem 1
TCCR1B |= (1 << WGM12); //ustaw timer1 w tryb CTC
OCR1A=10000;
TIMSK= (1 << OCIE1A); //zezwolenie na przerwania dla CTC
SREG = _BV(7);
unsigned char counter = 0x00;
DDRD = 0xFF;
PORTD = 0xff;
DDRC = 0xFF;
while(1)
{
}
return 0;
} // main
W efekcie powinienem uzyskać stan wysoki na porcie D oraz stan niski na porcie C. Dzieję się tak dopiero gdy zakomentuję linijkę podaną wyżej.
Najgorsze w tym wszystkim jest to, że ten oto program działał dzień wcześniej na tym samym µC. Atmega jest sprawna bo gdy wyłączam przerwania to wszystko działa jak należy. Czy ktoś coś z tego rozumie?
