您的位置: 网站首页 > 电子与嵌入式 > 单片机原理与应用 > 第6章 中断系统 > 【6.2 MCS-51单片机的中断系统及处理过程】

6.2 MCS-51单片机的中断系统及处理过程

 

6.2.1 中断系统的结构

MCS-51单片机的中断系统由与中断有关的特殊功能寄存器、中断入口、顺序查询逻辑电路等组成,其结构框图如图6-3所示。

6-3  MCS-51中断系统结构图

6.2.2  中断源及中断入口

MCS-51提供5个中断源(80526个中断源),每个中断源可编程为高级或低级两个优先级之一。

:外部中断0请求输入端,低电平或负跳变有效。此中断由P3.2引脚的第二个功能实现输入,置位/复位TCON中的IE0TCON.1)中断请求标志位。

:外部中断1请求输入端,低电平或负跳变有效。由P3.3引脚的第二个功能实现输入,置位/复位TCON中的IE1TCON.3)中断请求标志。

TF0TF1:定时器/计数器0和定时器/计数器l溢出中断。这属于内部中断,当定时器/计数器回零溢出时,由硬件自动置位/复位TCON中的TF0TCON.5)或TFlTCON.7)中断请求标志位。

TI/RI:串行发送/接收中断,当完成一串行帧的发送/接收时,由内部硬件置位SCON中的串行中断请求标志TI(发送)或RI(接收),必须由用户软件复位TIRI

8052的定时器/计数器2中断:当定时器2回零溢出时,由内部硬件自动置位T2CON中的TF2中断请求标志,若EXEN2=1T2FXP1.1的第二个功能输入)引脚上出现负跳变而造成捕获或重装载时,由内部硬件自动置位T2CON中的EXT2请求中断,必须由软件复位。

80515个中断源,是通过对中断控制寄存器IE的编程来控制每一个中断源的请求是否被响应,而通过对中断优先寄存器IP的编程确定每一个中断源的优先级。中断入口地址如表6-1所示。

6-1  8031/8051中断入口地址表

   

中断服务程序入口

   

中断服务程序入口

0003H

定时器T1

001BH

定时器T0

000BH

串行口中断

0023H

0013H

 

 

 

6.2.3  中断控制

8051中断系统有以下4个特殊功能寄存器。

·    定时器控制寄存器TCON(用6位)。

·    串行口控制寄存器SCON(用两位)。

·    中断允许控制寄存器IE

·    中断优先级控制寄存器IP

其中,TCONSCON只有一部分位用于中断控制。通过对以上各特殊功能寄存器进行置位或复位等操作,可实现各种中断控制功能。

8051的中断优先级可以归纳为下面几条基本原则:

1)当高级和低级中断请求同时到来时,CPU响应高级中断。

2)任何一种中断一旦得到响应,与其同级的或者比其低级的中断请求即被禁止。8051单片机的中断系统中有两个不可编程的“优先级生效”触发器,一个是“高级优先级生效”触发器,用以指明已进行高级中断服务,并阻止其他一切中断请求;一个是“低优先级生效”触发器,用以指明已进行低优先级中断服务,并阻止除高优先级以外的一切中断请求。

3CPU响应低级中断请求以后,仍可以响应高级的中断请求,从而出现中断嵌套,反之则不可以。

4)当同级的中断请求同时申请中断时,CPU按照查询顺序响应。

6.2.4  中断响应

MCS-51响应中断时和一般的中断系统类似,通常也需要满足如下条件之一。

1)若CPU处在非响应中断状态且相应中断是开放的,则MCS-51在执行完现行指令后就会自动响应某中断源来的中断请求。

2)若CPU正处在响应某一中断请求状态时又来了新的优先级更高的中断请求,则MCS-51便会立即响应而实现中断嵌套;若新来的中断优先级比正在服务的优先级低,则CPU必须等到现有中断服务完以后才会自动响应新来的中断请求。

3)若CPU正处在执行RETI或任何访问IE/IP指令(如:SETB EA)时刻,则MCS-51必须等待执行完下条指令后才响应该中断请求。

在满足上述3个条件之一的基础上,MCS-51均可响应新的中断请求。

中断响应时间是指从查询中断请求标志位到转向中断区入口地址所需的机器周期数。

MCS-51单片机的最短响应时间为3个机器周期。其中,中断请求标志位查询占一个机器周期,而这个机器周期又恰好是指令的最后一个机器周期,在这个机器周期结束后,中断即被响应,产生LCALL指令,而执行这条长调用指令需两个机器周期。这样中断响应共经历了一个查询机器周期和两个LCALL指令执行机器周期,总计3个机器周期。

中断响应最长时间为8个机器周期,若中断标志查询时,刚好是开始执行RETRETI或访问IEIP的指令,则需把当前指令执行完再继续执行一条指令后才能进行中断响应。执行RETRETI或访问IEIP的指令最长需两个机器周期。而如果继续执行的那条指令恰好是MUL(乘)或DIV(除)指令,则又需4个机器周期。再加上执行长调用指令LCALL所需的两个机器周期,从而形成了8个机器周期的最长响应时间。

一般情况下外中断响应时间都是大于3个机器周期而小于8个机器周期,在这两种情况之间。当然,如果出现有同级或高级中断正在响应或服务需等待的情况,那么响应时间就无法计算了。

在一般应用情况下,中断响应时间的长短无需考虑。只有在精确定时的应用场合,才需要知道中断响应时间,以保证精确的定时控制。

6.2.5  中断处理

