第5章:中断系统2培训资料

上传人:yuzo****123 文档编号:142637006 上传时间:2020-08-21 格式:PPT 页数:37 大小:513.50KB
返回 下载 相关 举报
第5章:中断系统2培训资料_第1页
第1页 / 共37页
第5章:中断系统2培训资料_第2页
第2页 / 共37页
第5章:中断系统2培训资料_第3页
第3页 / 共37页
第5章:中断系统2培训资料_第4页
第4页 / 共37页
第5章:中断系统2培训资料_第5页
第5页 / 共37页
点击查看更多>>
资源描述

《第5章:中断系统2培训资料》由会员分享,可在线阅读,更多相关《第5章:中断系统2培训资料(37页珍藏版)》请在金锄头文库上搜索。

1、5.2 中断处理过程,中断处理流程 中断嵌套 中断的应用实例,图5-3 中断流程图,中断处理流程,中断处理过程可分为中断请求、中断响应、中断处理和中断返回四个阶段。不同的计算机因其中断系统的硬件结构不同,因此,中断响应的方式也有所不同。这里仅以8051单片机为例进行叙述。其主要内容及一般顺序如图5-3所示。,1中断请求,中断源发出中断请求信号,相应的中断请求标志位(在中断允许控制寄存器TCON中)置“1”。CPU将不断地及时查询这些中断请求标志,一旦查询到某个中断请求标志置位,CPU就会响应该中断源中断。,中断优先级的判定 中断源的优先级别分为高级和低级,通过由软件设置中断优先级寄存器IP相关

2、位来设定每个中断源的级别。 如果几个同一优先级别的中断源同时向CPU请求中断,CPU通过硬件查询电路首先响应自然优先级较高的中断源的中断请求。 中断可实现两级中断嵌套。高优先级中断源可中断正在执行的低优先级中断服务程序,除非执行了低优先级中断服务程序的CPU关中断指令。同级或低优先级的中断不能中断正在执行的中断服务程序。,中断响应过程 在满足中断响应条件时,CPU响应中断。 首先,将相应的优先级状态触发器置1,即关闭同级和低级中断。 其次,调用入口地址,断点入栈,相当于LCALL指令,但不保护状态寄存器PSW及其他寄存器内容。 保存断点,(PC) 栈顶单元 然后,将中断源对应的中断入口地址装入

3、程序计数器PC中,使程序转向该中断入口地址,并执行中断服务程序。 硬件自动清除TF0、TF1、IE0、IE1中断标志(串行口中断请求标志 RI和 TI除外)。,80C51五个中断入口地址如下:,中断入口地址是固定的,其排列顺序按照自然优先权排列,相互之间间隔8B。一般来说,8B空间安排不下一个中断服务程序,但可安排一条转移指令,跳转到其他合适的区域编写真正的中断服务程序。,3.中断处理,中断处理就是执行中断服务程序,从中断入口地址开始执行,直到返回指令(RETI)为止。此过程一般包括三部分内容,一是保护现场,二是处理中断源的请求,三是恢复现场。,中断服务程序一般包含以下几个部分。 (1)现场保

4、护和现场恢复 为了使中断服务程序的执行不破坏CPU中寄存器或存储单元的原有内容,以免在中断返回后影响主程序的运行,应该把CPU中有关寄存器或存储单元的内容推入堆栈中保护起来,这就是所谓的现场保护,通常是指ACC、PSW和DPTR等。 中断服务结束后,在返回主程序前,须把保存的现场从堆栈中弹出,以恢复寄存器存储单元的原有内容,这就是所谓现场恢复。对于80C51,利用堆栈保护和恢复现场需要遵循先进后出、后进先出的原则。,说明:,(2)开中断和关中断 在中断处理进行的过程中,可能又有新的中断请求到来,如果禁止被中断,可以先关闭中断系统,待任务执行完后再打开中断系统。当然,如系统本身需要中断嵌套,则不

5、能将中断系统关闭,所有中断的发生按照系统“优先级”的设置自动“决策”行事。 (3)中断服务程序主体 中断服务程序主体是进行中断处理的具体内容,以子程序的形式存在,任何中断发生并被响应后,程序将自动进入相关的入口地址,执行中断服务程序。,在编写中断服务程序时要注意以下几个方面: 一般在这些中断入口地址区存放一条无条件转移指令,转向中断服务程序的起始地址。 若要求禁止更高优先级中断源的中断请求,应先用软件关闭CPU中断或屏蔽更高级中断源的中断,在中断返回前再开放被关闭或被屏蔽的中断。 在保护现场和恢复现场时,为了不使现场数据受到破坏而造成混乱,在保护现场之前要关中断,在保护现场之后再开中断;在恢复

