1第6章MCS-51单片机的中断系统1226.1MCS-51中断技术概述6.2MCS-51中断系统结构6.2.1中断请求源6.2.2中断请求标志寄存器6.3中断允许与中断优先级的控制6.3.1中断允许寄存器IE6.3.2中断优先级寄存器IP6.4响应中断请求的条件6.5外部中断的响应时间36.6外部中断的触发方式选择6.6.1电平触发方式6.6.2跳沿触发方式6.7中断请求的撤销6.8中断服务子程序的设计6.9多外部中断源系统设计4内容概要介绍片内功能部件中断系统的硬件结构和工作原理。掌握与中断系统有关的特殊功能寄存器以及中断系统的应用特性。应能熟练地进行中断系统的初始化编程以及中断服务子程序的设计。56.1MCS-51中断技术概述中断技术主要用于实时监测与控制,要求单片机能及时地响应中断请求源提出的服务请求,并作出快速响应、及时处理。这是由片内的中断系统来实现的。当中断请求源发出中断请求时,如果中断请求被允许,单片机暂时中止当前正在执行的主程序,转到中断服务处理程序处理中断服务请求。中断服务处理程序处理完中断服务请求后,再回到原来被中止的程序之处(断点),继续执行被中断的主程序。图6-1为整个中断响应和处理过程。566图6-1中断响应和处理过程7如果单片机没有中断系统,单片机的大量时间可能会浪费在查询是否有服务请求发生的定时查询操作上。采用中断技术完全消除了单片机在查询方式中的等待现象,大大地提高了单片机的工作效率和实时性。单片机的中断系统需要解决的问题:⑴当单片微机内部或外部有中断申请时,CPU能及时响应中断,停下正在执行的任务,转去处理中断服务子程序,中断服务处理后能回到原断点处继续处理原先的任务;78⑵当有多个中断源同时申请中断时,应能先响应优先级高的中断源,实现中断优先级的控制;⑶当低优先级中断源正在享用中断服务时,若这时优先级比它高的中断源也申请中断,要求能停下低优先级中断源的服务程序转去执行更高优先级中断源的服务程序,实现中断嵌套,并能逐级正确返回原断点处。96.2MCS-51中断系统结构中断系统结构图如图6-2所示。中断系统有5个中断请求源(简称中断源),两个中断优先级,可实现两级中断服务程序嵌套。每一中断源可用软件独立控制为允许中断或关中断状态,中断优先级均可用软件来设置。9106.2.1中断请求源由图6-2可见,MCS-51中断系统共有5个中断请求源:(1)——外部中断请求0,中断请求信号由引脚输入,中断请求标志为IE0。(2)——外部中断请求1,中断请求信号由引脚输入,中断请求标志为IE1。(3)定时器/计数器T0计数溢出发出的中断请求,中断请求标志为TF0。(4)定时器/计数器T1计数溢出发出的中断请求,中断请求标志为TF1。(5)串行口中断请求,中断请求标志为发送中断TI或接收中断RI。100INT1INT0INT1INT1111图6-2MCS-51的中断系统结构示意图126.2.2中断请求标志寄存器5个中断请求源的中断请求标志分别由TCON和SCON的相应位锁存。1.TCON寄存器为定时器/计数器的控制寄存器,字节地址为88H,可位寻址。特殊功能寄存器TCON的格式如图6-3所示。12图6-3特殊功能寄存器TCON的格式13TCON各标志位功能如下:(1)TF1—定时器/计数器T1的溢出中断请求标志位。当T1计数产生溢出时,由硬件使TF1置“1”,向CPU申请中断。CPU响应TF1中断时,TF1标志由硬件自动清“0”,TF1也可由软件清“0”。(2)TF0—定时器/计数器T0的溢出中断请求标志位,功能与TF1类似。(3)IE1—外部中断请求1的中断请求标志位。(4)IE0—外部中断请求0中断请求标志位,功能与IE1类似。(5)IT1—选择外部中断请求1为跳沿触发还是电平触发。1314IT1=0,电平触发方式,引脚上低电平有效,并把IE1置“1”。转向中断服务程序时,由硬件自动把IE1清“0”。IT1=1,跳沿触发方式,加到引脚上的外部中断请求输入信号电平从高到低的负跳变有效,并把IE1置“1”。转向中断服务程序时,由硬件自动把IE1清“0”。(6)IT0—选择外部中断请求0为跳沿触发方式还是电平触发方式,其意义与IT1类似。MCS-51复位后,TCON被清“0”,5个中断源的中断请求标志均为0。TR1(D6位)、TR0(D4位)这2位与中断系统无关,将在第6章定时器/计数器中介绍。14152.SCON寄存器串行口控制寄存器,字节地址为98H,可位寻址。低二位锁存串行口的发送中断和接收中断的中断请求标志TI和RI,格式如图6-4所示。图6-4SCON中的中断请求标志位各标志位的功能:(1)TI—串行口的发送中断请求标志位。每发送完一帧串行数据后,TI自动置“1”。TI标志必须由软件清“0”。1516(2)RI—串行口接收中断请求标志位。串行口接收完一个串行数据帧,硬件自动使RI中断请求标志置“1”。必须在中断服务程序中用指令对RI清“0”。6.3中断允许与中断优先级的控制中断允许控制由中断允许寄存器IE控制。中断优先级控制由中断优先级寄存器IP控制。6.3.1中断允许寄存器IEMCS-51的对各中断源的开放或屏蔽,是由中断允许寄存器IE控制的。IE字节地址为A8H,可位寻址,格式如图6-5所示。1617图6-5中断允许寄存器IE的格式IE对中断的开放和关闭实现两级控制。有一个总的开关中断控制位EA(IE.7位),EA=0时,所有的中断请求被屏蔽;EA=1时,开放中断,但5个中断源的中断请求是否允许,还要由IE中的低5位所对应的5个中断请求允许控制位的状态来决定(图6-5)。1718IE中各位功能如下:(1)EA—中断允许总开关控制位。EA=0,所有的中断请求被屏蔽。EA=1,所有的中断请求被开放。(2)ES——串行口中断允许位。ES=0,禁止串行口中断。ES=1,允许串行口中断。(3)ET1——定时器/计数器T1的溢出中断允许位。ET1=0,禁止T1溢出中断。ET1=1,允许T1溢出中断。(4)EX1——外部中断1中断允许位。1819EX1=0,禁止外部中断1中断。EX1=1,允许外部中断1中断。(5)ET0——定时器/计数器T0的溢出中断允许位。ET0=0,禁止T0溢出中断。ET0=1,允许T0溢出中断。(6)EX0——外部中断0中断允许位。EX0=0,禁止外部中断0中断。EX0=1,允许外部中断0中断。20MCS-51复位以后,IE被清“0”,所有中断请求被禁止。IE中与各个中断源相应的位可用指令置“1”或清“0”。若使某一个中断源被允许中断,除了IE相应的位被置“1”外,还必须使EA位置“1”。改变IE的内容,可由位操作指令来实现(即SETBbit;CLRbit),也可用字节操作指令实现。2021【例6-1】若允许片内2个定时器/计数器中断,并禁止其他中断源的中断请求,请编写设置IE的相应程序段。(1)用位操作指令CLRES;禁止串行口中断CLREX0;禁止外部中断0中断CLREX1;禁止外部中断1中断SETBET0;允许定时器/计数器T0中断SETBET1;允许定时器/计数器T1中断SETBEA;总中断开关位开放(2)用字节操作指令MOVIE,#8AH上述两段程序对IE的设置是相同的。21226.3.2中断优先级寄存器IPMCS-51的中断请求源有两个中断优先级,由软件分别设置为高优先级中断或低优先级中断,可实现:两级中断嵌套MCS-51正在执行低优先级中断的服务程序时,可被高优先级中断请求所中断,待高优先级中断处理完毕后,再返回低优先级中断服务程序。两级中断嵌套的过程如图6-6所示。222323图6-6两级中断嵌套的过程24各中断源的中断优先级关系,可归纳为两条基本规则:(1)低优先级可被高优先级中断,高优先级不能低优先级中断。如果某一中断源被设置为高优先级中断,则不能被任何其他的中断源的中断请求所中断。(2)任何一种中断一旦得到响应,不会再被它的同级中断源所中断。中断优先级寄存器IP,其字节地址为B8H,可位寻址。只要用程序改变其内容,可进行各中断源中断优先级的设置,IP寄存器的格式如图6-7所示。24256-7IP寄存器的格式中断优先级寄存器IP各位的含义如下:(1)PS—串行口中断优先级控制位1:高优先级0:低优先级(2)PT1—定时器T1中断优先级控制位1:高优先级0:低优先级2526(3)PX1—外部中断1中断优先级控制位1:高优先级0:低优先级(4)PT0—定时器T0中断优先级控制位1:高优先级0:低优先级(5)PX0—外部中断0中断优先级控制位1:高优先级0:低优先级中断优先级控制寄存器IP用位操作指令或字节操作指令可更新IP的内容,以改变中断优先级。MCS-51复位以后,IP的内容为0,各个中断源均为低优先级中断。2627MCS-51的中断系统有两个不可寻址的“优先级激活触发器”。一个指示某高优先级的中断正在执行,所有后来的中断均被阻止;另一个触发器指示某低优先级的中断正在执行,所有同级的中断都被阻止,但不阻断高优先级的中断请求。在同时收到几个同优先级的中断请求时,哪一个中断请求能优先得到响应,取决于内部的查询顺序。这相当于在同一个优先级内,还同时存在另一个辅助优先级结构,其查询顺序见表6-1。2728表6-1同级中断的查询次序由此可见,各中断源在同一个优先级的条件下,外部中断0的中断优先权最高,串行口中断优先权最低。2829【例6-2】IP寄存器初始化,MCS-51的两个外中断请求为高优先级,其他中断请求为低优先级。(1)用位操作指令SETBPX0;外中断0设置为高优先级SETBPX1;外中断1设置为高优先级CLRPS;串行口设置为低优先级CLRPT0;定时器/计数器T0为低优先级CLRPT1;定时器/计数器T1为低优先级(2)用字节操作指令MOVIP,#05H29301)T0、串行口关中断,其余开中断;2)全部禁中断;3)T0、串行口开中断,其余保持不变;4)全部开中断;MOVIE,#10001101BMOVIE,#00H或CLREA或MOVIE,#80HORLIE,#10010010BMOVIE,#0FFH或MOVIE,#9FH31例:下列中断优先顺序排列,有可能实现的有()。A.T1、T0、INT0、INT1、串行口B.INT0、T1、T0、INT1、串行口C.INT0、INT1、串行口、T1、T0D.INT1、串行口、T0、INT0、T1326.4响应中断请求的条件中断请求被响应,必须满足以下必要条件:(1)总中断允许开关接通,即IE寄存器中的中断总允许位EA=1。(2)该中断源发出中断请求,即对应的中断请求标志为“1”。(3)该中断源的中断允许位EA=1,即该中断被允许。(4)无同级或更高级中断正在被服务。当CPU查询到有效的中断请求时,在满足上述条件时,紧接着就进行中断响应。3233图6–4中断响应过程的时序34中断响应的过程:首先由硬件自动生成一条长调用指令“LCALLaddr16”。就是程序存储区中相应的中断入口地址。例如,对于外部中断1的响应,硬件自动生成的长调用指令为LCALL0013H首先将程序计数器PC的内容压入堆栈以保护断点,再将中断入口地址装入PC,使程序转向响应中断请求的中断入口地址。各中断源服务程序的入口地址,如表6-2所示。3435表6-2中断入口地址表两个中断入口间只相隔8字节,难以安放一个完整的中断服务程序。因此,通常在中断入口地址处放置一条无条件转移指令,使程序执行转向中断服务程序入口。3536中断的执行过程与调用子程序相似点:⑴都是中断当前正在执行的程序,转去执行子程序或中断服务程序。⑵都是由硬件自动地把断点地址压入堆栈,然后通过软件完成现场保护。⑶执行完子程序或中断服务程序后,都要通过软件完成现场恢复,并通过执行返回指令,重新返回到断点处,继续往下执行程序。⑷二者都可以实现嵌套,如中断嵌套和子程序嵌套。37中断的执行与调用子程序差别:⑴中断请求信号可以由外部设备发出,是随机的,比如故障产生的中断请求;子程序