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







 
			
			 
					
					
					
						 Zitieren
Zitieren auf:
  auf:

Lesezeichen