nes86 Napisano Marzec 18, 2009 Udostępnij Napisano Marzec 18, 2009 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" 🙂 Cytuj Link do komentarza Share on other sites More sharing options...
McRancor Marzec 18, 2009 Udostępnij Marzec 18, 2009 Zrób tą zmienną typu volatile unsigned int, pewnie kompilator ją sobie "zoptymalizował" 1 Cytuj Link do komentarza Share on other sites More sharing options...
nes86 Marzec 18, 2009 Autor tematu Udostępnij Marzec 18, 2009 Wielkie dzięki, pomogło 🙂 Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
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!