单片机第五章单片机中断系统.ppt
单片机系统中,CPU和外部设备之间不断进行信息的传输。通常CPU和外设之间的信息传送方式有以下几种:程序控制方式中断方式直接存储器存取(DMA)方式,第5章 MCS-51单片机中断系统,5.1.1中断的概念,1、程序控制方式 可以分为以下两种方式。(1)无条件传送方式 外设始终处于就绪状态,CPU不必查询外设的状态,直接进行信息传输,称为无条件传送方式。此种信息传送方式只适用于简单的外设。如开 关和数码段显示器等。,(2)条件传送方式 CPU通过执行程序不断读取并测试外部设备状态,如果输入设备处于准备好状态或输出设备为空闲状态时,则CPU执行传送信息操作。由于条件传送方式需要CPU不断地查询外部设备的状态,然后才进行信息传送,所以也称为“查询式传送”。,2、中断方式 外部设备与CPU之间以中断信号作为数据交换的控制信号。当外部设备需要与CPU进行数据交换时,由接口部件向CPU发出一个请求信号,CPU响应这一中断请求后,在中断服务程序中完成一个字节或多个字节的信息交换。中断方式具有并行工作、实时传输、充分利用CPU效率等特点。,3、DMA方式(直接存储器存取)DMA控制方式主要用于存储器和外设之间直接传送、块传输。DMA请求总线:当某一外部设备需要输入/输出一批数据时,向DMA控制器发出请求,DMA控制器接收到这一请求后,向CPU发出总线请求信号。,DMA控制数据传输:CPU响应DMA的请求,把总线使用权交给DMA控制器,DMA将外设数据读入、并直接写入存储器,或将数据从存储器读出并直接送给外设。传送过程不需要CPU参与。DMA释放总线:当一批数据传送后,DMA控制器再向CPU发出“结束总线请求”,CPU响应请求,收回总线使用权。DMA方式速度高、效率高,可以与CPU并行工作。,CPU执行程序时,由于发生了某种随机的事件(外部或内部),引起CPU暂时中断正在运行的程序,转去执行一段特殊的服务程序(称为中断服务程序或中断处理程序),以处理该事件,该事件处理完后又返回被中断的程序继续执行,这一过程称为中断。,中断的定义,2、中断源 引起CPU中断的设备和事件就是中断源。3、中断请求 中断源向CPU发出的请求处理信号,即中断请求或中断申请。4、中断响应 CPU暂时中止正在处理的事情,转去处理突发事件的过程,称为中断响应。,5、其他概念 中断系统:实现中断功能的部件称为,又称中断机构。中断服务程序:CPU响应中断后,处理中断事件的程序。断点:CPU响应中断请求,转去执行中断服务程序时的PC值,即为断点地址。中断返回:CPU执行完中断服务程序后回到断点的过程。,中断系统功能,中断系统是指能够实现中断功能的那部分硬件电路和软件部分。,实现中断请求实现排队判优(中断优先级排队)实现中断响应实现中断服务程序的转接实现中断返回实现多重中断,中断源类型,引起CPU中断的事件,发出中断请求的来源。,1、外部设备中断源2、控制对象中断源3、故障中断源4、定时脉冲中断源,中断分类,中断按照功能通常可以分成:可屏蔽、非屏蔽和软件中断三类,1、可屏蔽中断 程控“开中断/关中断”。软件设置允许/禁止CPU响应中断。,2、非屏蔽中断 指CPU对来自/NMI中断输入线上的中断请求是不可屏蔽(或控制)的。,3软件中断 指人们可以通过相应的中断指令使CPU响应中断。CPU只要执行这种指令就可以转入相应的中断服务程序执行,以完成相应的中断功能。,中断分类,中断嵌套,低级中断请求,RETI,主程序,响应低级中断,高级中断服务子程序,返主程序,继续执行主程序,高级中断请求,响应高级中断,返低级中断,RETI,低级中断服务子程序,低级中断服务子程序,挂起低级中断,挂起低级中断,低级中断,低级中断,5.1.2 中断系统的结构,专门讨论MCS-51的中断源和中断标志、MCS-51对中队请求的控制和响应、中断响应时间、中分段撤除和中断系统初始化。,源允许,中断系统总体逻辑结构,总允许,优先级,中断标志,中断标志,1,IE0,矢量地址送PC,“+1”,TF1,0,矢量地址送PC,EA,“+1”,“+1”,EX0,ET1,1,中断源与中断请求标志,5个中断源2个优先级,2个外部中断,3个内部中断,T0,T1,UART,与中断有关的特殊功能寄存器:,IP:中断优先控制寄存器,IE:中断允许控制寄存器,TCON:定时/计数控制寄存器,SCON:UART控制寄存器,中断标志寄存器,可编程,可控,MCS 51中断要点,MCS 51中断要点,定时/计数器控制寄存器TCON,TCON(88H),触发方式控制位,0 低电平触发,1 边沿触发,外部中断请求标志,1 有有效触发时,0 当CPU响应中断时,T1 T0,溢出标志,1 计数器“+1”有溢出时,并向CPU请求中断,0 当CPU响应中断时,也可由指令清除,TR1 TR0,由硬件自动,由硬件自动,TR1 TR0,由硬件自动,由硬件自动,在每个机器周期 S5P2都采样引脚 P3.3 P3.2,引脚,0,0,记录有无中断,记录有无中断,串行口控制寄存器 SCON,TI:串行口发送中断标志,在方式0,串行发送到第8位结束时,由硬件置“1”;或在其他方式中,串行发送到停止位的开始时,由硬件置“1”,,RI:串行口接收中断标志,在方式0,串行接收到第8位结束时,由硬件置“1”;或在其他方式中,串行接收到停止位的开始时,由硬件置“1”,,“1”发送完一帧数据后,“1”接收完一帧数据后,必须由软件清“0”必须由软件清“0”,SCON(98H),5.2 MCS-51的中断控制,1、中断允许寄存器 IE,0 禁止,1 允许,0 禁止,1 允许,总 中断,总 中断,中断,中断,IE(A8),中断的开放和禁止是可控,可编程的,ET2,CPU,IE 的相应位被置“0”或“1”该相应中断即被“禁止”或“开放”,例1 假设允许INT0、INT1、T0、T1中断,试设置IE的值。解:(1)用C语言字节操作:IE=0 x8f;(2)用C语言位操作指令 EX0=1;/允许外部中断0中断 ET0=1;/允许定时/计数器0中断 EX1=1;/允许外部中断1中断 ET1=1;/允许定时/计数器1中断 EA=1/开总中断控制 汇编语言(1)用字节操作指令:MOV IE,#8FH(2)用位操作指令:SETB EX0;允许外部中断0中断 SETB ET0;允许定时/计数器0中断 SETB EX1;允许外部中断1中断 SETB ET1;允许定时/计数器1中断 SETB EA;开总中断控制位,2、中断优先级寄存器 IP,IP(B8),ET2,0 低级,1 高级,中断,中断,中断优先级是可控,可编程的,3、优先级结构,中断优先级控制遵循的两个基本原则:,一个正在执行的低级中断服务程序,能被高优先级 中断请求所中断,但不能被同优先级中断请求所中断。,一个正在执行的高级中断服务程序,不能被任何中断 请求所中断,直到返回。,实现这两个原则的方法:,中断系统内部设置了两个不可寻址的优先级状态触发器。一个指出正在处理的是:高优先级中断,并阻止所有其他中断;另一个指出正在处理的是:低优先级中断,并阻止了除高优先级中断外的其他任何中断。,是不可寻址的,当CPU响应高级中断,并进入中断服务时,“1”,“1”,RETI,“0”,当CPU响应低级中断,并进入中断服务时,“1”,RETI,“0”,在同级的几个中断源中同时发生请求时,内部对同级的各中断源的优先级别有一个规定的查询顺序:,定时/计数器 T0,定时/计数器 T1,串行口 UART,定时/计数器 T2,最高,最低,自然优先级,自然优先级,例2 设定时器和串行口中断为高优先级,两个外部中断为低优先级,试设置IP的值。解:C语言程序IP=0 x3a;汇编语言程序:(1)使用字节操作指令:MOV IP,#3AH(2)使用位操作指令:CLRPX0;设置外部中断0为低级中断,CLRPX1;置外部中断1为低级中断SETBPT0;置定时器/计数器0为高级中断SETBPT1;置定时器/计数器0为高级中断SETBPS;置串行口中断为高优先级SETBPT2;置定时器/计数器2为高级中断,5.3 中断处理,一、中断响应条件(1)中断源有中断请求;(2)中断总允许位EA=1;(3)发出中断请求的中断源的中断允许控制位为1。在满足以上条件的基础上,若有下列任何一种情况存在,硬件生成的长调用指令“LCALL”将被封锁。,(1)CPU正在执行一个同级或高优先级的中断服务程序;(2)正在执行的指令尚未执行完;(3)正在执行中断返回指令RETI或者对寄存器IE、IP进行读/写的指令。CPU在执行完上述指令之后,要再执行一条指令,才能响应中断请求。,二、中断响应过程 从中断请求发生直到被响应,准备去执行中断服务程序,此过程即中断响应过程。中断响应过程一般包括如下几个阶段:1、中断采样并置位 中断采样过程:CPU在每个机器周期S5P2期间顺序对中断源采样、置中断标志。2、查询标志 在中断采样后的下一个周期的S6按优先级顺序查询中断标志。,3、响应中断 在满足中断响应条件情况下,若中断标志为1,在接下来周期S1开始按优先级顺序进行中断处理。中断响应过程的操作步骤:硬件自动生成长调用指令LCALL addr16,addr16为各中断源的中断程序入口地址。PC的内容(即断点地址)压入堆栈。先低位地址,后高位地址,并修改堆栈指针SP。将中断源的中断入口地址装入程序计数器PC,执行中断服务程序。,三、中断响应的时间 一般来说,中断的响应时间最短为3个机器周期,最长为8个机器周期。一般中断请求标志位查询占1个机器周期。而机器周期又恰好是指令的最后一个机器周期。执行此指令后,CPU将响应中断,产生硬件长调用指令。长调用LCALL指令需要2个机器周期。这样,中断响应时间为3个机器周期。,外部中断响应时序与触发方式,1、外部中断响应时序,M1,M3,M4,M5,M2,S5P1,S5P2,CPU进行中断查询,保护断点,长调用至入口,中断服务,1、中断响应顺利,不受阻,需要3个机器周期,2、如果中断受阻,,即满足上述三个条件,正在处理同级或高级中断,这要视中断服务程序的长短,执行的指令不是最后一个机器周期,等待不超过3个周期,正在执行指令是RETI,或正访问IE、IP,则需返回主程 序后,再执行一条主程序的指令才能响应该中断,等待不 超过5个周期,则需要38个机器周期,外部中断触发方式,电平触发方式,边沿触发方式,若外部中断(当ITX=0时)被定义为电平触发方式其有效触发为低电平,该低电平维持到CPU响应该中断为止,中断返回之前,必须为高电平。否则CPU将再次响应该中断。,若外部中断(当ITX=1时)被定义为边沿触发方式其有效触发为下降沿。在该触发方式中,CPU在一个机器周期采样为高电平,在下一机器周期采样为低电平,就立即置位外部中断请求标志。,无论是那种触发发方式,只要有有效触发,都会记录在相应的中断标志位中,若CPU即使暂不响应,中断标志也不会丢失,直到CPU响应该中断,该标志才会清除。,有效触发,标志位,记录,5.4 中断应用举例,一、中断程序安排1、主程序 MCS-51单片机复位后,(PC)=0000H,主程序只分配0000H-0002H共3个单元。经常在0000H单元设置一条LJMP指令,转向主程序的入口处。而真正的主程序一般安排在中断区域之后。2、各中断服务程序 每个中断服务程序在固定的位置由系统分配相邻的8个单元用于存储程序。,程序组织的一般结构:ORG0000HLJMPMAIN ORG0003HLJMPINT_0ORG 0030HMAIN:.;主程序区.;进行初始化SJMP$;等待中断INT_0:.;外部中断0服务子程序.RETI,二、中断初始化步骤 89C52单片机中,共有6个中断源,中断的初始化主要是对由5个特殊功能寄存器TCON、T2CON、SCON、IE和IP的设置。中断初始化部分一般放在主程序中。,中断系统初始化步骤:1、开相应中断源的中断2、设定所有中断源的中断优先级3、若为外部中断,则应规定低电平还是 负边沿的中断方式,三、中断服务程序流程设计 MCS-51结束到中断请求后,在条件满足的情况下,响应中断并转到对应的中断服务程序入口处执行。中断程序主要由如下所示几部分组成:1、保护现场 中断响应后,系统已自动将断点进行保护。保护现场,主要针对中断程序中的寄存器和存储单元。其位置在中断服务程序前段。,2、关中断和开中断 89C52允许中断嵌套。为了在保护现场或恢复现场时,由于CPU响应其它中断请求,而使现场破坏,一般在保护和恢复现场时,CPU不响应外界的中断请求,即关中断。在保护现场和恢复现场前,关中断;在保护现场和恢复现场后,再根据需要使CPU开中断。,3、中断请求撤除 CPU响应某中断请求后,在中断返回前,应该撤消该中断请求。中断请求撤除方法如下:定时器0、1溢出中断请求的撤除:允许中断的情况下,响应中断后,硬件会自动清除中断请求标志TFx。定时器/计数器2请求的撤除:T2中断请求标志位TF2和EXF2不能自动复位,须软件复位。串行口中断的撤除:串行口中断请求标志位TI和RI,必须软件复位。,外部中断的撤除:外部中断为边沿触发方式时,响应中断后,硬件自动清除IE0或IE1。外部中断为电平触发方式时。响应中断后,硬件会自动清除IE0或IE1。但由于加到或引脚的外部中断请求信号并未撤除,中断请求标志IE0或IE1会再次被置1,所以在CPU响应中断后应立即撤除或引脚上的低电平。一般采用加一个D触发器和几条指令的方法来解决这个问题。,4、中断源的识别 串行口中断:接收请求标志RI和发送中断请求标志位TI共用中断入口地址(0023H),中断允许位ES和中断优先级选择位PS。定时器/计数器2:中断请求标志TF2和EXF2,共用一个中断矢量地址(002BH),中断允许位ET2和中断优先级选择位PT2。在中断服务程序中注意区分是哪种中断引起的中断请求,并清除其中断请求标志。,5、恢复现场 在结束中断服务程序,返回断点处前要恢复现场。6、中断返回 当CPU执行到RETI指令时,将当前栈顶内容弹出到PC,恢复断点。注意:中断服务程序的最后一条指令,必须为RETI返回指令,不能为RET指令。,例3 如图所示,将P1口的P1.4P1.7作为输入位,P1.0P1.3作为输出位。要求利用89C52将开关所设的数据读入单片机内,并依次通过P1.0P1.3输出,驱动发光二极管,以检查P1.4P1.7输入的电平情况(若输入为高电平则相应的LED亮)。要求采用中断边沿触发方式,中断一次,完成一次读/写操作。,分析:用外部中断0,中断请求从P3.2输入,并采用去抖动电路。当P1.0P1.3的某一位输出为0时,相应的发光二极管就会发光。当开关S1来回拨动一次时,将产生一个下降沿信号,发出中断请求。中断服务程序的入口地址为0003H。,C语言程序:#includevoid main()EX0=1;/允许外部中断0中断 IT0=1;/选边沿触发方式 EA=1;/CPU开中断while(1);/等待中断void int0_int(void)interrupt 0 unsignedchardatad;P1=0 xf0;/设P1.4P1.7为输入 d=P1;/取开关数 P1=(d4);/驱动LED发光,汇编程序:ORG0000HSJMPMAIN;上电,转向主程序ORG0003H;外部中断0入口地址SJMPINSER;转向中断服务程序ORG0030H;主程序MAIN:MOV A,#ODFH SETBEX0;允许外部中断0中断SETBIT0;选择边沿触发方式SETBEA;CPU开中断,HERE:SJMPHERE;等待中断 ORG 0200HINSER:MOV A,#0F0H;中断服务程序 MOV P1,#0F0H;设P1.4P1.7为输入 MOV A,P1;取开关数据 SWAP A;A的高、低四位互换 CPL MOV P1,A;输出驱动LED发光 RETI;中断返回 END,MCS-51采用8259扩展外部中断源,/INT0,/RD,/WR,/INTA,P1.7P0.0,8031,