Hai,
ich hab ein Problem mit einer Interrupt-Routine. Ich habe folgenden Code (Ausschnit).
Die ISR "TIM1_OVF_vect" wird angesprungen, der Timer läuft, alles prima. Aber die If-Abfrage im Hauptprogramm wird einfach nich ausgeführt. Stecke ich diese Abfrage in die ISR gehts. Wo hab ich da einen Fehler drin ? Wie kann ich eine Variable in einer ISR sonst manipulieren und im Hauptprogramm abfragen ?Code:#include <../include/avr/io.h> #include <../include/avr/interrupt.h> #include <../include/stdlib.h> #include <../include/util/delay.h> volatile uint16_t Zeittick = 0 ; SIGNAL (TIM1_OVF_vect) { // ISR-Code //PORTB ^= (1<<PB2); PORTB |= (1 << PB2); /* setzt Bit 3 an PortB auf 1 */ //PORTB &= ~(1 << PB2); /* loescht Bit 3 an PortB */ Zeittick++; } int main (void) { //Zeittick = 0; if (Zeittick >= 20) { //PORTB ^= (1<<PB3); //Zeittick = 0; PORTB |= (1 << PB3); // setzt Bit 3 an PortB auf 1 }
Ist die If-Agbfrage in der ISR taucht das Problem auf, dass die Variable Zeittick bei einem Softreset nicht zuverlässig auf Null gesetzt wird. ICh versteh aber nicht warum....
Internette Grüße
Stefan
Lesezeichen