中断处理过程可分为3个阶段,即中断响应、中断处理、中断返回。我们以外设提出接收数据请求为例讲解中断处理过程。当CPU执行主程序到第K条指令时,外设向CPU发出信号,提出接收数据的中断请求。CPU接到中断请求信号后,在本条指令执行完后,将K+1条指令地址作为断点保存,然后转去准备向外设输出数据(即响应中断)。CPU向外设输出数据(中断服务),数据输出完毕后,执行RETI指令将断点地址从堆栈中弹出到PCCPU返回到主程序的第K+1条指令处继续执行(即中断返回)。

由此可见,CPU执行的中断服务程序如同子程序一样,因此又被称做中断服务子程序。

两者的区别在于,子程序是用LCALL(或ACALL)指令来调用的,而中断服务子程序是通过中断请求实现的。所以,中断服务子程序中也存在保护现场、恢复现场的问题。

6.2.6  中断返回

某一中断源发出中断请求时,CPU能决定是否响应这个中断请求。若响应此中断请求,CPU必须在现行(假设)第K条指令执行完后,把断点地址(第K+l条指令的地址)即现行PC值压入堆栈中保护起来(保护断点)。当中断处理完后,再将压入堆栈的第K+1条指令的地址弹到PC(恢复断点)中,程序返回到原断点处继续运行。在中断服务程序中,最后一条指令必须为中断返回指令RETICPU执行此指令时,一方面消除中断响应时所置位的“优先级生效”触发器,一方面从当前栈顶弹出断点地址送入程序计数器PC,从而返回主程序。若用户在中断服务程序中进行了压栈操作,则在RETI指令执行前应进行相应的出栈操作,使栈项指针SP与保护断点后的值相同。也就是说,在中断服务程序中,PUSH指令与POP指令必须成对使用,否则不能正确返回断点。

6.2.7  中断请求的撤除

CPU响应中断请求,执行中断服务程序,在其执行中断返回指令(RETI)之前中断请求信号必须撤除,否则将可能再次引起中断而出错。

中断请求撤除的方式有3种,具体如下。

1)单片机内部硬件自动复位。对于定时器/计数器T0T1及采用边沿触发方式的外部中断请求,CPU在响应中断后,由内部硬件自动撤除中断请求。

2)应用软件清除响应标志。对于串行口接收/发送中断请求及定时器T2的溢出和捕获中断请求,CPU响应中断后,内部无硬件自动复位RITITF2EXF2,必须在中断服务程序中清除这些标志,才能撤除中断。

3)既无软件清除也无硬件撤除。对于采用电子触发方式的外部中断请求,CPU对引脚上的中断请求信号既无控制能力,也无应答信号。为保证在CPU响应中断后,执行返回指令前撤除中断请求,必须考虑另外的措施。

6.2.8  扩充外中断源

MCS-51系列单片机只有两个外部中断源,但在应用系统中,有时要求较多的外中断源。下面介绍外扩中断源的方法。

1.利用定时器扩充中断源

如前所述,定时器T0T1有两个溢出中断标志和两个外部计数引脚P3.4P3.5。如果将定时器设置为计数器方式,并将计数初值设为满量程,当外部信号通过计数引脚产生一个负跳变信号时,计数器即溢出中断,这样外部计数引脚P3.4P3.5就成为新的外部中断源,此时定时器溢出标志TF0TF1就成为新外部中断源的溢出标志。其中断入口地址000BH001BH就是新中断源的中断入口地址。

2.中断和查询相结合

6-4  查询法扩展中断源示意图

当系统需要多个中断源时,可把它们按轻重缓急进行排队。把其中级别最高的中断源接到(或)端,其余的中断源用线或电路连接到(或)端,同时分别引向一个I/O口(如P1口)。中断由硬件电路产生,这种方法理论上可以处理任意个外部中断。图6-4就是用这种方法外扩4个中断源的示意图。

查询法扩展外部中断源比较简单,但当外部中断源个数较多时,查询时间太长,常常不能满足现场实时控制的要求。

3.用优先级编码器扩展外部中断源

外扩中断源也可以通过优先级编码电路加以实现。74LSl48是一种有8个输入端的优先级编码器,可以外扩8个中断源。74LS148编码器的真值表略。

4.采用8259扩展外部中断源

为了克服查询法扩展外部中断源所需查询时间长的缺点,人们通常采用8259中断控制器来扩展外部中断源。

8259是专门为8085/80x86系列芯片设计的可编程中断控制器,MCS-51系列芯片和它不完全兼容,使用时必须加以调整。由于所扩展的外中断源是经MCS-51提出中断申请,因此这些外中断源在使用时应注意以下几个问题。

1)中断响应时间。

MCS-51单片机的中断响应时间在38个机器周期内,由于MCS-51在真正为所扩展的外中断源(IR0IR7)服务之前需执行一段引导程序,因此对所扩展的外中断源而言,真正的中断响应时间还要把执行引导程序所需的时间算在内。

2)中断申请信号的宽度。

扩展的内部中断源,其中断申请信号宜采用负脉冲形式,且负脉冲要有足够的宽度,以保证MCS-51能读取到由锁存器提供的中断向量低8位地址。MCS-51读取这个地址要执4条指令,需7个机器周期,若系统时钟频率为12MHz,则中断申请信号负脉冲的宽度要大于15ms

3)堆栈深度的问题。

由于单片机堆栈在片内,字节有限,每次响应中断时都要将中断返回地址、现场保护内容压入栈内,如果发生中断服务子程序中又调用子程序,则极容易发生堆栈溢出或侵占了片内RAM其他内容,从而造成程序混乱。这点在单片机使用中要特别注意。