如何结束 8051 中的外部中断服务程序 (ISR)

How to end external Interrupt Service Routine (ISR) in 8051

我用 8051 的硬件中断 0 写了一个简单的 LED 闪烁代码。 按下按钮时,它会进入中断服务程序 (ISR)。执行后它应该在 main 函数中返回,但它没有出现。 这是我的C代码。任何积极的答复将不胜感激。

sbit LED = P1^0;

void delay(int ms)
{ 
   int i;

   for(i=0;i<ms;i++)
   {
     TMOD = 0x01;             
     TH0 = 0xFC;             
     TL0 = 0x66;
     TR0 = 1; 
     while(TF0==0);                                     
     TR0 = 0;
     TF0 = 0;
   }
}



void main(void)
{
    P1 = 0x00;
/// P3 = 0x04;
    IT0 = 1;     
    EX0 = 1;      
    EA  = 1; 
    LED=1;

    while(1)
    {   
      LED=~LED;
      delay(200);
    }

 return ;
}



void external0_isr() interrupt 0     
{ 
   EA=0;
   LED =0 ;
   delay(2000);
   LED=1;
   EX0=1;
   EA=1;

   return;
} 

进入按键中断时,禁用全局中断EA=0; 这也禁用了定时器中断。因此,您的程序将在 delay(2000) 例程中的 while(TF0==0) 挂起。