第29页第三章中断系统基本内容:MCS-51的中断源;MCS-51的中断屏蔽;MCS-51的中断优先级;MCS-51的中断响应条件、响应过程、响应时间;MCS-51的中断应用举例重点内容:MCS-51的中断屏蔽;MCS-51的中断优先级;中断响应条件;中断程序的编写;中断源的扩展。基本要求:熟悉MCS-51的中断源;了解MCS-51的中断响应条件、响应过程、响应时间;会设定MCS-51的中断优先级;会编写中断服务程序;会进行中断源的扩展。难点内容:MCS-51的中断响应条件、响应过程、响应时间;中断服务程序的编写。3.1MCS-51的中断源8051有5个中断源,8052有6个(T2),其中2个由外部信号输入,称为外部中断,其余由内部产生称为内部中断。每个中断源都对应一个中断请求标志位,请求信号由特殊功能寄存器TCON和SCON中的相应位来锁定。1、0INT外部中断0请求信号的输入端2、1INT外部中断1请求信号的输入端3、T0定时计数器0溢出中断请求4、T1定时计数器1溢出中断请求5、TX/RX串行口中断请求3.2中断控制8051中断系统有以下四个特殊功能寄存器:①定时器控制寄存器TCON(用六位)o②串行口控制寄存器SCON(用二位)。③中断允许寄存器IE。④中断优先级寄存器IP。其中,TCON和SCON只有一部分位用于中断控制。通过对以上各特殊功能寄存器的各位进行置位或复位等操作,可实现各种中断控制功能。一、中断请求标志1、TCON中的中断标志位TCON是定时/计数器T0和T1的控制寄存器,同时也锁存T0和T1的溢出中断标志和外部中断0和1的中断标志等。与中断有关的位如下图所示:第30页8FH8EH8DH8CH8BH8AH89H88HTF1TF0IE1IT1IE0IT0各控制位的含义如下:;①TFl——定时器/计数器T1的溢出中断请求标志位。当启动T1计数以后,TI从初值开始加1计数,计数器最高位产生溢出时,由硬件使TFl置l,并向CPU发出中断请求。当CPU响应中断时,硬件将自动对TFl清00。②TF0——定时器/计数器T0的溢出中断请求标志位。含义与TF1相同o③IE1——外部中断1的中断请求标志。当检测到外部中断引脚l上存在有效的中断请求信号时,由硬件使IE1置1。当CPU响应该中断请求时,由硬件使IEl清0。④ITl——外部中断1的中断触发方式控制位。ITl=0时,外部中断1程控为电平触发方式。CPU在每一个机器周期S5P2期间采样外部中断1请求引脚的输入电平。若外部中断l请求为低电平,则使lEl置1;若外部中断l请求为高电平,则使IEl清0。’:ITl=l时,外部中断1程控为边沿触发方式oCPU在每一个机器周期S5P2期间采样外部中断1请求引脚的输入电平。如果在相继的两个机器周期采样过程中,一个机器周期采样到外部中断1请求为高电平,接着的下一个机器周期采样到外部中断l请求为低电平,则使IEl置l。直到CPU响应该中断时,才由硬件使IEl清0。⑤IE0——外部中断0的中断请求标志。其含义与IE1类同o⑥IT0——外部中断0的中断触发方式控制位。其含义与ITl类同。2.SCON中的中断标志位SCON为串行口控制寄存器,其低2位锁存串行口的接收中断和发送中断标志RI和TI。SCON中TI和RI的格式如图所示。TIRI各控制位的含义如下:①TI——串行口发送中断请求标志。CPU将一个数据写入发送缓冲器SBUF时,就启动发送。每发送完一帧串行数据后,硬件置位TI。但CPU响应中断时,并不清除TI,必须在中断服务程序中由软件对TI清0。②RI——串行口接收中断请求标志。在串行口允许接收时,每接收完一个串行帧,硬件置位RI。同样,CPU响应中断时不会清除RI,必须用软件对其清0。二、中断允许控制8051对中断源的开放或屏蔽是由中断允许寄存器IE控制的。IE的格式如下图所示。第31页EAESETlEXlET0EX0中断允许寄存器IE对中断的开放和关闭实现两级控制。所谓两级控制,就是有一个总的开关中断控制位EA(1E.7),当EA=0时,屏蔽所有的中断申请,即任何中断申请都不接受;当EA=1时,CPU开放中断,但五个中断源还要由IE的低5位的各对应控制位的状态进行中断允许控制。IE中各位的含义如下:①EA——中断允许总控制位。EA=0,屏蔽所有中断请求;EA=1,CPU开放中断。对各中断源的中断请求是否允许,还要取决于各中断源的中断允许控制位的状态。②ES——串行口中断允许位。ES=0,禁止串行口中断;ES=1,允许串行口中断。③ETl——定时器/计数器T1的溢出中断允许位。ETl=0,禁止T1中断;ETl=l,允许T1中断。④EXl——外部中断l中断允许位。EXl=0,禁止外部中断1中断;EXl=l,允许外部中断1中断。⑤ET0——定时器/计数器T0的溢出中断允许位。ET0=0,禁止T0中断;ET0=1,允许T0中断。⑥EX0——外部中断0中断允许位。EX0=0,禁止外部中断0中断;EX0=1,允许外部中断0中断。例:假设允许片内定时器/计数器中断,禁止其他中断。试根据假设条件设置IE的相应值。解:(a)用字节操作指令MOVIE,8AH或MOVA8H,8AH(b)用位操作指令SETBET0;定时器/计数器0允许中断SETBETl;定时器/计数器l允许中断SETBEA;CPU开中断三、中断优先级控制8051有两个中断优先级,每一个中断请求源均可编程为高优先级中断或低优先级中断。中断系统中有两个不可寻址的“优先级生效”触发器,一个指出CPU是否正在执行高优先级的中断服务程序,另一个指出CPU是否正在执行低优先级中断服务程序。这两个触发器为1时,则分别屏蔽所有的中断请求。另外,8051片内有一个中断优先级寄存器IP,其格式如图所示。PSPTlPXlPT0PX0第32页IP中的低5位为各中断源优先级的控制位,可用软件来设定。各位的含义如下:①PS——串行口中断优先级控制位。②PT1——定时器/计数器T1中断优先级控制位。③PXl——外部中断1中断优先级控制位。④PT0——定时器/计数器T0中断优先级控制位。⑤PX0——外部中断0中断优先级控制位。若某几个控制位为1,则相应的中断源就规定为高级中断;反之,若某几个控制位为0,则相应的中断源就规定为低级中断。当同时接收到几个同一优先级的中断请求时,响应哪个中断源则取决于内部硬件查询顺序。其优先级顺序排列如下所示。中断源同级内的中断优先级外部中断0高定时器/计数器0溢出中断外部中断1定时器/计数器1溢出中断串行口中断最低有了IP的控制,可实现如下功能:(1)按内部查询顺序排队通常,系统中有多个中断源,因此就会出现数个中断源同时提出中断请求的情况。这样,就必须由设计者事先根据它们的轻重缓急,为每个中断源确定一个CPU为其服务的顺序号。当数个中断源同时向CPU发出中断请求时,CPU根据中断源属顺序号的次序依次响应其中断请求。(2)实现中断嵌套当CPU正在处理一个中断请求时,又出现了另一个优先级比它高的中断请求,这时,CPU就暂时中止执行对原来优先级较低的中断源的服务程序,保护当前断点,转去响应优先级更高的中断请求,并为其服务。待服务结束,再继续执行原来较低级的中断服务程序。该过程称为中断嵌套(类似于子程序的嵌套),该中断系统称为多级中断系统。二级中断嵌套的中断过程如图下所示。第33页例:设8031的片外中断为高优先级,片内中断为低优先级。试设置IP相应值。解:(a)用字节操作指令MOVIP,#05H或MOV0B8H,#05H(b)用位操作指令SETBPX0SETBPXlCLRPSCLRPT0CLRPTl3.3中断处理过程中断处理过程可分为三个阶段,即中断响应、中断处理和中断返回。由于各计算机系统的中断系统硬件结构不同,中断响应的方式也有所不同。在此说明8051单片机的中断处理过程。以外设提出接收数据请求为例。当CPU执行主程序到第K条指令时,外设向CPU发一信号,告知自己的数据寄存器已“空”,提出接收数据的请求(即中断请求)。CPU接到中断请求信号,在本条指令执行完后中断主程序的执行并保存断点地址,然后转去准备向外设输出数据(即响应中断)。CPU向外设输出数据(中断服务),数据输出完毕,CPU返回到主程序的第K+1条指令处继续执行(即中断返回)。在中断响应时,首先应在堆栈中保护主程序的断点地址(第K+1条指令的地址),以便中断返回时,执行RETI指令能将断点地址从堆栈中弹出到PC,正确返回。由此可见,CPU执行的中断服务程序如同子程序一样,因此又被称作中断服务子程序。但两者的区别在于:子程序是用LCALL(或ACALL)指令来调用的,而中断服务子程序是通过中断请求实现的。所以,在中断服务子程序中也存在保护现场/恢复现场的问题。中断处理的大致流程图如课本图5-10所示。一、中断响应1、中断响应条件CPU响应中断的条件有:①有中断源发出中断请求。②中断总允许位EA=l,即CPU开中断。③申请中断的中断源的中断允许位为l,即中断没有被屏蔽。④无同级或更高级中断正在被服务。⑤当前的指令周期已经结束。⑥若现行指令为RETI或者是访问IE或IP指令时,该指令以及紧接着的另一条指令已执行完。例如,CPU对外部中断的响应,当采用边沿触发方式时,CPU在每个机器周期的S5P2期间采样外部中断输入信号INTX(X=0,1),如果在相邻的两次采样中,第一次采样到的INTX=l,紧接着第二次采样到的INTX=0,则硬件将特殊功能寄存器TCON中的IEX(X=0,1)置l,请求中断。IEX的状态可一直保存下去,直到CPU响应此中第34页断,进入到中断服务程序时,才由硬件自动将IEX清0。由于外部中断每个机器周期被采样一次,因此,输入的高电平或低电平至少必须保持12个振荡周期(一个机器周期),以保证能被采样到。2、中断响应操作过程8051的CPU在每个机器周期的S5P2期间顺序采样每个中断源,CPU在下一个机器周期S6期间按优先级顺序查询中断标志,如查询到某个中断标志为l,将在接下来的机器周期Sl期间按优先级进行中断处理。中断系统通过硬件自动将相应的中断矢量地址装入PC,以便进入相应的中断服务程序。8051单片机的中断系统中有两个不可编程的“优先级生效”触发器。一个是“高优先级生效”触发器,用以指明已进行高级中断服务,并阻止其他一切中断请求;一个是“低优先级生效”触发器,用以指明已进行低优先级中断服务,并阻止除高优先级以外的一切中断请求。8051单片机一旦响应中断,首先置位相应的中断“优先级生效”触发器,然后由硬件执行一条长调用指令LCALL,把当前PC值压入堆栈,以保护断点,再将相应的中断服务程序的入口地址(如外中断0的入口地址为0003H)送入PC,于是CPU接着从中断服务程序的入口处开始执行。对于有些中断源,CPU在响应中断后会自动清除中断标志,如定时器溢出标志TF0,TFl和边沿触发方式下的外部中断标志IE0,IEl;而有些中断标志不会自动清除,只能由用户用软件清除,如串行口接收发送中断标志RI,TI在电平触发方式下的外部中断标志IE0和IEl则是根据引脚INT0和INT1的电平变化的,CPU无法直接干预,需在引脚外加硬件(如D触发器)使其自动撤消外部中断请求。CPU执行中断服务程序之前,自动将程序计数器的内容(断点地址)压入堆栈保护起来(但不保护状态寄存器PSW的内容,也不保护累加器A和其他寄存器的内容),然后将对应的中断矢量装入程序计数器PC,使程序转向该中断矢量地址单元中,以执行中断服务程序。各中断源及与之对应的矢量地址见课本表5—l中断源中断矢量地址外部中断0(INT0)0003H定时器T0中断000BH外部中断1(INTl)0013H定时器Tl中断001BH串行口中断0023H由于MCS—51系列单片机的两个相邻中断源中断服务程序入口地址相距只有8个单元,一般的中断服务程序是容纳不下的,通常是在相应的中断服务程序入口地址中放一条长跳转指令LJMP,这样就可以转到64KB的任何可用区域了。若