第五章89C51单片机的内部资源5.189C51的中断系统5.289C51的定时/计数器5.389C51的串行通信实训五音乐演奏器实训六:双机通信本章小结5.189C51的中断系统5.1.1中断的基本概念在计算机执行程序的过程中,当出现某种情况,由服务对象向CPU发出请求当前程序中断的信号,要求CPU暂时停止当前程序的执行,而转去执行相应的处理程序,待处理程序执行完毕后,再返回继续执行原来被中断的程序。这样的过程称为中断过程。把引起中断的原因或触发中断请求的来源称为中断源。为实现中断而设置的各种硬件和软件称为中断系统。在单片机控制系统中采用中断技术,具有以下优点:下一页返回5.189C51的中断系统1.实行分时操作,提高了CPU的效率。当服务对象向CPU发出中断请求时,才使CPU转向为该对象服务,否则不会影响CPU的正常工作。这样,利用中断可以使CPU同时为多个对象服务,从而大大提高了整个单片机系统的工作效率。2.实现实时处理,及时处理实时信息。在工业现场控制中,常常要求单片机系统对信号进行实时处理。利用中断技术,各服务对象可以根据需要随时向CPU发出中断请求,CPU及时检测并处理各对象的控制要求,以实现实时控制。3.对难以预料的情况或故障进行及时处理。在单片机系统工作过程中,有时会出现一些难以预料的情况或故障,如电源掉电、运算溢出、传输错误等,此时可利用中断进行相应的处理而不必停机。上一页下一页返回5.189C51的中断系统中断的处理过程主要包括中断请求、中断响应、中断服务、中断返回四个阶段,如图5-1所示。首先由中断源发出中断请求信号,CPU在运行主程序的同时,不断地检测是否有中断请求产生,在检测到有中断请求信号后,决定是否响应中断。当CPU满足条件响应中断后,进入中断服务程序,为申请中断的对象服务。当服务对象的任务完成后,CPU重新返回到原来的程序中继续工作。这就是中断处理的全过程。由于中断请求发生的时候是随机的,因此在响应中断后,必须保存主程序断开点的地址(即当前的PC值),以保证在中断服务任务结束后能重新回到主程序的断开点。保存主程序上一页下一页返回5.189C51的中断系统断开点PC值的操作称为保护断点,重新恢复主程序断开点地址的操作称为恢复断点。保护断点和恢复断点的操作是由中断系统在中断响应和中断返回过程中利用堆栈区自动完成的。由中断的处理过程可以看出,中断过程与子程序的操作很相似。只不过子程序操作是由调用指令产生的,而中断操作是由中断请求信号引发的。89C51单片机的中断系统结构如图5-2所示。它是由中断源(、、T0、T1、RXD/TXD)及中断标志位(位于TCON、SCON中)、中断允许控制寄存器IE和中断优先级控制寄存器IP及中断入口地址组成,可对每个中断源实现两级允许控制及两级优先级控制。0INT1INT上一页下一页返回5.189C51的中断系统5.1.2中断源与中断请求标志1.中断源与中断入口89C51单片机有五个中断源:两个外部中断源、,两个内部定时/计数器溢出中断T0、T1,一个内部串行口中断RXD/TXD。外部中断源、由89C51单片机的外围引脚P3.2、P3.3引入中断请求信号,当P3.2、P3.3输入低电平或下降沿信号,即向CPU发出中断请求。当两个内部定时/计数器出现定时时间到或计数值满时,向CPU发出中断请求。串行口在工作过程中,每完成一次数据发送或接收时,就会向CPU请求中断,串行口的发送和接收中断是共用的,只占一个中断源。0INT1INT0INT1INT上一页下一页返回5.189C51的中断系统2.中断请求标志在中断请求信号发出后,必须在相应的存储单元中设定标志,以便CPU及时查询并做出响应。与中断请求标志相关的寄存器有TCON和SCON两个特殊功能寄存器,其中对应于各中断源的标志位见表5-1所示。(1)TCON中的中断标志特殊功能寄存器TCON既是用于定时/计数器控制的寄存器,也是用于中断标志及中断控制的寄存器,其中分布了与外部中断及定时/计数器相关的中断请求标志位。格式如下:8FH8EH8DH8CH8BH8AH89H88HTCON(88H)TF1TR1TF0TR0IE1IT1IE0IT0上一页下一页返回5.189C51的中断系统TF1和TF0:分别为定时/计数器T1和定时/计数器T0的溢出中断标志。当定时/计数器计数值满产生溢出时,由硬件自动置1,并向CPU申请中断。该标志位一直保持到CPU响应中断后,由硬件自动清0。这两位也可作为程序查询的标志位,在查询方式下该标志位应由软件清0。IE1和IE0:为外部中断1和外部中断0的中断请求标志位。当外部中断源发出中断请求时,由硬件自动置1,并向CPU申请中断。该标志位一直保持到CPU响应中断后,由硬件自动清0。IT1和IT0:为外部中断1和外部中断0的触发方式控制位。当ITi设为0时,为低电平触发;当ITi设为1时,为下降沿触发方式。上一页下一页返回5.189C51的中断系统如果选择外部中断源为低电平触发方式,则CPU会在每个机器周期内采样P3.2/P3.3引脚,若有低电平信号,则认为有中断请求,若为高电平,则认为无中断请求或中断请求已撤消。因此采用低电平触发方式,外部引脚上的中断请求信号必须保持低电平直到CPU响应此中断请求为止。但在中断返回前必须撤销引脚上的低电平信号,否则将再次响应中断造成程序运行出错。如果选择为下降沿触发方式,则CPU在连续两个机器周期采样到先高后低的电平信号后,将外部中断请求标志IEi置1。因此,外部中断请求信号的高低电平持续时间必须各保持一个机器周期(即12个时钟周期)以上。上一页下一页返回5.189C51的中断系统TR1和TR0:为定时/计数器T1和定时/计数器T0的启动/停止控制位。与中断无关,使用方法请参阅5.2节。TCON中的各位均可通过位寻址进行操作。(2)SCON中的中断标志特殊功能寄存器SCON是用于串行口控制的寄存器。其中最低两位为串行口的中断请求标志位。格式如下:9FH9EH9DH9CH9BH9AH99H98HSCON(98H)SM0SM1SM2RENTB8RB8TIRI上一页下一页返回5.189C51的中断系统TI和RI:为串行口发送/接收中断标志位。当89C51单片机的串行口发送/接收完一帧数据后,由硬件自动将TI/RI置1,向CPU请求中断。当CPU响应串行口中断后,不能由硬件自动清除中断标志,必须在中断服务程序中用“CLRTI”或“CLRRI”对中断标志清零。SCON中的其它位均与串行口的控制相关,使用方法请参阅5.3节。5.1.3中断控制对89C51单片机的中断控制包括中断允许控制和中断优先级控制两个方面,分别由可位寻址的特殊功能寄存器IE和IP实现。它们的功能及控制方法分述如下:上一页下一页返回5.189C51的中断系统1.中断允许控制寄存器IE中断允许控制寄存器IE用于对构成中断的双方进行两级控制,即控制是否允许中断源中断及是否允许CPU响应中断。其格式如下:EA:CPU中断开放标志位。当EA=0时,CPU禁止响应所有中断源的中断请求;当EA=1时,CPU允许开放中断,此时每个中断源是否开放由各中断控制位决定。所以只有当EA=1时,各中断控制位才有意义,因此EA又称为“中断总允许控制位”。AFHAEHADHACHABHAAHA9HA8HIE(A8H)EA−−ESET1EX1ET0EX0上一页下一页返回5.189C51的中断系统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()引脚上引入一个外部中断,采用下降沿触发方式,禁止其他中断,试设置相关的控制寄存器值。上一页下一页返回5.189C51的中断系统分析:采用下降沿触发方式只需将TCON中的IT0置1;要允许外部中断0中断,可将IE中的EA和EX0置1。程序如下:2.中断的优先级控制寄存器IP89C51单片机可以设置两个优先级——高优先级和低优先级。每个中断源优先级的设定由IP的各控制位决定。IP的格式如下:用字节操作指令用位操作指令MOVTCON,#01HMOVIE,#81HSETBIT0SETBEASETBEX0上一页下一页返回5.189C51的中断系统PS:串行口优先级控制位。PS=1时,串行口为高优先级;否则为低优先级。PT1:定时/计数器T1优先级控制位。PT1=1时,T1高优先级;否则为低优先级。PX1:外部中断1优先级控制位。PX1=1时,外部中断1高优先级;否则为低优先级。PT0:定时/计数器T0优先级控制位。PT0=1时,T0高优先级;否则为低优先级。BFHBEHBDHBCHBBHBAHB9HB8HIP(B8H)−−−PSPT1PX1PT0PX0上一页下一页返回5.189C51的中断系统PX0:外部中断0优先级控制位。PX0=1时,外部中断0高优先级;否则为低优先级。在89C51单片机中对中断的控制遵循以下原则:(1)若CPU同时接收几个不同优先级的中断请求时,先响应高优先级中断,后响应低优先级中断;(2)当高优先级的中断正在响应时,不能被任何其它中断打断;(3)当低优先级的中断正在响应时,可以被高优先级的中断所打断,但不能被与它同级的其它中断所打断。当CPU响应低优先级中断时被打断,而转去响应高优先级中断的现象称为中断嵌套;上一页下一页返回5.189C51的中断系统(4)当几个同级的中断源同时发出中断请求时,CPU将通过内部硬件电路按自然优先级顺序依次响应。其优先级顺序如表5-1所示依次为:外部中断0→定时/计数器T0→外部中断1→定时/计数器T1→串行口(从高到低)例如:某单片机应用系统将定时/计数器T0和串行口设置为高优先级的中断,试分析中断系统中各中断源的中断优先级顺序(由高到低)。分析:定时/计数器T0和串行口同属于高优先级中断,它们又是同级的,因此这两个中断源的优先级顺序为T0→串行口。外部中断0、外部中断1和定时/计数器T1同属于低优先级上一页下一页返回5.189C51的中断系统中断,它们又是同级的,因此这三个中断源的优先级顺序为外部中断0→外部中断1→T1。因此可得出各中断优先级顺序由高到低依次为:T0→串行口→外部中断0→外部中断1→T1。5.1.4中断的响应过程1.中断响应条件:①有中断源发出中断请求。②中断总允许位EA=1,即CPU开放中断;且申请中断的中断源对应的中断允许位为1,即没有被屏蔽。③没有更高级或同级的中断正在处理中。上一页下一页返回5.189C51的中断系统④执行完当前指令。若当前指令为返回指令RET、RETI或访问IE、IP的指令,CPU必须在执行完当前指令后,再继续执行一条指令,然后才响应中断。2.中断响应的过程如果中断响应条件满足,则CPU将响应中断。在此情况下,CPU首先使被响应中断的相应“优先激活”触发器置位,以阻断同级或低级中断。然后,根据中断源的类别,在硬件的控制下自动形成长调用指令(LCALL),此指令的作用将断点压入堆栈,然后将对应中断源的入口地址(又称中断矢量地址)装入程序计数器PC,使程序转向该中断的入口地址继续执行,中断服务程序即从此开始执行。单片机中各中断源的入口地址如表5-1所示。中断响应的过程见图5-3所示。上一页下一页返回5.189C51的中断系统3.中断处理CPU响应中断结束后即转至中断服务程序入口。从中断服务程序的第一条指令开始到返回指令为止,这个过程称为中断处理或称为中断服务。不同的中断源