8086只有一个中断引脚,所以会添加一个中断芯片以提高对中断的控制
一、中断的基本概念
中断
由于计算机内外部的原因,使CPU从当前正在执行的程序中暂停下来,而自动转去执行预先安排好的为处理该原因的服务程序,执行完后再返回被暂停的位置继续执行的过程称中断。
中断源及中断请求
中断请求信号产生一次,CPU中断一次(CPU不能响应多次,要求中断请求信号及时撤除)
中断优先级
中断允许、中断屏蔽
中断响应、中断返回
简单来讲,首先对当前的断点地址进行入栈保护,然后把服务程序的地址送给程序指针PC,执行中断服务程序,执行结束后,结束中断,返回断点位置,同时涉及恢复现场等其他处理。
二、MCS-51中断系统
1、MCS-51的中断源
5个硬件中断源:
1、2个外部中断(外部硬件设备)INT0、INT1。为输入引脚,低电平有效
中断请求的两种触发方式:
- 电平方式:外部设备将该引脚置低电平
- 跳变(边沿)触发:外部设备产生从高电平跳到低电平
触发方式通过特殊功能寄存器TCON来选择(高4位用于定时计数器,低4位用于外部中断)
- IT1/IT0置为0,则选择电平方式
- IT1/IT0置为1,则选择跳变方式(下降沿触发)
- IE1/IE0为1,表明此时存在一个外部中断请求
- IT1/IT0设置之后,由单片机中断控制部件检测相应管脚是否为有效状态,若有效,则将IE1/IE0置为1,此时若为中断允许状态则响应该中断。
- IE1/IE0需在一定条件下恢复为0
2、2个CPU内部的定时/计数器部件中断源
3、1个串口中断(单片机内部的串行部件中断源)
2、MCS-51单片机中断允许和中断屏蔽
![BE86T(0$~ZDCUS4WTD_CUI.png
两级控制:
EA:中断允许总控制位,EA=1,开放中断
EX1/EX0:外部中断
ET2/ET1:定时器中断
ES:串行中断3、MCS-51单片机中断优先级控制
高优先级可优先处理
一种同级中断源优先级顺序:
![D$1$W`8[@4~Q[ZM4EK%T~4.png
优先级高低由用户设置IP寄存器各位来确定,如想要设置外部中断INT1的优先级最高,可将PX1设置为1,其余设置为0,则根据上表默认顺序得优先级顺序变为:INT1->INT0->T0->T1->ES4、MCS-51单片机中断响应
中断响应条件
(1)中断源有中断请求+中断允许
(2)无同级或高级中断正在处理
(3)现行指令已执行结束中断响应过程
(1)关闭全局中断(防止CPU进入中断处理子程序前被新的中断打断)
(2)保护断点(记录下中断)
(3)清除中断请求标志,例如IE0,IE1,TF1,TF0(如进入外部中断0的子程序,则将IE0置0)
(4)把被响应的中断服务程序入口地址送PC,把8个通用寄存器的值压栈,再转入相应的中断服务程序执行
MCS-51单片机中5个中断源服务程序入口地址是用关键字interrupt加一个0~4的代码组成:
![T2619`8F_J}G%58A2KRNX0.png
三、中断程序编写及应用
例程:
include
#include
#include
unsigned int LedNumVal;
unsigned char Disp_Tab [] = {省略};
void main(void)
{
IT0=1; //下降沿触发
EA=1;
EX0=1;
while(1)
{
P0 = Disp_Tab[LedNumVal%10];
}
}
/INT0中断函数/
void counter(void) interrupt 0 using 0 //using 0指明使用0组通用寄存器,就不用将4组8个寄存器全部压入栈,节省空间,提高效率
{
EX0 = 0;
LedNumVal++; //中断计数
EX0 = 1;
}