首页 理论教育 8051单片机中断响应条件与处理方法

8051单片机中断响应条件与处理方法

时间:2023-10-23 理论教育 版权反馈
【摘要】:中断响应就是CPU对中断源提出的中断请求的接收。如果8051单片机满足中断响应的条件,并且不存在中断被屏蔽的情况,CPU就会响应相应的中断请求。

8051单片机中断响应条件与处理方法

单片机中断的处理过程可分为中断响应、中断处理和中断返回3个阶段。下面介绍8051单片机的中断处理过程。

1.中断的响应条件

在每个机器周期的S5P2时刻,单片机依次采样每一个中断标志位,而在下一个机器周期对采样到的中断进行查询。如果在前一个机器周期的S5P2有中断标志,则在查询周期内便会查询到并按优先级高低进行中断处理,中断系统将控制程序转入相应的中断服务程序。CPU响应一个中断请求被响应,需满足以下必要条件:

1)IE寄存器中的中断总允许位EA=1。

2)该中断源发出中断请求,即该中断源对应的中断请求标志为“1”。

3)该中断源的中断允许位=1,即该中断没有被屏蔽。

4)无同级或更高级中断正在被服务。

中断响应就是CPU对中断源提出的中断请求的接收。当CPU查询到有效的中断请求时,在满足上述条件时,紧接着就进行中断响应。但若存在以下几种情况,CPU的中断响应会被屏蔽,使本次的中断请求得不到响应。如CPU正在处理同级的或更高优先级的中断;现行的机器周期不是所执行指令的最后一个机器周期,即正在执行的指令没有执行完以前,CPU不响应任何中断;当前正在执行的指令是返回指令(RETI)或是对IE或IP寄存器进行读/写的指令。CPU在执行完这些指令后,至少还要再执行一条其他指令才会响应中断。

CPU响应中断时,会根据中断源的类别,在硬件的控制下,程序自动转向相应的中断服务程序入口单元,执行中断服务程序。

2.中断响应过程

MCS-51系列单片机的中断系统中分为两个中断优先级。每一个中断源均可通过对IP寄存器编程为高优先级中断或低优先级中断,并可实现多级中断嵌套。一个正在执行的低优先级中断服务程序能被高优先级的中断请求所中断,但不能被另一个同级或低级的中断源所中断。因此,如果CPU正在执行高优先级的中断服务程序,则不能被任何中断源所中断,必须等到当前的中断服务程序执行结束,遇到返回指令(RETI)返回主程序后,至少再执行一条指令才能响应新的中断请求。为了实现上述功能,MCS-51系列单片机的中断系统中有两个不可寻址的优先级状态触发器。一个指出某高优先级的中断正在得到服务,所有后来的中断请求被阻断;另一个触发器指出某低优先级的中断正在得到服务,所有同级的中断请求都被阻断,但不能阻断高优先级的中断请求。

如果8051单片机满足中断响应的条件,并且不存在中断被屏蔽的情况,CPU就会响应相应的中断请求。在实际的响应过程中,CPU首先置位被响应中断的优先级状态触发器,以屏蔽(即关闭)同级和低级的中断请求。然后,根据中断源的类别,在硬件的控制下,内部自动执行一条子程序调用指令,将程序转移至相应的中断入口处,开始执行中断服务程序。在转入中断服务程序时,子程序调用指令自动把断点地址(即程序计数器PC的当前值)压入堆栈,但不会自动保存状态寄存器PSW等寄存器中的内容。

当中断的各项条件满足要求时,CPU响应中断,停止现行程序,转向中断服务程序。整个响应过程中,系统应完成工作如下:

1)保护现场。由于CPU响应中断是随机的,而CPU中各寄存器的内容和状态标志会因转至中断服务程序而受到破坏,所以要在中断服务程序的开始,把断点处有关的各个寄存器的内容和状态标志用堆栈操作指令PUSH推入堆栈保护。

2)中断服务。中断源申请中断时应完成的任务。

3)恢复现场。在中断服务程序完成后,把保护在堆栈中的各寄存器内容和状态标志,用POP指令弹回CPU。

4)开中断。上面已谈到CPU在响应中断时自动关中断。为了使CPU能响应新的中断请求,在中断服务程序末尾应按排开中断指令。

5)返回主程序。当中断服务程序执行完毕返回主程序时,必须将断点地址弹回PC,因此在中断服务程序的最后用一条RETI指令,使PC返回断点。

因系统保留的各中断入口地址间空间太小,所以通常在中断入口地址处安排一条相应的跳转指令,跳转至用户设计的中断服务程序入口。

3.中断处理

CPU响应中断请求后,即转到中断服务程序的入口,执行中断服务程序。从中断服务程序的第一条指令开始到中断返回指令为止,这个过程称为中断处理或中断服务。不同的中断源所需服务的要求及内容各不相同,其处理过程也就有所区别,但在一般情况下,中断处理应包括两部分内容:一是保护现场,二是为中断源服务。