6、现场之前关中断,在恢复现场之后再开中断。,4.中断返回 (1)中断返回 中断返回是把程序运行从中断服务程序转回到被中断的主程序上去,中断返回通过执行中断返回指令RETI来实现,该指令的功能是首先将相应的优先级状态触发器置0,以开放同级别中断源的中断请求;其次,从堆栈区把断点地址取出,送回到程序计数器PC中。 因此,不能用RET指令代替RETI指令,而且这条指令必然是中断服务程序的最后一条指令。,当CPU执行RETI指令后,自动完成下列操作: 恢复断点地址。将原来压入堆栈的PC断点地址从堆栈中弹出,送回PC。这样CPU就返回到原断点处,继续执行被中断的原程序。 开放同级中断,以便允许同级中断源请

7、求中断。 以上响应过程的大部分操作是CPU自动完成的,用户只需要了解基本原理就可以,需要做的事情是编制中断服务程序,并在此之前完成中断初始化。,(4)中断请求的撤除,中断源发出中断请求,相应中断请求标志置“1”。CPU响应中断后,必须清除中断请求“1”标志;否则中断响应返回后,将再次进入该中断,引起死循环出错。如何撤除中断请求标志的说明如下: 定时器溢出中断请求的撤除: 对于定时器0或1溢出中断,CPU在响应中断后即由硬件自动清除其中断标志位TF0或TF1,用户无须采取其他措施。 串行口中断的撤除: 对于串行口中断,CPU在响应中断后,硬件不能自动清除中断请求标志位TI、RI,用户必须在中断服

8、务程序中用软件将其清除(如CLR RI)。 对于外中断/INT0、/INT1,若采用边沿触发方式,CPU响应中断时,也由硬件自动清除响应的中断请求标志IE0或IE1。,外部中断的撤除: 外部中断为边沿触发方式时,CPU响应中断后,硬件会自动清除中断请求标志IE0或IEl。 外部中断为电平触发方式时,CPU响应中断后,硬件会自动清除中断请求标志IE0或IEl,但由于加到INT0或INT1引脚的外部中断请求信号并未撤除,中断请求标志IE0或IEl会再次被置1,所以在CPU响应中断后应立即撤除INT0或INT1引脚上的低电平。一般采用加一个D触发器和几条指令的方法来解决这个问题。,由下图可知,外部中

9、断请求信号直接加到D触发器的CP端,当外部中断请求的低电平脉冲信号出现在CP端时,D触发器的Q端置0,INT0或INT1引脚为低电平,发出中断请求。在中断服务程序中开始的三条指令可先在P1.0输出一个宽度为2个机器周期的负脉冲,使D触发器的Q端置1,然后由软件来清除中断请求标志IE0或IEl。 外部中断的撤除电路,中断优先控制和中断嵌套(补充),1中断优先控制 80C51中断优先控制首先根据中断优先级,此外,还规定了同一中断优先级之间的中断优先权。其从高到低的顺序为:/INT0、T0、/INT1、T1、串行口。 中断优先级是可编程的,而中断优先权是固定的,不能设置,仅用于同级中断源同时请求中断

10、时的优先次序。因此80C51中断优先控制的基本原则是: (1)高优先级中断可以中断正在响应的低优先级中断,反之则不能。 (2)同优先级中断不能互相中断。 (3)同一中断优先级中,若有多个中断源同时请求中断,CPU将先响应优先权高的中断,后响应优先权低的中断。,图5-5 中断嵌套示意图,2中断嵌套,当CPU正在执行某个中断服务程序时,如果发生更高一级的中断源请求中断,那么CPU可以再“中断”正在执行的低优先级中断服务程序,转而响应更高一级的中断,这就是中断嵌套。其示意图如图5-5所示。 中断嵌套只能高优先级“中断”低优先级,低优先级不能“中断”高优先级,同一优先级也不能相互“中断”。 中断嵌套结

