MCS-51单片机片内的中断系统主要用于实时测控,即要求单片机能及时地响应和处理单片机外部或内部事件所提出的中断请求。由于这些中断请求都是随机发出的,如果采用定时查询方式来处理这些中断请求,则单片机的工作效率低,且得不到实时处理。因此,MCS-51单片机要实时处理这些中断请求,就必须采用具有中断处理功能的部件即中断系统来完成。
本节介绍MCS-51单片机片内中断系统的工作原理及应用,首先介绍MCS-51单片机中断系统的结构。
1.MCS-51单片机中断系统的结构
中断过程是在硬件基础上再配以相应的软件而实现的,不同的计算机,其硬件结构和软件指令是不完全相同的,因此,中断系统也是不相同的。MCS-51中断系统有5个中断源,具有2个中断优先级,可实现2级中断服务程序嵌套。MCS-51中断系统内部结构如图5-3所示。
图5-3 MCS-51中断系统内部结构
2.MCS-51单片机中断系统的中断请求源
MCS-51的中断系统共有5个中断源,即:
1)外部中断0请求,由P3.2脚输入,中断请求标志为IE0。
2)外部中断1请求,由P3.3脚输入,中断请求标志为IE1。
3)定时器/计数器T0溢出中断请求,中断请求标志为TF0。
4)定时器/计数器T1溢出中断请求,中断请求标志为TF1。
5)串行口中断请求,发送中断请求标志为TI,接收中断请求标志为RI。
这些中断请求源的中断请求标志位分别由定时器/计数器控制寄存器TCON和串行口控制寄存器SCON的相应位锁存,这两个寄存器都是特殊功能寄存器。
(1)定时器/计数器控制寄存器TCON
定时器/计数器控制寄存器TCON字节地址为88H,可以位寻址,其格式见表5-1。
表5-1 TCON中的中断标志位
TCON寄存器中与中断系统有关的各标志位的功能如下:
1)IT0(IT1):外部中断0(外部中断1)触发方式控制位。
当IT0(IT1)被设置为0,则选择外部中断为电平触发方式,加到引脚INT0的外部中断请求输入信号为低电平有效。
当IT0(IT1)被设置为1,则选择外部中断为跳变触发方式,加到引脚INT0的外部中断请求输入信号为从高到低的负跳变有效。
2)IE0(IE1):外部中断0(外部中断1)的中断请求标志位。
当IT0(IT1)=0,即外部中断为电平触发方式时,CPU在每个机器周期的S5P2采样引脚。若引脚为低电平,将直接触发外部中断,则置1 IE0(IE1),说明有中断请求,否则清0 IE0(IE1)。
当IT0(IT1)=1,即外部中断为跳变触发方式时,若第一个机器周期采样到引脚为高电平,第二个机器周期采样到引脚为低电平时,由硬件置位IE0(IE1),并以此向CPU请求中断。当CPU响应中断转向中断服务程序时由硬件将IE0(IE1)清零。
当把外部中断设置为跳变触发方式时,CPU在每个机器周期都采样引脚。为了保证检测到负跳变,输入到引脚上的高电平与低电平至少应保持1个机器周期。
3)TF0(TF 1):定时器/计数器T0(定时器/计数器T1)的溢出中断标志。
当T0(T1)被启动计数后,从初值做加1计数,计满溢出后由硬件置位TF0(TF 1),向CPU发出中断请求,此标志一直保持到CPU响应中断后才由硬件自动清0。也可由软件查询该标志,并由软件清0。
(2)串行口控制寄存器SCON
串行口控制寄存器SCON字节地址为98H,可以位寻址,其格式见表5-2。
表5-2 SCON中的中断标志位
SCON的低2位锁存串行口的发送中断和接收中断的中断请求标志TI和RI,各标志位功能如下:
1)TI:串行发送中断标志。
CPU将数据写入发送缓冲器SBUF时,就启动发送,每发送完一帧串行数据后,硬件将自动使TI置位。但CPU响应中断时并不清除TI,必须由软件清除。
2)RI:串行接收中断标志。
在串行口允许接收时,每接收完一帧串行数据,硬件将自动使RI置位。同样,CPU在响应中断时不会清除RI,必须由软件清除。
8051系统复位后,TCON和SCON均清0,应用时要注意各位的初始状态。
3.MCS-51单片机的中断控制
(1)中断允许控制
MCS-51系列单片机的5个中断源都是可屏蔽中断,其中断系统内部设有一个专用寄存器即中断允许寄存器IE,用于控制CPU对各中断源的开放或屏蔽。用户可以通过程序置1或清0 IE相应的位,来允许或禁止各中断源的中断申请。IE的字节地址为A8 H,可以进行位寻址,其格式见表5-3。
表5-3 中断允许寄存器IE的格式
中断允许寄存器IE对中断的开放和关闭实现2级控制。所谓2级控制就是有1个总的中断控制位EA(IE.7位),当EA=0时,所有中断请求被屏蔽,CPU对任何中断请求都不接受,称CPU关中断;当EA=1时,CPU开放中断,但5个中断源的中断请求是否允许,还要由IE中的低5位所对应的5个中断请求允许控制位的状态来决定。IE各位定义如下:
1)EA:总中断允许控制位。
EA=1,开放所有中断,各中断源的允许和禁止可通过相应的中断允许位单独加以控制。
EA=0,禁止所有中断。
2)ES:串行口中断允许位。
ES=1,允许串行口中断。
ES=0,禁止串行口中断。
3)ET1:定时器/计数器T1中断允许位。
ET1=1,允许定时器/计数器T1中断。
ET1=0,禁止定时器/计数器T1中断。
4)EX1:外部中断1中断允许位。
EX1=1,允许外部中断1中断。
EX1=0,禁止外部中断1中断。
5)ET0:定时器/计数器T0中断允许位。
ET0=1,允许定时器/计数器T0中断。
ET0=0,禁止定时器/计数器T0中断。
6)EX0:外部中断0中断允许位。
EX0=1,允许外部中断0中断。
EX0=0,禁止外部中断0中断。
MCS-51单片机系统复位后,IE中各中断允许位均被清0,即禁止所有中断。
(2)中断优先级控制
MCS-51单片机的中断请求源有两个中断优先级,每个中断源都可以通过编程确定为高优先级中断或低优先级中断,因此,可实现二级嵌套。(www.daowen.com)
MCS-51单片机的片内设有一个专用寄存器即中断优先级寄存器IP,锁存各中断源优先级控制位。IP的字节地址为B8H,可位寻址。IP中的每一位均可由软件来置1或清0,即可通过编程进行各中断源中断级别的设置,其格式见表5-4。
表5-4 中断优先级寄存器IP的格式
各个位的含义如下:
1)PS:串行口中断优先控制位。
PS=1,设定串行口为高优先级中断。
PS=0,设定串行口为低优先级中断。
2)PT1:定时器T1中断优先控制位。
PT1=1,设定定时器T1中断为高优先级中断。
PT1=0,设定定时器T1中断为低优先级中断。
3)PX1:外部中断1中断优先控制位。
PX1=1,设定外部中断1为高优先级中断。
PX1=0,设定外部中断1为低优先级中断。
4)PT0:定时器T0中断优先控制位。
PT0=1,设定定时器T0中断为高优先级中断。
PT0=0,设定定时器T0中断为低优先级中断。
5)PX0:外部中断0中断优先控制位。
PX0=1,设定外部中断0为高优先级中断。
PX0=0,设定外部中断0为低优先级中断。
表5-5 中断源的响应优先级顺序表
当系统复位后,IP低5位全部清0,所有中断源均设定为低优先级中断。
在同时收到几个同一优先级的中断请求时,CPU通过内部硬件查询逻辑,按自然优先级顺序确定先响应哪个中断请求。自然优先级由硬件形成,排列见表5-5。
由表5-5可见,各中断源在同一个优先级的条件下,外部中断0的中断优先权最高,串行口中断的优先权最低。
4.中断响应
(1)中断响应的条件
单片机响应中断的条件为中断源有请求(中断允许寄存器IE相应位置1),且CPU开中断(即EA=1)。这样,在每个机器周期的S5P2期间,对所有中断源按用户设置的优先级和内部规定的优先级进行顺序检测,并可在S6期间找到所有有效的中断请求。如有中断请求,且满足下列条件,则在下一个机器周期的S1期间响应中断。
1)无同级或高级中断正在处理。
2)现行指令执行到最后1个机器周期且已结束。
3)若现行指令为RETI或访问IE、IP的指令时,执行完该指令且紧随其后的另一条指令也已执行完毕。
但若有下列任何一种情况存在,则中断响应会受到阻断。
1)CPU正在响应同级或高优先级的中断。
2)当前指令未执行完。
3)正在执行RETI中断返回指令或访问专用寄存器IE和IP的指令。
(2)中断响应过程
中断响应过程包括保护断点和将程序转向中断服务程序的入口地址。首先,中断系统通过硬件自动生成长调用指令LACLL addr16,该指令将自动把断点地址压入堆栈保护起来,然后将对应的中断入口地址即指令中的addr16装入程序计数器PC(由硬件自动执行),使程序转向该中断入口地址,执行中断服务程序。MCS-51系列单片机各中断源中断服务程序的入口地址是固定的,分配见表5-6。
表5-6 中断服务程序的入口地址表
(3)中断响应时间
所谓中断响应时间是指CPU检测到中断请求信号到转入中断服务程序入口所需要的机器周期数。了解中断响应时间对设计实时测控应用系统有重要指导意义。
MCS-51单片机响应中断的最短时间为3个机器周期。若CPU检测到中断请求信号时间正好是一条指令的最后一个机器周期,则不需等待就可以立即响应。所谓响应中断就是由内部硬件执行一条长调用指令,需要2个机器周期,加上检测需要1个机器周期,一共需要3个机器周期才开始执行中断服务程序。
中断响应的最长时间由下列情况所决定:若中断检测时正在执行RETI指令或访问IE、IP的指令的第一个机器周期,这样包括检测在内需要2个机器周期(以上三条指令均需两个机器周期);若紧接着要执行的指令恰好是执行时间最长的乘除法指令,其执行时间均为4个机器周期;再用2个机器周期执行一条长调用指令才转入中断服务程序。这样,总共需要8个机器周期。
其他情况下的中断响应时间一般为3~8个机器周期。
5.外部中断触发方式选择
外部中断的触发有两种触发方式:电平触发方式和跳沿触发方式。
(1)电平触发方式
电平触发方式适合于外中断以低电平输入且中断服务程序能清除外部中断请求信号(即外部中断输入电平又变为高电平)的情况。若外部中断定义为电平触发方式,外部中断申请触发器的状态随着CPU在每个机器周期采样到的外部中断输入线的电平变化而变化,这能提高响应速度。在中断服务程序返回之前,外部中断请求输入必须无效(即变为高电平),否则CPU返回主程序后会再次响应中断。
(2)跳沿触发方式
跳沿触发方式适合于以负脉冲形式输入的外部中断请求。若外部中断定义为跳沿触发方式,外部中断申请触发器能锁存外部中断输入引脚上的负跳变。即便是CPU暂时不能响应,中断请求标志也不会丢失。在这种方式下如果相继连续两次采样,一个机器周期采样到外部中断输入为高,下一个机器周期采样为低,则置“1”中断申请触发器,直到CPU响应此中断时,该标志才清0。这样不会丢失中断,但采样一次有效的负跳变需要两个机器周期,所以输入的负脉冲宽度至少保持12个时钟周期,才能保证被CPU采样到。
6.中断请求的撤销
CPU响应中断请求后即进入中断服务程序,在中断返回前,应撤除该中断请求,否则,会重复引起中断而导致错误。MCS-51各中断源中断请求撤消的方法各不相同,分别为:
(1)定时器/计数器中断请求的撤除
对于定时器/计数器T0或T1溢出中断,CPU在响应中断后即由硬件自动清除其中断标志位TF0或TF1,因此无需采取其他措施。
(2)外部中断请求的撤除
外部中断可分为电平触发方式和跳沿触发方式。
图5-4 电平触发方式外部中断请求的撤销电路
1)电平触发方式外部中断请求的撤消。对于电平触发方式的外部中断请求的撤消,除了中断请求标志位清0之外,还需在CPU响应中断之后把中断请求信号清除,否则,就会引起重复中断而导致错误。中断请求标志的撤销是自动的,但是中断请求信号的低电平可能继续存在。为此,可在系统中增加如图5-4所示的电路,把中断请求信号引脚从低电平强制改变为高电平。
由图可知,外部中断请求信号通过非门加在D触发器的CP端,用D触发器锁存外来的中断请求低电平,并通过D触发器的输出端Q端接到(或)。由于D端接地,当外部中断请求信号出现时,Q端输出为0,(或)为低,外部中断向单片机发出中断请求。中断响应后,为了撤销中断请求,可利用D触发器的直接置位端SD实现,把SD端接单片机的P1.0端,因此只要P1.0端输出一个负脉冲就可以使D触发器置1,从而撤销了低电平的中断请求信号。所需要的负脉冲可通过在中断服务程序中增加如下2条指令得到:
ORL P1.0,#01H;P1.0为1
ANL P1.0,#0FEH;P1.0为0
2)跳沿触发方式外部中断请求的撤消。对于跳沿触发方式外部中断请求的撤消,包括2项内容:中断请求标志位的清0和外部中断请求信号的撤销。其中中断请求标志位在CPU响应中断后由硬件自动清0,而由于跳沿信号过后也就消失了,外部中断请求信号也就自动撤销了,因此对于跳沿触发方式外部中断请求的撤消无需采取其他措施。
(3)串行口中断请求的撤除
对于串行口中断,CPU在响应中断后无法知道是接收中断还是发送中断,还需测试这两个中断标志位的状态,以判定是接收操作还是发送操作,然后才能清除。所以串行口中断请求的撤消只能使用软件的方法,在中断服务程序中用如下的指令来进行串行口中断标志位的清除:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。