c51单片机如何使用中断

2024年11月19日 14:39
有2个网友回答
网友(1):

 将按键接到P3.2(INT0)或P3.3(INT1)

main(){
 EA=1; //EA总中断控制,EA=0关,EA=1开
 EX0=1;//INT0中断控制。0关1开,按键接P3.2用这个
 EX1=1;//INT1中断控制。0关1开,按键接P3.3用这个
  //默认情况下,直接使EX0=1或EX1=1来打开中断,INT0、INT1中断是电平触发的
 while(1){
    //主程序写这里 
 }
}

/** 外部中断0服务程序,按下接P3.2的开关k=0下面程序被执行 **/
int0()interrupt 0
{
  //程序代码写这里面 
}

 /** 外部中断1服务程序,按下接P3.3的开关k=0下面程序被执行 **/
int1()interrupt 2

  //程序代码写这里面 
}

 注意,上面的中断程序,如果执行完后,按键k还没有放开,则中断程序会再次被执行。为了防止这种情况发生,有以下几种处理办法以:

(1)可以在中断程序中进行判断,只有放开了按钮k=1了中断函数才返回。

(2)可以在进入中断后关闭中断,让EX0或EX1=0。然后在主程序中,需要的时候再开起。

网友(2):

允许中断,那就在这条语句中EA = 1;不允许中断了,则EA=0;
当然前提是对应的具体的中断使能是打开的。
从你的描述看,可以使用外部中断0,也就是始终令EX0=1,同时将按键K连接到单片机的外部中断0引脚上。