51单片机 外部中断实验

来源:互联网 发布:武汉群光有mac的专柜吗 编辑:程序博客网 时间:2024/05/16 04:54

51单片机一共有两个外部中断源。


IE0的置位与否与IT0有关,当IT0=1时,下降沿触发也就是说当INT0由高到低时IE0将被硬件置1,执行完中断,遇到RETI自动清0,但不影响INT0的状态。当IT0=0时,当CPU检测到连续两个周期的INT0低电平时IE0置1,中断结束时遇到RETI自动将IE0清0,之后如果INT0仍然为低电平,且长度超过两个机器周期,那么将重新将IE0置1申请中断。


/**   * 文件名称:外部中断实验 * 实验目的:1.掌握51单片机外部中断相关寄存器的配置方法和触发方式 * 程序说明:1.使用程序前,将跳线J2调整为BTN模式(独立按键) *   将跳线J13调整为IO模式 *           2.按下P3.2-INT0引脚对应的按键S5,LED1状态反转 *           3.按下P3.3-INT1引脚对应的按键S4, LED2状态反转  */#include <reg52.h>sbit LED1 = P0^0;sbit LED2 = P0^1;void configExtInt0();//外部中断0对应引脚P3^2void configExtInt1();//外部中断1对应引脚P3^3void main() {configExtInt0();configExtInt1();    while (1);}void configExtInt0() {IT0 = 1;//选择为下降沿触发方式(为1代表下降沿触发,为0代表低电平触发)EA = 1;  //使能总中断EX0 = 1;//使能外部中断0}void configExtInt1() {IT1 = 1;  //选择为下降沿触发方式EA = 1;  //使能总中断EX1 = 1;//使能外部中断1}//外部中断0中断服务函数void extInt0ISR() interrupt 0 {P2 = ((P2 & 0x1F) | 0x80);    LED1 = ~LED1;    P2 &= 0x1F;}                      //外部中断1中断服务函数void extInt1ISR() interrupt 2 {P2 = ((P2 & 0x1F) | 0x80);    LED2 = ~LED2;    P2 &= 0x1F;}


1 0