您的位置:首页 > 其它

51单片机 外部中断实验

2015-04-06 17:34 176 查看
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^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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: