中断(interrupt)是CPU在执行程序时,对系统发生的某个事件(程序自身或外界的原因)作出的一种反应,暂时放下目前所执行的程序,先去执行特定的程序,待完成特定的程序后,再返回执行刚才放下的程序。比如用户按下按钮,程序必须及时处理用户的按钮请求,然后再返回来继续执行。
比如,老师正在讲课,而同学有疑问,随时都可以举手发问,老师将立即暂停讲课,为同学解惑,再继续刚才暂停的课程,这样的动作就是中断。
中断源
中断源(中断请求源):能够向CPU发出中断申请的部件。
8051提供5个中断服务(中断源):外部中断(INT0、INT1),定时器中断/计数器中断(TF0、TF1),串行口中断UART(RI/TI)。
8052提供6个中断服务(中断源),除了包含8051提供的5个中断外,还包括第三个定时器/计数器(Timer2)的中断。
MCS-51的中断
外部中断
外部中断INT0/INT1,CPU通过12引脚(即P3.2)及13脚(即P3.3)来接收外部中断的请求。
外部中断信号的采样方式可分为电平触发(低电平触发)及边缘触发(负边缘触发,即时钟信号由高转低时触发)两种。
若要采用电平触发,需要将TCON寄存器中的IT0(或IT1)设定为0,则只要P3.2引脚(或P3.3引脚)为低电平,即视为外部中断需求。
若要采用边缘触发需要将TCON寄存器中的IT0(或IT1)设定为1,则只需要P3.2引脚(或P3.3引脚)的信号由高电平转为低电平,即视为外部中断需求。
这些中断需求将反应在IE0(或IE1)里,若IE寄存器的EX0(或EX1)=1,且EA=1,CPU将进入该中断的服务。
至于中断的优先级寄存器(IP寄存器),只是安排多个中断发生时中断服务执行的顺序而已,若只有一个中断,将不会有所影响。
定时器/计数器中断
定时器/计数器中断有TF0和TF1两个(8052多一个:TF2)。若是定时器,CPU将对内部的时钟脉冲计数,而提出内部中断;若是计数器,CPU将对外部的脉冲计数,而提出内部中断。至于外部脉冲的输入,则是通过T0引脚(即14脚,也就是P3.4)及T1引脚(即15脚,也就是P3.5)
串行口中断
串行口中断(UART)有RI或TI两个,CPU通过RXD引脚(即10引脚,也就是P3.0)及TXD引脚(即11脚,也就是P3.1)要求接收(RI)中断需求或传送(TI)中断需求。
相关寄存器
在前面的[MCS-51中断系统图]中,我们可将中断启用寄存器(IE寄存器)看作中断功能的开关,中断优先级寄存器(IP寄存器)是判断各中断优先级的开关。而实际上,IE寄存器、IP寄存器、TCON寄存器都是一个8位的可寻址寄存器,如下图
中断优先级
若没有在IP寄存器里设定优先级,则中断的优先级为:
INT0 >TF0>INT1>TF1>RI/TI。
若设定了优先级:
假设TF1=1,则中断优先级应为:
TF1>INT0 >TF0>INT1> RI/TI;
假设TF0 =1,INT1=1,则中断优先级应为:TF0>INT1>INT0 > TF1>RI/TI。
定时器/计数器控制寄存器TCON里,有部分设定与外部中断信号的采样有关。其中IT0与IT1分别为INT0与INT1的采样信号设置位:
若设置为1,则是采用下降沿触发信号;
若设置为0,则是采用低电平触发。
IE0与IE1是由CPU所操作的中断标志位,当中断发生时将被设定为1,结束中断时,恢复为0。
中断的应用
中断的设定包括开启中断开关(IE寄存器的设定)、中断优先级的设定(IP寄存器的设定)、中断信号的设定(TCON寄存器的设定)等。
在程序中设定中断命令:
IE=0x81 //即1000 0001,对照前面IE寄存器图片可得EA=1,EX0=1,即启用INT0中断
IE=0x84 //启用INT1中断
IE=0x85 //启动INT0、INT1中断
IP=0x04 //设置INT1中断具有最高优先级
TCON=0x8 //设定INT1采用下降沿触发
中断程序格式:void +函数名+interrupt +数字0~4,其中0—4分别表示
0:外部中断INT0
1:定时器/计数器TF0
2:外部中断INT1
3:定时器/计数器TF1
4:串行口TI/RI
如:void my_INT (void) interrupt 0
{
......//中断子程序逻辑代码
}
举例:12引脚(即P3.2)接入按钮,当在主程序运行过程中,按下这个按钮,程序就会进入中断子程序,执行子程序的逻辑,中断子程序执行完,再进入主程序继续执行。
//主程序:
void main()
{
IE=0x81 // 启用INT0中断
TCON=0x01 //设置INT0 为下降沿触发
......
While(1)
{
......
}
}
//中断子程序 使用INT0外部中断
void int0_test(void) interrupt 0
{
......//中断程序逻辑代码
}
上一篇:C51单片机的IO口介绍(下)
下一篇:基于51单片机的简易时钟设计
设计资源 培训 开发板 精华推荐
- NCP380HMU05AGEVB:高侧配电开关评估板
- KITPF8200FRDMPGM: PF8200/PF8100编程板
- LF15ABDT-TR 1.5V 延迟开启低压降稳压器的典型应用
- LTC3119EUFD 3.3V、500kHz 宽输入稳压器的典型应用电路
- 适合初学者系列之ESP32S3-全波段收音机
- MIC5191 的典型应用:超高速、大电流有源滤波器/LDO 控制器
- 有源桥式整流器控制器演示板
- LT3461ES6 3.3V 至 5V 升压转换器的典型应用电路
- DC2047A-A,LT4276B/LT4321 演示板,具有 DC/DC 的 PoE+(25W,12V/1.9A)PD,理想二极管桥,9V-57V AUX
- LTC6910-2CTS8 演示板,数控可编程增益放大器
- 大联大品佳集团推出以复旦微和ams OSRAM产品为主的汽车氛围灯方案
- 为啥车载操作系统(Vehicle OS)越来越重要了呢?
- 车载传感器 — 一文详解激光雷达
- 汽车(超声波、毫米波、激光)雷达之间的简单区别
- 汽车电路相关知识大全
- Bourns 推出两款厚膜电阻系列,具备高功率耗散能力, 采用紧凑型 TO-220 和 DPAK 封装设计
- SABIC进一步深化与博鳌亚洲论坛的战略合作伙伴关系
- 使用 3.3V CAN 收发器在工业系统中实现可靠的数据传输
- 凌华智能推出AmITX Mini-ITX 主板,助力边缘人工智能和物联网创新
- 英飞凌携手马瑞利采用AURIX™ TC4x MCU系列推动区域控制单元创新