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







Zitieren

Lesezeichen