一、中断的概念和特点
1.中断的概念
在计算机执行程序的过程中,当出现某种情况,由服务对象向CPU发出请求当前程序中断的信号,要求CPU暂时停止当前程序的执行,而转去执行相应的处理程序,待处理程序执行完毕后,再返回继续执行原来被中断的程序。这样的过程称为中断过程。把引起中断的原因或触发中断请求的来源称为中断源。为实现中断而设置的各种硬件和软件称为中断系统。
2.中断的优点
在单片机控制系统中采用中断技术,具有以下优点:
(1)实行分时操作,提高了CPU的效率。当服务对象向CPU发出中断请求时,才使CPU转向为该对象服务,否则不会影响CPU的正常工作。这样,利用中断可以使CPU同时为多个对象服务,从而大大提高了整个单片机系统的工作效率。
(2)实现实时处理,及时处理实时信息。在工业现场控制中,常常要求单片机系统对信号进行实时处理。利用中断技术,各服务对象可以根据需要随时向CPU发出中断请求,CPU及时检测并处理各对象的控制要求,以实现实时控制。
(3)对难以预料的情况或故障进行及时处理。在单片机系统工作过程中,有时会出现一些难以预料的情况或故障,如电源掉电、运算溢出、传输错误等,此时可利用中断进行相应的处理而不必停机。
3.中断的处理过程
中断的处理过程主要包括中断请求、中断响应、中断服务、中断返回四个阶段,如图3.15所示。
图3.15 中断处理过程
首先由中断源发出中断请求信号,CPU在运行主程序的同时,不断地检测是否有中断请求产生,在检测到有中断请求信号后,决定是否响应中断。当CPU满足条件响应中断后,进入中断服务程序,为申请中断的对象服务。当服务对象的任务完成后,CPU重新返回到原来的程序中继续工作,这就是中断处理的全过程。
由于中断请求发生的时候是随机的,因此在响应中断后,必须保存主程序断开点的地址(即当前的PC值),以保证在中断服务任务结束后能重新回到主程序的断开点。保存主程序断开点PC值的操作称为保护断点,重新恢复主程序断开点地址的操作称为恢复断点。保护断点和恢复断点的操作是由中断系统在中断响应和中断返回过程中利用堆栈区自动完成的。
4.MCS-51的中断系统
8051单片机的中断系统结构如图3.16所示。它是由中断源、T0、T1、RXD/TXD)及中断标志位(位于TCON、SCON中)、中断允许控制寄存器IE和中断优先级控制寄存器IP及中断入口地址组成,可对每个中断源实现两级允许控制及两级优先级控制。
图3.16 MCS-51中断系统内部结构示意图
二、中断源与中断请求标志
1.中断源
(1):外部中断0请求,由P3.2引脚输入。通过IT0(TCON.0)来决定是低电平有效还是下跳变有效。一旦输入信号有效,就向CPU申请中断,并建立IE0标志。
(2):外部中断1请求,由P3.3引脚输入。通过IT1(TCON.2)来决定是低电平有效还是下跳变有效。一旦输入信号有效,就向CPU申请中断,并建立IE1标志。
(3)TF0:定时器T0溢出中断请求。当定时器0产生溢出时,定时器0中断请求标志位(TCON.5)置位(由硬件自动执行),请求中断处理。
(4)TF1:定时器1溢出中断请求。当定时器1产生溢出时,定时器1中断请求标志位(TCON.7)置位(由硬件自动执行),请求中断处理。
(5)RI或TI:串行中断请求。当接收或发送完一串行帧时,内部串行口中断请求标志位RI(SCON.0)或TI(SCON.1)置位(由硬件自动执行),请求中断。
2.中断请求标志
在中断请求信号发出后,必须在相应的存储单元中设定标志,以便CPU及时查询并做出响应。与中断请求标志相关的寄存器有TCON和SCON两个特殊功能寄存器。
(1)TCON中的中断标志。
TCON格式如下:
其中用于中断的位分别是:
TF1和TF0:分别为定时/计数器T1和定时/计数器T0的溢出中断标志。当定时/计数器计数值满产生溢出时,由硬件自动置1,并向CPU申请中断。
IE1和IE0:为外部中断1和外部中断0的中断请求标志位。当外部中断源发出中断请求时,由硬件自动置1,并向CPU申请中断。
IT1和IT0:为外部中断1和外部中断0的触发方式控制位。当IT1、IT0设为0时,为低电平触发;当IT1、IT0设为1时,为下降沿触发方式。
(2)SCON中的中断标志。
TI和RI:为串行口发送/接收中断标志位。当8051单片机的串行口发送/接收完一帧数据后,由硬件自动将TI/RI置1,向CPU请求中断。
三、中断控制
对8051单片机的中断控制包括中断允许控制和中断优先级控制两个方面,分别由可位寻址的特殊功能寄存器IE和IP实现。它们的功能及控制方法分述如下:
1.中断允许控制寄存器IE
中断允许控制寄存器IE用于对构成中断的双方进行两级控制,即控制是否允许中断源中断及是否允许CPU响应中断。其格式如下:
EA:CPU中断开放标志位。当EA=0时,CPU禁止响应所有中断源的中断请求;当EA=1时,CPU允许开放中断,此时每个中断源是否开放由各中断控制位决定。
ES:串行口中断允许控制位。若ES=1,允许串行口中断,否则禁止中断。
ET1:定时/计数器T1中断允许控制位。若ET1=1,允许定时/计数器T1中断,否则禁止中断。
EX1:外部中断1中断允许控制位。若EX1=1,允许外部中断1中断,否则禁止中断。
ET0:定时/计数器T0中断允许控制位。若ET0=1,允许定时/计数器T0中断,否则禁止中断。
EX0:外部中断0中断允许控制位。若EX0=1,允许外部中断0中断,否则禁止中断。
例如:假设在P3.2引脚上引入一个外部中断,采用下降沿触发方式,禁止其他中断,试设置相关的控制寄存器。
分析:采用下降沿触发方式只需将TCON中的IT0置1;要允许外部中断0中断,可将IE中的EA和EX0置1。设置如下:
(1)字节操作。
TCON=0x01;IE=0x81;
(2)位操作。
IT0=1;EA=1;EX0=1;
2.中断优先级控制寄存器IP
MCS-51系列单片机有两个中断优先级:高优先级和低优先级。每个中断源优先级的设定由IP的各控制位决定。IP的格式如下:
PS:串行口优先级控制位。PS=1时,串行口为高优先级;否则为低优先级。
PT1:定时/计数器T1优先级控制位。PT1=1时,T1高优先级;否则为低优先级。
PX1:外部中断1优先级控制位。PX1=1时,外部中断1高优先级;否则为低优先级。
PT0:定时/计数器T0优先级控制位。PT0=1时,T0高优先级;否则为低优先级。
PX0:外部中断0优先级控制位。PX0=1时,外部中断0高优先级;否则为低优先级。(www.daowen.com)
在单片机中对中断的控制遵循以下原则:
(1)若CPU同时接收几个不同优先级的中断请求时,先响应高优先级中断,后响应低优先级中断。
(2)当高优先级的中断正在响应时,不能被任何其他中断打断。
(3)当低优先级的中断正在响应时,可以被高优先级的中断所打断,但不能被与它同级的其他中断所打断。当CPU响应低优先级中断时被打断,而转去响应高优先级中断的现象称为中断嵌套。
(4)执行完当前指令。若当前指令为返回指令或访问IE、IP的指令,CPU必须在执行完当前指令后,再继续执行一条指令,然后才响应中断。
同一优先级别的中断源可能不止一个,因此,也需要进行优先权排队。同一优先级别的中断源采用自然优先级。自然优先级由硬件形成,排列如下:
四、中断响应的过程
中断响应是指CPU对中断源中断请求的响应。CPU并非任何时刻都能响应中断请求,而是在满足所有中断响应条件、且不存在任何一种中断阻断情况时才会响应。
1.中断响应条件
(1)有中断源发出中断请求。
(2)中断总允许位EA=1,即CPU开放中断;且申请中断的中断源对应的中断允许位为1,即没有被屏蔽。
(3)没有更高级或同级的中断正在处理中。
(4)执行完当前指令。
(5)没有进行中断返回或访问寄存器IE和IP操作。
2.中断响应
中断响应过程包括保护断点和将程序转向中断服务程序的入口地址。首先,中断系统通过硬件自动生成长调用指令(LACLL),该指令将自动把断点地址压入堆栈保护(不保护累加器A、状态寄存器PSW和其他寄存器的内容),然后,将对应的中断入口地址装入程序计数器PC(由硬件自动执行),使程序转向该中断入口地址,执行中断服务程序。
3.中断处理
从中断服务程序的第一条指令开始到返回指令为止,这个过程称为中断处理或中断服务。中断处理包括三部分:一是保护现场,二是中断服务,三是恢复现场。
通常,主程序和中断服务程序都会用到累加器A、状态寄存器PSW及其他一些寄存器,当CPU进入中断服务程序用到上述寄存器时,会破坏原来存储在寄存器中的内容,一旦中断返回,将会导致主程序的混乱,因此,在进入中断服务程序后,一般要先保护现场,然后执行中断处理程序,在中断返回之前再恢复现场。
4.中断返回
中断返回的功能是将断点地址弹出送回PC,使程序能返回到原来被中断的程序中,继续执行。
五、中断响应时间
中断响应时间是指从中断请求标志位置位到CPU开始执行中断服务程序的第一条语句所需要的时间。
1.中断请求不被阻断的情况
外部中断响应时间至少需要3个机器周期,这是最短的中断响应时间。一般来说,若系统中只有一个中断源,则中断响应时间为3~8个机器周期。
2.中断请求被阻断的情况
如果系统不满足所有中断响应条件,或者存在任何一种中断阻断情况,那么中断请求将被阻断,中断响应时间将会延长。
六、中断请求的撤销
在CPU响应某中断请求后,中断返回之前,该中断请求应该及时撤销,否则会重复引起中断而发生错误。8051单片机的各中断请求撤销的方法各不相同。分别为:
(1)硬件清零。
定时器T0和定时器T1的溢出中断标志TF0、TF1及采用下降沿触发方式的外部中断0及外部中断1的中断请求标志IE0、IE1可以由硬件自动清零。
(2)软件清零。
串行口发出的中断请求,在CPU响应后,硬件不能自动清除TI和RI标志位,因此CPU响应中断后,必须在中断服务程序中,用软件来清除相应的中断标志位,以撤销中断请求。
(3)强制清零。
当外部中断采用低电平触发方式时,仅仅依靠硬件清除中断标志IE0、IE1并不能彻底清除中断请求标志。因为尽管在8051单片机内部已将中断标志位清除,但外围引脚上的低电平不清除,在下一个机器周期采样中断请求信号时,又会重新将IE0、IE1置1,引起误中断,这种情况必须进行强制清零。
七、C51编写中断服务程序
1.中断函数的定义
C51编译器支持在C源程序中直接以函数形式编写中断服务程序。常用的中断函数定义语法如下:
函数类型 函数名( )interrupt n [using n]
其中:interrupt后面的n为中断类型号,C51编译器允许0~31个中断,n取值范围为0~31。下面给出了8051控制器所提供的5个中断源所对应的中断类型号和对应的中断服务程序入口地址:
using后面的n是所选择的寄存器组,取值范围是0~3。定义中断函数时,using是一个选项,可以省略不用。如果不用则由编译器选择一个寄存器组作为绝对寄存器组。
2.使用中断函数时要注意的问题
(1)在设计中断时,要注意的是哪些功能应该放在中断程序中,哪些功能应该放在主程序中。一般来说,中断服务程序应该做最少量的工作,这样做有很多好处。首先,系统对中断的反应面更宽了,有些系统如果丢失中断或对中断反应太慢将产生十分严重的后果,这时有充足的时间等待中断是十分重要的。其次,它可使中断服务程序的结构简单,不容易出错。
中断程序中放入的东西越多,它们之间越容易起冲突。简化中断服务程序意味着软件中将有更多的代码段,但可把这些都放入主程序中。中断服务程序的设计对系统的成败有至关重要的作用,要仔细考虑各中断之间的关系和每个中断执行的时间,特别要注意那些对同一个数据进行操作的中断服务程序。
(2)中断函数不能传递参数。
(3)中断函数没有返回值。
(4)中断函数调用其他函数,则要保证使用相同的寄存器组,否则出错。
(5)不能直接调用中断函数,否则编译器会出错。
(6)已对4个与中断有关的特殊功能寄存器TCON、SCON、IE和IP进行了相应设置,分别是:
①CPU的开、关中断;
②具体中断源中断请求的允许和禁止(屏蔽);
③各中断源优先级别的控制;
④外部中断请求触发方式的设定。
例3-3 设fosc=12MHz,利用定时器控制P1口外接的8个发光二极管,以1S为间隔循环依次点亮。用中断方式完成。
分析:本题与例3-2要求相同,这里也选用T0方式1、定时50ms,当定时器溢出20次后,就完成1s的定时,只是这里要用中断方式,则要考虑对EA和ET0的设置以及定时器中断服务程序的编写特点。
程序如下:
上例中只有定时/计数器一个中断源,就不用对其优先级进行设置了,若控制系统中有一个以上中断源,就要根据具体要求,在IP中设置优先级。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。