11、构类似于调用子程序嵌套,不同的是: (1)子程序嵌套是在程序中事先安排好的;中断嵌套是随机发生的。 (2)子程序嵌套无次序限制,中断嵌套只允许高优先级“中断”低优先级。,中断系统的应用,中断系统的应用要解决的问题首先是编制中断应用程序,其次是熟悉中断过程。编制应用程序包括两大部分内容:中断初始化和中断服务子程序。 1中断初始化 (1)设置堆栈指针SP,根据要保护数据的个数,设置堆栈深度。 深度要求不高并且不用寄存器13组时,可维持复位时的状态:SP=07H,深度为24B(20H2FH为位寻址区)。 要求有一定深度时,可设置SP=60H或50H,深度分别为32B和48B。 一般建议将SP改为60

12、H或50H。 (2)定义中断优先级。根据中断源的紧急程度,通过设置IP寄存器,将中断优先级划分为高优先级和低优先级。,(3)定义外中断触发方式。 外中断触发一般宜采用边沿触发方式,若必须采用电平触发方式时,应在硬件电路上和中断服务程序中采取撤除中断请求信号的措施。 (4)开放中断。 通过设置IE寄存器,开放用户所需要打开的中断。对IE操作可以采用字节操作,也可以采用位操作,如:MOV IE, #81H或 SETB EA, SETB EX0。 (5)安排好等待中断或中断发生前主程序应完成的操作内容,如内存单元的初始化等。,2中断服务子程序,中断服务子程序内容包括: (1)在中断服务入口地址设置一

13、条跳转指令,转移到中断服务程序的实际入口处。 (2)根据需要保护现场。 (3)中断源请求中断服务要求的操作。 (4)恢复现场。与保护现场相对应,注意遵循先进后出、后进先出操作原则。 (5)中断返回,最后一条指令必须是RETI。,编写中断服务程序时应注意, 在中断矢量地址单元处放一条无条件转移指令(如LJMP H),使中断服务程序可灵活地安排在64KB程序存储器的任何空间。 在中断服务程序中,用户应注意用软件保护现场,以免中断返回后丢失原寄存器、累加器中的信息。 若要在执行当前中断程序时禁止更高优先级中断,可以先用软件关闭CPU中断或禁止某中断源中断,在中断返回前再开放中断。,中断的完整程序结构

14、,中断入口表程序,主程序,中断服务程序,(其它子程序),源程序汇编结束伪指令,入口表程序,ORG 0000H LJMP MAIN ; 跳到主程序入口 ORG 0003H LJMP RINT0 ; 跳到 /INT0 中服程序入口 ORG 000BH LJMP RT0 ; 跳到 T0 中服程序入口 ORG 0013H LJMP RINT1 ; 跳到 /INT1 中服程序入口 ORG 001BH LJMP RT1 ; 跳到 T1 中服程序入口 ORG 0023H LJMP RPS ; 跳到串行口中服程序入口,主程序(MAIN),MAIN: MOV A,R0 ; 主程序入口 SETB EA SJMP

15、$ ; 主程序结束,主程序的内容,应用系统相关的指令语句 对与中断相关寄存器进行置位操作,注: SJMP $ 或 LOOP: SJMP LOOP 语句为等待中断产生。,中断服务程序(RINT0),RINT0:PUSH ACC ; 中断服务程序入口 PUSH PSW ; 保护现场 POP PSW POP ACC ; 恢复现场 RETI ; 退出中断服务程序,注: RETI 指令恢复 PC 断点为指向 SJMP $ 。,注: 保护/恢复现场为中断服务程序中要用的存储器。,采用中断时的完整程序结构,ORG 0000H LJMP MAIN ; 跳到主程序入口 ORG 0003H LJMP RINT0

16、; 跳到 /INT0 中服程序入口 MAIN:SETB EA ; 主程序入口 SJMP $ ; 主程序结束 RINT0:PUSH ACC ; 中断服务程序入口 RETI ; 退出中断服务程序 END ; 结束汇编,表程序,主程序,中服 程序,ORG0000H LJMPMAIN ORG0013H LJMPZD1 ORG0100H MAIN:;主程序 ORG1000H ZD1: PUSHACC;中断服务程序 PUSHDPH PUSHDPL PUSH00H ;处理程序 POP00H POPDPL POPDPH POPACC RETI,例如,现有外部中断1提出申请,且主程序中有R0、DPTR、累加器A需保护,则编制程序应为:,【例1】 P1口做输出口,控制八只灯(P1口输出低电平时灯被点亮),利用手控单脉冲信号作为外部中断信号,控制八只灯按一定的规律循环

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件 > 高中课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号