Hallo, Habe zwei externe Interrupt zu bedienen (INT0 und INT1) Irgendwie verhaltesn sich diese selbst in der Simulation total unterschiedlich. Mit dem INT0 springe ich bei mit P3.2 ohne Probleme in die ISR und beim INT1 komm ich einfach nicht hinein. Hier mein Code... #include <REG52.H> unsigned char ex0_isr_counter = 0; int i; sbit P1_6 = P1^6; sbit P1_5 = P1^5; void ex1_isr (void) interrupt 1 { ex0_isr_counter++; // Increment the count P1_6=0; for(i=0;i<10000;i++) {} P1_6=1; for(i=0;i<10000;i++) {} } void ex0_isr (void) interrupt 0 { ex0_isr_counter++; // Increment the count P1_5=0; for(i=0;i<10000;i++) {} P1_5=1; for(i=0;i<10000;i++) {} } void main (void) { IT0 = 1; EX0 = 1; IT1 = 1; // Configure interrupt 0 for falling edge on /INT0 (P3.2) EX1 = 1; // Enable EX0 Interrupt EA = 1; // Enable Global Interrupt Flag while (1) { } } Bitte um Hilfe lg josef
Hey, ich habe mal eine Frage zu deinem CODE: Wo greifst du in der main auf die Funktionen zu? Nach meinem C-Verständins fehlt das Aufrufen der Funktionen! MfG Taz
interrupt 1 ist der TIMER 0, du musst Interrupt 2 nehmen void ex1_isr (void) interrupt 2 siehe hier: http://www.keil.com/appnotes/files/apnt_103.pdf @Michael Die H-L Flanke an den betreffenden Portpin ruft die Routine auf. Da braucht in Main kein Aufruf stehen.
Danke Matthias, hat super funktioniert... Habe gar nicht daran gedacht, dass die Interrupt Nummer ja mit der entsprechenden Funktion übereinstimmen muss. josef
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.