Forum: Mikrocontroller und Digitale Elektronik Interrupt 1 und 0 beim T89C51CC01


von josef (Gast)


Lesenswert?

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

von Michael Thom (Gast)


Lesenswert?

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

von Matthias (Gast)


Lesenswert?

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.

von josef (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.