Gast
#77440
Hallo,
ich möchte gerne eine Variable im Hauptprogramm durch das Ausführen
eines Interrupts hervorrufen. Ich habe die Variable als globale
Variable definiert. Der Interrupt verändert die Variable Licht auch.
Aber nach der Rückkehr zu dem Hauptprogramm wird der alte Wert der
Variablen wieder übernommen.
Vor dem Interrupt- Sprung wird der alte Wert erst mit einem PUSH
Befehl gesichert und bei dem Rücksprung wieder mit dem POP Befehl der
Variablen zugewiesen.
Ich wollte eigentlich den neuen Wert weiter verwenden.
Eine globale Variable müsste sich doch auch in den Unterprogrammen
verändern lassen.
Bei meinem PRG ist das Verhalten aber doch wie bei einer lokalen
Variablen.
Wo habe ich einen Fehler gemacht?
Ulrich
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
char Licht;
int Initialisierung()
{
DDRC=255;
Licht=1;
}
Timer()
{
TIMSK=64;
OCR1AL=65;
TCCR1B=9;
sei();
}
INTERRUPT(SIG_OUTPUT_COMPARE1A)
{
if (Licht==0x80)
Licht=1;
else
Licht<<=1;
}
int main()
{
Initialisierung();
Timer();
while(1)
{
PORTC=~Licht;
}
}