Irgendwie funktioniert bei mir ein Programm wegen einer Variabel, die in einem Interrupt (Timer) gesetzt wird nicht...

Ist es überhaupt möglich, dass die im Interrupt gesetzte Variable (global! am Programmkopf initialisiert!) auch auf das Hauptprogramm übernommen wird?
Ich lass eine Schleife rotieren, solange bis der Timer seinen Überlauf bekommt und im Timerinterrupt wird die Variabel gestzt, die die Schleife im Hauptprogramm beendet... was leider nicht funktioniert...

Schicke auch noch den Code dazu... Merci

Code:
#include <avr/io.h> 
#include <avr/interrupt.h> 
#include <avr/signal.h> 

int a;									// Globale Variable a initialisieren

timer_init (void) 						// Timer Initialisierung
{ 
   TIMSK = _BV(TOIE1);                    
   TCNT1 = 0;                          	// Für ca. 1a berechnet mit 64er Prescaler
   TCCR1B = _BV(CS11) | _BV(CS10);
} 

SIGNAL (SIG_OVERFLOW1)					// Timer Interrupt
{
	a=1;								// Globale Variable a auf 1 setzen
	TCNT1=0;							// Timer zurücksetzen
	return;
}

int main (void) 						// Hauptprogramm
{ 
   cli();								// Interrupts deaktivieren
   DDRA=0xFF;							// Ausgänge definieren
   DDRB=0x00;							// Eingänge definieren
   timer_init();						// Timer Initialisierung aufrufen
   while(1) 							// Endlosschleife
   {									// Interrupts deaktivieren
		a=0;							// Globale Variable a auf 0 setzen
		outp(0x00,PORTA);				// LED's löschen
		if(PINB==0x01)					// Falls Taster gedrückt
		{
			outp(0xFF,PORTA);			// LED's leuchten lassen
			sei();						// Interrupts aktivieren
			while(a==0);				// Schleife --> rotiert solange die Globale Variable 0 enthält  <-- Hier hängt das Programm!!!
			cli();						// Interrupts deaktivieren
		}
   } 
}