Skocz do zawartości

[C] Atmega 16 problem z Timerem i IF-ami


nes86

Pomocna odpowiedź

Proszę o pomoc.

Napisałem program:

SIGNAL(SIG_OVERFLOW2){ 
//TCNT2 = 0; 
temp = ((temp+1)%32); 
} 

void test(void){ 
sei(); 
sbi(TCCR2,CS20); 
while(1){ 
if(temp == 0x0000){ 
cbi(port_led,led2); 
} 
if(temp == 0x0010){ 
sbi(port_led,led2); 
} 
} 
} 
///////////////////////////////////////////////////////
int main(void){ 
setup(); 
test(); 
//sei(); 
setup2(); 
while(1); 
}

I problem jest z nim taki że nie wykonują się instrukcje w if-ach. Sprawdzałem to na symulacji w AVR studio. Przerwanie od tajmera działa, na podglądzie pamięci ram widać że zmienna temp (globalna unsigned int) zwiększa swoją wartość od zera do 31, ale nawet jak ośiągnie wartości 0 i 16 to instrukcje zapalania i gaszenia diody się nie wykonują. Nie rozumiem tego.

Żeby nie było wątpliwości, to dioda działa i jak napiszę wprost zapalenie diody a nie w ifie to się zapali, a powyżej jest tylko fragment programu i podane funkcje mają całą potrzebną "otoczke" 🙂

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.