Hi, das ist mein Programm zur Verwendung des Ertetnen Interupts1 eines 90LS8535, geht aber nicht. Kann mir einer erklären was ich falsch mache? int main(void) { enable_external_int(INT1); //INT1 enable outp(BV(ISC11)|BV(ISC10), MCUCR); //Reagiert auf steigende Flanke outp(0xff,DDRA); //Port A als Output for(;;) //Ständiges Bliken der LED's auf Port A { outp(0xff,PORTA); Wait_ms(1000); outp(0x00,PORTA); Wait_ms(1000); } } INTERRUPT(SIG_INTERRUPT1) { for(;;) { outp(0x00,PORTA); //Port A soll auf 0x00 gesetzt werden, Controller steht } } Wait_ms(int iMs) ist nur eine Warteschleife die iMs Milisekunden wartet(timer). Der kontroller sollte doch wenn der Pin INT1 von L auf H springt in die INTERRUPT Funktion springen und Nix mehr machen, oder??
Warum machst Du in der Interrupt-Routine eine for Endlosschleife??? Schreib die Int-Routine so: INTERRUPT(SIG_INTERRUPT1) { outp(0x00,PORTA); }
Hallo Stefan (H.), verwende SIGNAL statt INTERRUPT. Bei Aufruf von SIGNAL werden die Interrupts deaktiviert, bei INTERRUPT nicht. Ich nehme an du verwendet einen Taster an INT1? Taster prellen, ein Tastendruck wird also als mehrere Impulse erkannt. Dein Interrupthandler wird also immer wieder neu aufgerufen, auch wenn er noch nicht beendet ist (in diesem Fall durch die Endlosschleife ja auch nicht möglich), die Folge ist ein Stacküberlauf -> undefiniertes Verhalten. MfG Andreas
Hi, Danke für eure Antworten!! Wenn ich das richtig versanden habe müßte das aber im prinzip funktionieren was ich da gemacht habe? Wegen dem prellen: wenn ich den Interrupt so initialisiere, dass er auf steigende Flanke geagiert ist das doch egal, der Pegel springt ja nur einmal von L auf H und dann nur zw. H und X herum, oder? Wenn nicht, muß ich dann mit einem Flipflop entprellen, oder gibts was einfacheres?
Nein, der Taster springt zwischen H und L rum. Wenn du am Ende der Interruptroutine z.B. 20ms wartest, dann werden die durchs Prellen erzeugten Impulse gar nicht beachtet, da während SIGNAL alle Interrupts deaktiviert sind. MfG Andreas
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.