Hai,

ich hab ein Problem mit einer Interrupt-Routine. Ich habe folgenden Code (Ausschnit).

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
	 }
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 ?
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