Gast
#75466
Hallo, folgendes Programm sollte eigentlich eine LED mit einem Sekundentakt ein bzw. auschalten. Der Timer wurde so gesetzt, dass er mit einem 1024 des Systemtakt aufwärtszählt. Leider bleibt die LED immer an. An was kann das liegen ? Ich habe auch schon die Vergleichswerte in der Interruptroutine erhöht - führt jedoch auch zu keinem sichtbaren Unterschied. Bin für jede Hilfe dankbar. #include <avr/io.h> #include <avr/interrupt.h> #include <avr\signal.h> volatile unsigned short ledon = 1; void main(void) { outp (0x02,DDRB); outp ((1<<CS02) | (0<<CS01) | (1<<CS00), TCCR0); sbi(TIMSK,TOIE0);/* enable TIMER0 OVI */ //timer_enable_int(1 << TOIE0); sei (); while (1) {} } SIGNAL(SIG_OVERFLOW0) { if (ledon < 4000) { ledon ++; cbi(PORTB,1); // -> LED ON } else { ledon ++; sbi(PORTB,1); // -> LED OFF if (ledon > 8000) ledon = 0; } } :::::::::::::::::::::::::::::::::::::::::::::::::::::::::: Beobachtungen: -> Interrupt wird genau einmal aufgerufen, jedoch anschliessend nicht mehr ( meiner Meinung nach ) -> die Interruptroutine werden häufiger als jede 1/4000 sekunde aufgerufen ( jedoch auch bei Anpassung der Vergleichswerte keine sichtbare Veränderung des Programms )