8086只有一个中断引脚,所以会添加一个中断芯片以提高对中断的控制

一、中断的基本概念

中断

由于计算机内外部的原因,使CPU从当前正在执行的程序中暂停下来,而自动转去执行预先安排好的为处理该原因的服务程序,执行完后再返回被暂停的位置继续执行的过程称中断。

中断处理要考虑以下几个方面:

中断源及中断请求

中断请求信号产生一次,CPU中断一次(CPU不能响应多次,要求中断请求信号及时撤除)

中断优先级

中断允许、中断屏蔽

中断响应、中断返回

简单来讲,首先对当前的断点地址进行入栈保护,然后把服务程序的地址送给程序指针PC,执行中断服务程序,执行结束后,结束中断,返回断点位置,同时涉及恢复现场等其他处理。

二、MCS-51中断系统

1、MCS-51的中断源

5个硬件中断源:

1、2个外部中断(外部硬件设备)INT0、INT1。为输入引脚,低电平有效

中断请求的两种触发方式:

  • 电平方式:外部设备将该引脚置低电平
  • 跳变(边沿)触发:外部设备产生从高电平跳到低电平

触发方式通过特殊功能寄存器TCON来选择(高4位用于定时计数器,低4位用于外部中断)
TOSIU74D~((]4(JEYIX20@U.png

  • IT1/IT0置为0,则选择电平方式
  • IT1/IT0置为1,则选择跳变方式(下降沿触发)
  1. IE1/IE0为1,表明此时存在一个外部中断请求
  2. IT1/IT0设置之后,由单片机中断控制部件检测相应管脚是否为有效状态,若有效,则将IE1/IE0置为1,此时若为中断允许状态则响应该中断。
  3. 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单片机中断优先级控制

    高优先级可优先处理
    L6@`]26OFSIP3)5(NI2{%GX.png
    一种同级中断源优先级顺序:
    ![D$1$W`8[@4~Q[ZM4EK%T~4.png
    优先级高低由用户设置IP寄存器各位来确定,如想要设置外部中断INT1的优先级最高,可将PX1设置为1,其余设置为0,则根据上表默认顺序得优先级顺序变为:INT1->INT0->T0->T1->ES

    4、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

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