现场通常有程序状态字PSW、工作寄存器、累加器或其他的特殊功能寄存器等。如果在中断服务程序中要用这些寄存器,则应在进入中断服务之前用进栈指令将它们的内容压入堆栈中保护起来,这就叫做保护现场。同样,在完成中断服务,中断程序返回之前(执行返回指令RETI之前),应采用出栈指令恢复现场。

中断服务是根据中断源的具体要求所编写的中断服务程序的运行和处理。用户在编写中断服务程序时,一般应注意以下几个方面:(www.xing528.com)

1)8051单片机为各中断源所保留的中断入口地址,只相隔8个单元,如此小的空间通常是容纳不下中断服务程序的,因而常常在中断入口地址单元处设置一条无条件转移指令,使中断服务能转至中断服务程序所存放的存储器的任何位置。

2)在运行当前的中断服务程序时,如果想禁止更高优先级的中断源请求中断,可以用指令复位IE中的相关控制位来屏蔽更高优先级中断源的中断请求。在中断服务程序执行完返回之前,再用指令开放中断。

3)在中断服务程序保护、恢复现场时,为避免现场信息受到破坏或造成混乱,一般情况下,应先关闭CPU的中断,使CPU暂不响应新的中断请求,以避免保护或恢复现场的过程受到干扰。这就要求在编写中断服务程序时,应注意在保护现场之前要关中断。在保护现场之后,若允许高优先级的中断源申请中断,则应开中断。同样在恢复现场之前应关中断,恢复之后再开中断。

4.中断返回

中断服务程序的最后一条指令是中断返回指令RETI。它的功能是将断点地址从堆栈中弹出,送回程序计数器PC中,使程序能返回到原来被中断的地方继续执行。

8051单片机的RETI指令除了弹出断点之外,还通知中断系统已完成中断处理,并将优先级状态触发器清除(复位),使系统能响应新的中断请求。

5.中断请求的撤销

CPU完成中断请求的处理以后,在中断返回之前,应将该中断请求撤销,否则会引起第二次响应中断。在MCS-51系列单片机中,各个中断源撤销中断请求的方法各不相同,具体如下:

1)定时器/计数器的溢出中断:CPU响应其中断请求后,由硬件自动清除相应的中断请求标志位,使中断请求自动撤销,因此不用采取其他措施。

2)外部中断请求:中断请求的撤销与触发方式控制位的设置有关。采用边沿触发的外部中断,CPU在响应中断后,由硬件自动清除相应的标志位,使中断请求自动撤销;采用电平触发的外部中断源,应采用电路和程序相结合的方式,撤销外部中断源的中断请求信号

3)串行接口的中断请求:由于RI和TI都会引起串行接口的中断,CPU响应后,无法自动区分RI和TI引起的中断,硬件不能清除标志位,需采用软件方法在中断服务程序中清除相应的标志位,以撤销中断请求。

当某一中断得到相应时,由硬件调用对应的中断服务程序,把程序计数器PC的值压入堆栈,同时把被响应的中断服务程序的入口地址(中断服务程序的起始地址)装入PC中。因为采用硬件调用,每一个中断源的中断入口地址都是固定的,同时要每个中断服务程序必须放在对应的中断入口地址单元。

在中断服务结束后,单片机把响应中断时所置位的优先级激活触发器清零,然后将从堆栈中弹出的断点地址送给PC,使CPU返回到原来被中断的程序。

6.中断响应时间

CPU在对中断请求进行响应时,不同的情况下所需的响应时间也不一样。现以外部中断为例,说明中断响应的时间。

外部中断INT0和INT1的电平在每个机器周期的S5P2时被采样并锁存到IE0和IE1中,这个置入到IE0和IE1的状态在下一个机器周期才被查询。如果产生了一个中断请求,而且满足响应的条件,CPU响应中断,由硬件生成长调用指令转到相应的中断服务程序入口,这条指令是双机器周期指令。因此,从中断请求有效到执行中断服务程序的第一条指令的时间间隔至少需要3个完整的机器周期。

如果中断请求被下述的3个条件之一所屏蔽,将需要更长的响应时间。

1)如果已经在处理同优先级或高优先级的中断,则额外的等待时间取决于正在处理的中断服务程序的执行时间。

2)如果CPU正在执行的指令没有到最后的机器周期,则所需的额外等待时间不会多于3个机器周期,因为最长的指令(乘法指令和除法指令)也只有4个机器周期。

3)如果正在执行的指令为RETI或是对IE、IP的读写指令,则额外的等待时间不会多于5个机器周期。

这样,如果应用系统中只设定一个中断源,并且中断是开放的,则中断响应时间将是3~8个机器周期。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