×
单片机 > 单片机程序设计 > 详情

51单片机 外部中断实验

发布时间:2020-05-26 发布时间:
|

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

 

sbit LED1 = P0^0;

sbit LED2 = P0^1;

 

void configExtInt0(); //外部中断0对应引脚P3^2

void configExtInt1(); //外部中断1对应引脚P3^3

 

void 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;

}



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
51单片机CO2检测显示程序解析