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!
Siehe FAQ auf http://savannah.nongnu.org/download/avr-libc/doc/avr-libc-user-manual/, erste Antwort. volatile unsigned char zahl;
Das dürfte übrigens die FAQ schlechthin sein. ;-) Ist nicht umsonst an allererster Stelle dort...
Könnte mir jemand freundlicher weise mal ein code beispiel posten. Ich krieg das nicht gebacken :(
ist auch kein wunder da du bei jedem interrupt die variable zahl auf eins zurücksetzt. eretzte doch mal in der interruptroutine "zahl=1;" mit zahl++; und schmeiss die funktion "void inczahl (void)" rauss.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.