Gast
#6613
Hallo!
In folgendem Beispielprogramm habe ich folgendes Problem: Durch den
externen Interrupt soll die Variable >zahl< auf 1 gesetzt werden. Leider
macht das Programm beim Verlassen der Interruptroutine mit dem alten
Wert von >zahl< weiter. Wo ist der Fehler?
#include <io.h>
#include <interrupt.h>
#include <sig-avr.h>
unsigned char zahl;
void inczahl (void)
{
zahl++; //zahl wird inkrementiert
for(i=0;i<5000;i++) //
{ //Zeitschleife
for(j=0;j<50;j++); //
}
}
SIGNAL(SIG_INTERRUPT0)
{
zahl=1;
}
void main (void)
{
outp (0xff,DDRB); // Port B als Ausgang
outp (0x00,DDRD); // Port D als Eingang
outp (0xFF,PORTD); //Pullups aktiv
zahl=0; //Anfangswert
sbi(GIMSK, INT0); //enable externer Interrupt 0
cbi(MCUCR, ISC00); //
sbi(MCUCR, ISC01); //Interrupt bei fallender Flanke
sei(); //enable alle Ints
while(1)
{
inczahl(); //zahl inkrementieren
outp(zahl, PORTB); //zahl ausgeben
}
}
Vielen Dank für Eure Hilfe!