上一节讲到,C51单片机存在5种中断源,分别依次为:INT0(外部中断0),INT1(外部中断1),T0(定时器0),T1(定时器1),RXD和TXD(串口中断)。这节讲解外部中断,完成LED亮灭的操控。
一、什么是中断
中断就是指CPU正在执行一项任务1,然后突然有紧急任务2,于是停止任务1,去执行紧急任务2,执行完紧急任务2,再回来继续执行任务1的过程。
再比如:你正在看电影,然后门铃响了,于是,你按下暂停播放,跑去开门,开完门回来继续看电影。这个过程叫中断。
中断跟硬件有关。可以说是硬件来让单片机中断。
二、原理图
从图中看,外部中断的引脚为 P3.2口的外部中断0(INT0) 和 P3.3口的外部中断1(INT1).
2.1、中断相关的特殊寄存器:
(1)中断允许控制寄存器(IE)--------控制各中断的开放和屏蔽
(2)定时器/计数器控制寄存器(TCON)-------定时器和外部中断的控制
(3)串行口控制寄存器(SCON)-------串行中断的控制
(4)中断优先级控制寄存器(IP)-------设置各中断的优先级
三、中断优先级
在默认下、优先级从高到低:INT0 > T0 > INT1 > T1 > 串行中断。(谁级别高,谁先执行)
1).高优先级的中断可以打断低优先级的中断。
2).正在响应的中断,不能被同级或者低级的中断打断。
3).同时发生几个中断,先响应优先级高的中断
中断格式:void 变量名() interrupt 中断号
比如: void interruptINT0() interrupt 0
四、外部中断流程
从图片的方框上看,我想使用外部中断,需要预先设置什么,以选择外部中断0为例子
1)设置IT0=0(低电平触发) 或者 IT0=1(下降沿触发)
2)设置IE0=0(解析:当IE0=1时,告诉CPU中断,CPU响应此中断请求时,IE0被硬件置0)
(跟上一节 定时器IF0使用是一样的)
3)设置EX0=1 (解析:当EX0=1,即打开外部中断开关)
4)设置EA=1 (解析:打开总中断)
连线时,需要把外部中断0即P3.2,用杜邦线与GND相连。
什么是低电平触发,什么是下降沿触发?
本例子选择低电平触发即:设置IT0=0,当中断的时候,把原先LED=1,变为LED=0;中断结果,LED变为1.完成LED亮灭的操作。
五、代码如下
#include<reg51.h>
sbit LED =P0^4;
void main()
{
IT0=0; //中断触发方式为低电平触发
//IE0=0; //可省略
EX0=1; //打开外部中断0
EA=1; //打开中断总开关
while(1)
{
LED=1; //在没有中断发生时,LED关闭
}
}
void interruptINT0() interrupt 0
{
LED=0;//有中断发生时,LED亮起
}
注意:连线时,需要把外部中断0即P3.2,用杜邦线与GND相连。