1、 5.2.3 中断请求的响应、撤除及返回 1中断的响应 从前面介绍的中断允许控制寄存器IE中可看出,一个中断源发出请求后是否被CPU响应,首先必须得到IE寄存器的允许,即开中断。如果不置位IE寄存器中的相应允许控制位,则所有中断请求都不能得到CPU的响应。在中断请求被允许的情况下,某中断请求被CPU响应还要受下列条件的影响。(1)当前CPU没有响应其他任何中断请求,则AT89C51在执行完现行指令后就会自动响应该中断。(2)CPU正在响应某中断请求时,如果新来的中断请求优先级更高,则AT89C51会立即响应新中断请求,从而实现中断嵌套;如果新来的中断请求与正在响应的中断优先级相同或更低,则CP
2、U必须等到现有中断服务完成以后,才会自动响应新来的中断请求。(3)在CPU执行RETI指令或访问IE/IP寄存器指令时,CPU必须等到这些指令执行完之后才能响应中断请求。AT89C51响应某一中断请求后要进行如下操作:(1)完成当前指令的操作。(2)保护断点地址,将PC内容压入堆栈。(3)屏蔽同级的中断请求。(4)将中断源入口地址(固定的)送入PC寄存器,自动转入相应中断程序入口地址。中断源口地址如表5-2所示。(5)执行中断服务程序。(6)当执行到RETI指令时即结束中断,从堆栈中自动弹出断点地址到PC寄存器,返回到先前断点处继续执行原程序。表5-2给出的中断源入口地址是固定的,不能更改。表
3、5-2 AT89C51中断入口地址表中断源中断程序入口地址INT00003H定时器T0000BHINT10013H定时器T1001BH串行口中断0023H 2中断响应的时间 中断响应时间是指CPU从查询中断请求标志到转入中断服务程序入口地址所需要的时间。3中断请求的撤除 中断源发出中断请求后,CPU首先使相应的中断标志位置位,然后通过对中断标志位的检测决定是否响应。而CPU一旦响应某中断请求后,在该中断程序结束前(RETI),必须把它的相应的中断标志复位,否则CPU在返回主程序后将再次响应同一中断请求。AT89C51的中断标志位的清除(复位)有两种方法,即硬件复位和软件复位。串行口中断请求,C
4、PU响应后,没有用硬件直接清除其中断标志TI(SCON.1,发送中断标志)、RI(SCON.0,接收中断标志)的功能,必须靠软件复位清除。因此在响应串行口中断请求后,必须在中断服务程序中的相应位置通过指令将其清除(复位)。例如可使用以下指令:CLR TI CLR RI 或 ANL SCON,#0FCH ANL P1,#0FEH ORL P1,#01H CLR IE0 上述指令中第二条、第三条是十分必要的,第二条指令不但使上的低电位变成高电位,撤除了中断,而且使D触发器可以再次接受中断请求正脉冲信号。第三条指令用于清除可能已被重复置位的中断标志位IE0,使本次中断请求被彻底撤除。89C51INT
5、0P1.0DCPSDQ图5-6 清除外部中断请求电路 4中断返回 AT89C51响应中断后,自动执行中断服务程序。在中断服务程序中,只要遇到RETI指令(不论在什么位置),单片机就结束本次中断服务,返回原程序。因此,在中断服务程序的最后必须有一条RETI指令,用于中断返回。5.3 中断系统的应用中断系统的应用 AT89C51中断功能的应用主要包括两方面的内容:一是各中断源的合理运用和相应硬件电路的设计,二是初始化程序和中断服务程序的编写。下面通过几个应用举例加以理解。例5.1 利用外中断实现程序的单步执行。AT89C51内部有4 KB字节的Flash存储器,用户编写好的程序用简单的程序写入器很
6、容易写入和擦除,在没有开发系统的条件下,利用外中断实现程序的单步运行为用户调试程序带来一定的方便。89C51单稳态电路5 V0INT图5-7 单步执行程序硬件电路图 例5.2 利用定时器作外部中断源。AT89C51内部有两个定时器/计数器,当它们选择为计数器工作方式时,T0(P3.4)或T1(P3.5)引脚上发生的负跳变将使T0或T1计数器加1计数。利用此特性,将P3.4、P3.5作为外部中断请求输入线,将T0或T1计数初值设定为满量程(#0FFH)。当T0、T1引脚上的电平发生负跳变时,计数器加1计数溢出,引起中断,因而可当作外中断使用,以计数器T0为例,初始化程序如下:MOV TMOD,#
7、06H ;置T0为工作方式2MOV TL0 ,#0FFH ;置T0计数初值MOV TH0 ,#0FFHSETB EA ;开CPU中断SETB ET0 ;允许T0中断SETB TR0 ;启动T0计数 END 例5.3 扩展外部中断源:在变频调速器中都设有过流(OC)、过压(OV)、欠压(UV)、过热(OH)这四种故障保护,当任一故障发生时,都要立刻停机处理,避免故障范围扩大。这种情况必须采用中断方式,使单片机立刻响应中断处理。试设计其硬件电路和软件程序。根据要求,四个故障相当四个中断源,可利用中断查询方法,将四个中断源归结为一个中断请求,同时四个故障信号引到P1口的四个输入端,然后在中断程序中查
8、询P1口,确定是哪一个故障申请的中断。电路如图5-8所示。一旦发生故障,单片机必须响应中断,因此,该中断必须设置成最高级中断。在中断程序中可以显示故障信息。P1.3P1.2P1.1P1.0AT89C511OCOVUVOH1INT图5-8 扩展4个外中断源电路主程序和中断服务程序如下:ORG0000AJMP ZCX1 ;转主程序NOP ORG 0013HAJMP INT1 ;转中断程序NOP ORG 0100HZCX1:MOV SP,#30H ;置堆栈指针 MOV IP,#04H ;设 为最高级 CLR IT1 ;设 为电平触发 SETB EA ;开中断 SETB EX1ZCX2:其他处理程序
9、AJMP ZCX2 ORG 0200H1INT1INTINT1:PUSH PSW ;保护现场 PUSH ACC MOV A,P1 ;读入P1口低4位状态 ANL A,#0FH JNB ACC0,X1 ;是OC中断吗?不是则转移 ACALL XY1 ;调OC处理子程序X1:JNB ACC1,X2 ;是OV中断吗?不是则转移 ACALL XY2 ;调OV处理子程序X2JNB:ACC2,X3 ;是UV中断吗?不是则转移 ACALL XY3 ;调UV处理子程序X3:JNB ACC3,X4 ;是OH中断吗?不是则转移 ACALL XY4 ;调OH处理子程序X4:POP ACC POP PSW RETIXY1:OC处理子程序(略)RET