第5章-中断系统-单片机原理及接口技术(C51编程)ppt课件

上传人:494895****12427 文档编号:241510929 上传时间:2024-06-30 格式:PPT 页数:60 大小:823.51KB
返回 下载 相关 举报
第5章-中断系统-单片机原理及接口技术(C51编程)ppt课件_第1页
第1页 / 共60页
第5章-中断系统-单片机原理及接口技术(C51编程)ppt课件_第2页
第2页 / 共60页
第5章-中断系统-单片机原理及接口技术(C51编程)ppt课件_第3页
第3页 / 共60页
点击查看更多>>
资源描述
第5章 中断系统 1第5章 中断系统 11内容概要内容概要本章介绍本章介绍AT89S51片内中断系统的硬件结构和工作原理。片内中断系统的硬件结构和工作原理。中中断断系系统统能能够够实实时时地地响响应应片片内内功功能能部部件件和和外外围围设设备备发发出出的的中中断断请请求求并并及及时时进进入入中中断断服服务务子子程程序序进进行行处处理理。通通过过本本章章学学习习,读读者者应应重重点点掌掌握握与与中中断断系系统统有有关关的的特特殊殊功功能能寄寄存存器器以以及及中中断断系统的应用特性,以及熟练地进行中断系统应用的编程。系统的应用特性,以及熟练地进行中断系统应用的编程。2内容概要本章介绍AT89S51片内中断系统的硬件结构和工作原2第5章-中断系统-单片机原理及接口技术(C51编程)ppt课件3第5章-中断系统-单片机原理及接口技术(C51编程)ppt课件4如果单片机没有中断系统,单片机的大量时间可能会浪费在查如果单片机没有中断系统,单片机的大量时间可能会浪费在查询是否有服务请求发生的定时查询操作上,即不论是否有询是否有服务请求发生的定时查询操作上,即不论是否有服务请求发生,都必须去查询。采用中断技术完全消除了服务请求发生,都必须去查询。采用中断技术完全消除了单片机在查询方式中的等待现象,大大地提高了单片机的单片机在查询方式中的等待现象,大大地提高了单片机的工作效率和实时性。由于中断工作方式的优点极为明显,工作效率和实时性。由于中断工作方式的优点极为明显,因此,单片机的片内硬件中都带有中断系统。因此,单片机的片内硬件中都带有中断系统。5.2 AT89S51中断系统结构中断系统结构 中断系统结构如中断系统结构如图图5-2所示。共有所示。共有5个中断请求源(简称中断源)个中断请求源(简称中断源),2个中断优先级,可实现个中断优先级,可实现2级中断服务程序嵌套。每一中级中断服务程序嵌套。每一中断源可用软件独立地控制为允许中断或关中断状态;每一断源可用软件独立地控制为允许中断或关中断状态;每一中断源的中断优先级别均可用软件来设置。中断源的中断优先级别均可用软件来设置。5如果单片机没有中断系统,单片机的大量时间可能会浪费在查询是否56图5-2 AT89S51的中断系的中断系统结构构6图5-2 AT89S51的中断系统结构6由图由图5-2可见,中断系统共有可见,中断系统共有5个中断请求源,它们是:个中断请求源,它们是:(1)INT0*外部中断请求外部中断请求0,中断请求信号由引脚输入,中,中断请求信号由引脚输入,中断请求标志为断请求标志为IE0。(2)INT1*外部中断请求外部中断请求1,中断请求信号由引脚输入,中,中断请求信号由引脚输入,中断请求标志为断请求标志为IE1。(3)定时器)定时器/计数器计数器T0计数溢出发出的中断请求,中断请求标计数溢出发出的中断请求,中断请求标志为志为TF0。(4)定时器)定时器/计数器计数器T1计数溢出发出的中断请求,中断请求标计数溢出发出的中断请求,中断请求标志为志为TF1。(5)串行口中断请求,中断请求标志为发送中断)串行口中断请求,中断请求标志为发送中断TI或接收中或接收中断断RI。7由图5-2可见,中断系统共有5个中断请求源,它们是:775.2.2 中断请求标志寄存器中断请求标志寄存器5个中断请求源的中断请求标志分别由特殊功能寄存器个中断请求源的中断请求标志分别由特殊功能寄存器TCON和和SCON的相应位锁存(见图的相应位锁存(见图5-2)。)。1.TCON寄存器寄存器为定时器为定时器/计数器的控制寄存器,字节地址为计数器的控制寄存器,字节地址为88H,可位寻址。,可位寻址。该寄存器中既包括该寄存器中既包括T0和和T1的溢出中断请求标志位的溢出中断请求标志位TF0和和TF1,也包括了两个外部中断请求的标志位,也包括了两个外部中断请求的标志位IE1与与IE0,此,此外还包括了两个外部中断请求源的中断触发方式选择位。外还包括了两个外部中断请求源的中断触发方式选择位。特殊功能寄存器特殊功能寄存器TCON的格式如的格式如图图5-3所示。所示。85.2.2 中断请求标志寄存器889图5-3 特殊功能寄存器TCON的格式 TCON寄存器中与中断系统有关的各标志位的功能如下:(1)TF1片内定时器/计数器T1的溢出中断请求标志位。当启动T1计数后,定时器/计数器T1从初值开始加1计数,当最高位产生溢出时,由硬件使TF1置“1”,向CPU申请中断。CPU响应TF1中断时,TF1标志由硬件自动清“0”,TF1也可由软件清“0”。9图5-3 特殊功能寄存器TCON的格式 TCON寄存器中9(2)TF0片内定时器片内定时器/计数器计数器T0的溢出中断请求标志位,功的溢出中断请求标志位,功能与能与TF1类似。类似。(3)IE1外部中断请求外部中断请求1的中断请求标志位。的中断请求标志位。(4)IE0外部中断请求外部中断请求0的中断请求标志位,其功能与的中断请求标志位,其功能与IE1类类似。似。(5)IT1选择外部中断请求选择外部中断请求1为跳沿触发方式还是电平触发为跳沿触发方式还是电平触发方式。方式。IT1=0,为电平触发方式,加到,为电平触发方式,加到INT1*引脚上的外部中断请求输引脚上的外部中断请求输入信号为低电平有效,并把入信号为低电平有效,并把IE1置置“1”。转向中断服务程序。转向中断服务程序时,则由硬件自动把时,则由硬件自动把IE1清清“0”。IT1=1,为跳沿触发方式,加到,为跳沿触发方式,加到INT1*引脚上的外部中断请求输引脚上的外部中断请求输10(2)TF0片内定时器/计数器T0的溢出中断请求标志位,功10入信号电平从高到低的负跳变有效,并把入信号电平从高到低的负跳变有效,并把IE1置置“1”。转向。转向中断服务程序时,则由硬件自动把中断服务程序时,则由硬件自动把IE1清清“0”。(6)IT0选择外部中断请求选择外部中断请求0为跳沿触发方式还是电平触为跳沿触发方式还是电平触发方式,其意义与发方式,其意义与IT1类似。类似。当当AT89S51复位后,复位后,TCON被清被清“0”,5个中断源的中断请个中断源的中断请求标志均为求标志均为0。TR1(D6位)、位)、TR0(D4位)这位)这2位与中断系统无关,仅与位与中断系统无关,仅与定时器定时器/计数器计数器T1和和T0有关,将在第有关,将在第6章章介绍。介绍。2.SCON寄存器寄存器SCON为串行口控制寄存器,字节地址为为串行口控制寄存器,字节地址为98H,可位寻址。,可位寻址。SCON的低二位锁存串行口的发送中断和接收中断的中断的低二位锁存串行口的发送中断和接收中断的中断11入信号电平从高到低的负跳变有效,并把IE1置“1”。转向中断11图5-4 SCON中的中断请求标志位SCON中各标志位的功能如下:(1)TI串行口的发送中断请求标志位。CPU将一个字节的数据写入串行口的发送缓冲器SBUF时,就启动一帧串行数据的发送,每发送完一帧串行数据后,硬件使TI自动置“1”。请求标志请求标志TITI和和RIRI,其格式如,其格式如图图5-45-4所示。所示。图5-4 SCON中的中断请求标志位SCON中各标志位12CPU响应串行口发送中断时,并不清除响应串行口发送中断时,并不清除TI中断请求标志,中断请求标志,TI标标志必须在中断服务程序中用指令对其清志必须在中断服务程序中用指令对其清“0”。(2)RI串行口接收中断请求标志位。在串行口接收完一个串串行口接收中断请求标志位。在串行口接收完一个串行数据帧,硬件自动使行数据帧,硬件自动使RI中断请求标志置中断请求标志置“1”。CPU在响在响应串行口接收中断时,应串行口接收中断时,RI标志并不清标志并不清“0”,必须在中断服,必须在中断服务程序中用指令对务程序中用指令对RI清清“0”。5.3 中断允许与中断优先级的控制中断允许与中断优先级的控制实现中断允许控制和中断优先级控制分别由特殊功能寄存器区实现中断允许控制和中断优先级控制分别由特殊功能寄存器区中的中断允许寄存器中的中断允许寄存器IE和中断优先级寄存器和中断优先级寄存器IP来实现的。下来实现的。下面介绍这两个特殊功能寄存器。面介绍这两个特殊功能寄存器。13CPU响应串行口发送中断时,并不清除TI中断请求标志,TI标135.3.1 中断允许寄存器中断允许寄存器IEAT89S51的的CPU对各中断源的开放或屏蔽,是由片内的中断允对各中断源的开放或屏蔽,是由片内的中断允许寄存器许寄存器IE控制的。控制的。IE的字节地址为的字节地址为A8H,可进行位寻址,可进行位寻址,其格式如其格式如图图5-5所示。所示。14图5-5 中断允中断允许寄存器寄存器IE的格式的格式 5.3.1 中断允许寄存器IE14图5-5 中断允许14(2)ES串行口中断允许位。串行口中断允许位。ES=0,禁止串行口中断。,禁止串行口中断。ES=1,允许串行口中断。,允许串行口中断。(3)ET1定时器定时器/计数器计数器T1的溢出中断允许位。的溢出中断允许位。ET1=0,禁止,禁止T1溢出中断。溢出中断。ET1=1,允许,允许T1溢出中断。溢出中断。(4)EX1外部中断外部中断1中断允许位。中断允许位。EX1=0,禁止外部中断,禁止外部中断1中断。中断。EX1=1,允许外部中断,允许外部中断1中断中断 15(2)ES串行口中断允许位。1515(4)EX1外部中断外部中断1中断允许位。中断允许位。EX1=0,禁止外部中断,禁止外部中断1中断。中断。EX1=1,允许外部中断,允许外部中断1中断。中断。(5)ET0定时器定时器/计数器计数器T0的溢出中断允许位。的溢出中断允许位。ET0=0,禁止,禁止T0溢出中断。溢出中断。ET0=1,允许,允许T0溢出中断。溢出中断。(6)EX0外部中断外部中断0中断允许位。中断允许位。EX0=0,禁止外部中断,禁止外部中断0中断。中断。EX0=1,允许外部中断,允许外部中断0中断。中断。AT89S51复位以后,复位以后,IE被清被清“0”,所有的中断请求被禁止。,所有的中断请求被禁止。IE16(4)EX1外部中断1中断允许位。1616中与各个中断源相应的位可用指令置中与各个中断源相应的位可用指令置“1”或清或清“0”,即可允,即可允许或禁止各中断源的中断申请。若使某一个中断源被允许中许或禁止各中断源的中断申请。若使某一个中断源被允许中断,除了断,除了IE相应的位被置相应的位被置“1”外,还必须使外,还必须使EA位置位置“1”。5.3.2 中断优先级寄存器中断优先级寄存器IP中断请求源有两个中断优先级,每一中断请求源可由软件设置中断请求源有两个中断优先级,每一中断请求源可由软件设置为高优先级中断或低优先级中断,也可实现两级中断嵌套。为高优先级中断或低优先级中断,也可实现两级中断嵌套。所谓两级中断嵌套,就是所谓两级中断嵌套,就是AT89S51正在执行低优先级中断的正在执行低优先级中断的服务程序时,可被高优先级中断请求所中断,待高优先级中服务程序时,可被高优先级中断请求所中断,待高优先级中断处理完毕后,再返回低优先级中断服务程序。两级中断嵌断处理完毕后,再返回低优先级中断服务程序。两级中断嵌套的过程如套的过程如图图5-6所示。所示。17中与各个中断源相应的位可用指令置“1”或清“0”,即可允许或1718图5-6 两两级中断嵌套的中断嵌套的过程程 18图5-6 两级中断嵌套的过程 18关于各中断源的中断优先级关系,可归纳为下面两条基本规关于各中断源的中断优先级关系,可归纳为下面两条基本规则:则:(1)低优先级可被高优先级中断,高优先级不能低优先级)低优先级可被高优先级中断,高优先级不能低优先级中断。中断。(2)任何一种中断(不管是高级还是低级),一旦得到响)任何一种中断(不管是高级还是低级),一旦得到响应,不会再被它的同级中断源所中断。如果某一中断源被应,不会再被它的同级中断源所中断。如果某一中断源被设置为高优先级中断,在执行该中断源的中断服务程序时,设置为高优先级中断,在执行该中断源的中断服务程序时,则不能被任何其他的中断源的中断请求所中断。则不能被任何其他的中断源的中断请求所中断。AT89S51的片内有一个中断优先级寄存器的片内有一个中断优先级寄存器IP,其字节地址为,其字节地址为B8H,可位寻址。只要用程序改变其内容,即可进行各中,可位寻址。只要用程序改变其内容,即可进行各中断源中断优先级的设置,断源中断优先级的设置,IP寄存器的格式如图寄存器的格式如图5-7所示。所示。19关于各中断源的中断优先级关系,可归纳为下面两条基本规则:1919中断优先级寄存器中断优先级寄存器IP各位的含义如下:各位的含义如下:(1)PS串行口中断优先级控制位串行口中断优先级控制位PS=1,串行口中断为高优先级,串行口中断为高优先级PS=0,串行口中断为低优先级,串行口中断为低优先级(2)PT1定时器定时器T1中断优先级控制位中断优先级控制位PT1=1,定时器,定时器T1中断为高优先级中断为高优先级PT1=0,定时器,定时器T1中断为低优先级中断为低优先级20图5-7 IP寄存器的格式寄存器的格式 中断优先级寄存器IP各位的含义如下:20图5-7 IP寄存20(3)PX1外部中断外部中断1中断优先级控制位中断优先级控制位PX1=1,外部中断,外部中断1中断为高优先级中断为高优先级PX1=0,外部中断,外部中断1中断为低优先级中断为低优先级(4)PT0定时器定时器T0中断优先级控制位中断优先级控制位PT0=1,定时器,定时器T0中断为高优先级中断为高优先级PT0=0,定时器,定时器T0中断为低优先级中断为低优先级(5)PX0外部中断外部中断0中断优先级控制位中断优先级控制位PX0=1,外部中断,外部中断0中断为高优先级中断为高优先级PX0=0,外部中断,外部中断0中断为低优先级中断为低优先级21(3)PX1外部中断1中断优先级控制位2121中断优先级控制寄存器中断优先级控制寄存器IP的各位都可由用户程序置的各位都可由用户程序置“1”和清和清“0”,用位操作指令或字节操作指令可更新,用位操作指令或字节操作指令可更新IP的内容,以改的内容,以改变各中断源的中断优先级。变各中断源的中断优先级。AT89S51复位以后,复位以后,IP的内容为的内容为0,各个中断源均为低优先级中,各个中断源均为低优先级中断。断。下面简单介绍下面简单介绍AT89S51的中断优先级结构。的中断优先级结构。AT89S51的中断系的中断系统有两个不可寻址的统有两个不可寻址的“优先级激活触发器优先级激活触发器”,其中一个指示某,其中一个指示某高优先级的中断正在执行,所有后来的中断均被阻止;另一个高优先级的中断正在执行,所有后来的中断均被阻止;另一个触发器指示某低优先级的中断正在执行,所有同级的中断都被触发器指示某低优先级的中断正在执行,所有同级的中断都被阻止,但不阻断高优先级的中断请求。阻止,但不阻断高优先级的中断请求。22中断优先级控制寄存器IP的各位都可由用户程序置“1”和清“022在同时收到几个同一优先级的中断请求时,哪一个中断请求能在同时收到几个同一优先级的中断请求时,哪一个中断请求能优先得到响应,取决于内部的查询顺序。这相当于在同一个优先得到响应,取决于内部的查询顺序。这相当于在同一个优先级内,还同时存在另一个辅助优先级结构,其查询顺序优先级内,还同时存在另一个辅助优先级结构,其查询顺序如如表表5-1所示。所示。23 由此可见,各中断源在同一个优先级的条件下,外部中断0的中断优先权最高,串行口中断的优先权最低。在同时收到几个同一优先级的中断请求时,哪一个中断请求能优先得235.4 响应中断请求的条件响应中断请求的条件一个中断源的中断请求被响应,必须满足以下必要条件:一个中断源的中断请求被响应,必须满足以下必要条件:(1)总中断允许开关接通,即)总中断允许开关接通,即IE寄存器中的中断总允许位寄存器中的中断总允许位EA=1。(2)该中断源发出中断请求,即该中断源对应的中断请求标志为)该中断源发出中断请求,即该中断源对应的中断请求标志为“1”。(3)该中断源的中断允许位)该中断源的中断允许位=1,即该中断被允许。,即该中断被允许。(4)无同级或更高级中断正在被服务。)无同级或更高级中断正在被服务。中断响应就是中断响应就是CPU对中断源提出的中断请求的接受。当对中断源提出的中断请求的接受。当CPU查询到查询到有效中断请求时,在满足上述条件时,紧接着就进行中断响应。有效中断请求时,在满足上述条件时,紧接着就进行中断响应。245.4 响应中断请求的条件2424中断响应的主要过程:首先由硬件自动生成一条长调用指令中断响应的主要过程:首先由硬件自动生成一条长调用指令“LCALL addr16”。这里的。这里的addr16就是程序存储区中相应就是程序存储区中相应的中断入口地址。例如,对于外部中断的中断入口地址。例如,对于外部中断1的响应,硬件自的响应,硬件自动生成的长调用指令为动生成的长调用指令为 LCALL0013H生成生成LCALL指令后,紧接着就由指令后,紧接着就由CPU执行该指令。首先将程执行该指令。首先将程序计数器序计数器PC的内容压入堆栈以保护断点,再将中断入口的内容压入堆栈以保护断点,再将中断入口地址装入地址装入PC,使程序转向响应中断请求的中断入口地址。,使程序转向响应中断请求的中断入口地址。各中断源服务程序的入口地址是固定的,如表各中断源服务程序的入口地址是固定的,如表5-2所示。所示。中断响应的主要过程:首先由硬件自动生成一条长调用指令“LCA25其中两个中断入口间只相隔8字节,一般情况下难以安放一个完整的中断服务程序。因此,通常总是在中断入口地址处放置一条无条件转移指令,使程序执行转向在其他地址存放的中断服务程序入口。其中两个中断入口间只相隔8字节,一般情况下难以安放一个完整的26中断响应是有条件的,并不是查询到的所有中断请求都能被立中断响应是有条件的,并不是查询到的所有中断请求都能被立即响应,当遇到即响应,当遇到下列三种情况之一下列三种情况之一时,中断响应被封锁:时,中断响应被封锁:(1)CPU正在处理同级或更高优先级的中断。因为当一个中正在处理同级或更高优先级的中断。因为当一个中断被响应时,要把对应的中断优先级状态触发器置断被响应时,要把对应的中断优先级状态触发器置“1”(该触发器指出(该触发器指出CPU所处理的中断优先级别),从而封锁了所处理的中断优先级别),从而封锁了低级中断请求和同级中断请求。低级中断请求和同级中断请求。(2)所查询的机器周期不是当前正在执行指令的最后一个机器)所查询的机器周期不是当前正在执行指令的最后一个机器周期。设定这个限制的目的是只有在当前指令执行完毕后,周期。设定这个限制的目的是只有在当前指令执行完毕后,才能进行中断响应,以确保当前指令执行的完整性。才能进行中断响应,以确保当前指令执行的完整性。(3)正在执行的指令是)正在执行的指令是RETI或是访问或是访问IE或或IP的指令。因为按的指令。因为按照照AT89S51中断系统的规定,在执行完这些指令后,需要再中断系统的规定,在执行完这些指令后,需要再27中断响应是有条件的,并不是查询到的所有中断请求都能被立即响应27执行完一条指令,才能响应新的中断请求。执行完一条指令,才能响应新的中断请求。如果存在上述三种情况之一,如果存在上述三种情况之一,CPU将丢弃中断查询结果,不能将丢弃中断查询结果,不能对中断进行响应。对中断进行响应。5.5 外部中断的响应时间外部中断的响应时间在设计者使用外部中断时,有时需考虑从外部中断请求有效在设计者使用外部中断时,有时需考虑从外部中断请求有效(外部中断请求标志置(外部中断请求标志置“1”)到转向中断入口地址所需要)到转向中断入口地址所需要的响应时间。下面来讨论这个问题。的响应时间。下面来讨论这个问题。外部中断的最短响应时间为外部中断的最短响应时间为3个机器周期。其中中断请求标志个机器周期。其中中断请求标志位查询占位查询占1个机器周期,而这个机器周期恰好处于指令的最个机器周期,而这个机器周期恰好处于指令的最后一个机器周期。在这个机器周期结束后,中断即被响应,后一个机器周期。在这个机器周期结束后,中断即被响应,执行完一条指令,才能响应新的中断请求。28CPU接着执行一条硬件子程序调用指令接着执行一条硬件子程序调用指令LCALL以转到相以转到相应的中断服务程序入口,这需要应的中断服务程序入口,这需要2个机器周期。个机器周期。外部中断响应的最长时间为外部中断响应的最长时间为8个机器周期。这种情况发生在个机器周期。这种情况发生在CPU进行中断标志查询时,刚好才开始执行进行中断标志查询时,刚好才开始执行RETI或访问或访问IE或或IP的指令,则需把当前指令执行完再继续执行一条指的指令,则需把当前指令执行完再继续执行一条指令后,才能响应中断。执行上述的令后,才能响应中断。执行上述的RETI或访问或访问IE或或IP的指的指令,最长需要令,最长需要2个机器周期。而接着再执行一条指令,我个机器周期。而接着再执行一条指令,我们按最长的指令(乘法指令们按最长的指令(乘法指令MUL和除法指令和除法指令DIV)来算,)来算,也只有也只有4个机器周期。再加上硬件子程序调用指令个机器周期。再加上硬件子程序调用指令LCALL的执行,需要的执行,需要2个机器周期,所以,外部中断响应的最长个机器周期,所以,外部中断响应的最长时间为时间为8个机器周期。个机器周期。29CPU接着执行一条硬件子程序调用指令LCALL以转到相应的29 如果已经在处理同级或更高级中断,外部中断请求的响应如果已经在处理同级或更高级中断,外部中断请求的响应时间取决于正在执行的中断服务程序的处理时间,这种情况时间取决于正在执行的中断服务程序的处理时间,这种情况下,响应时间就无法计算了。下,响应时间就无法计算了。这样,在一个单一中断的系统里,这样,在一个单一中断的系统里,AT89S51单片机对外部单片机对外部中断请求的响应时间总是在中断请求的响应时间总是在38个机器周期之间。个机器周期之间。5.6 外部中断的触发方式选择外部中断的触发方式选择外部中断有两种触发方式:外部中断有两种触发方式:电平触发电平触发方式和方式和跳沿触发跳沿触发方式。方式。5.6.1 电平触发方式电平触发方式 若外部中断定义为电平触发方式,外部中断申请触发器的若外部中断定义为电平触发方式,外部中断申请触发器的状态随着状态随着CPU在每个机器周期采样到的外部中断输入引脚的在每个机器周期采样到的外部中断输入引脚的电平变化而变化,这能提高电平变化而变化,这能提高CPU对外部中断请求的响应速对外部中断请求的响应速 如果已经在处理同级或更高级中断,外部中断请求的响应时30度。当外部中断源被设定为电平触发方式时,在中断服务程序度。当外部中断源被设定为电平触发方式时,在中断服务程序返回之前,外部中断请求输入必须无效(即外部中断请求输返回之前,外部中断请求输入必须无效(即外部中断请求输入已由低电平变为高电平),否则入已由低电平变为高电平),否则CPU返回主程序后会再次返回主程序后会再次响应中断。所以电平触发方式适合于外部中断以低电平输入响应中断。所以电平触发方式适合于外部中断以低电平输入且中断服务程序能清除外部中断请求源(即外部中断输入电且中断服务程序能清除外部中断请求源(即外部中断输入电平又变为高电平)的情况。如何清除电平触发方式的外部中平又变为高电平)的情况。如何清除电平触发方式的外部中断请求源的电平信号,将在本章的后面介绍。断请求源的电平信号,将在本章的后面介绍。5.6.2 跳沿触发方式跳沿触发方式外部中断若定义为跳沿触发方式,外部中断申请触发器能锁存外部中断若定义为跳沿触发方式,外部中断申请触发器能锁存外部中断输入线上的负跳变。即便是外部中断输入线上的负跳变。即便是CPU暂时不能响应,中暂时不能响应,中断请求标志也不会丢失。在这种方式下,如果相继连续两次断请求标志也不会丢失。在这种方式下,如果相继连续两次31度。当外部中断源被设定为电平触发方式时,在中断服务程序返回之31采样,一个机器周期采样到外部中断输入为高,下一个机器采样,一个机器周期采样到外部中断输入为高,下一个机器周期采样为低,则中断申请触发器置周期采样为低,则中断申请触发器置“1”,直到,直到CPU响应响应此中断时,该标志才清此中断时,该标志才清“0”。这样就不会丢失中断,但输。这样就不会丢失中断,但输入的负脉冲宽度至少保持入的负脉冲宽度至少保持12个时钟周期(若晶振频率为个时钟周期(若晶振频率为6MHz,则为,则为2 s),才能被),才能被CPU采样到。外部中断的跳沿采样到。外部中断的跳沿触发方式适合于以负脉冲形式输入的外部中断请求。触发方式适合于以负脉冲形式输入的外部中断请求。5.7 中断请求的撤销中断请求的撤销 某个中断请求被响应后,就存在着一个中断请求的撤销问某个中断请求被响应后,就存在着一个中断请求的撤销问题。下面按中断请求源的类型分别说明中断请求的撤销。题。下面按中断请求源的类型分别说明中断请求的撤销。32采样,一个机器周期采样到外部中断输入为高,下一个机器周期采样321定时器定时器/计数器中断请求的撤销计数器中断请求的撤销定时器定时器/计数器中断的中断请求被响应后,硬件会自动把中断计数器中断的中断请求被响应后,硬件会自动把中断请求标志位(请求标志位(TF0或或TF1)清)清“0”,因此定时器,因此定时器/计数器计数器中断请求是自动撤销的。中断请求是自动撤销的。2外部中断请求的撤销外部中断请求的撤销(1)跳沿方式外部中断请求的撤销)跳沿方式外部中断请求的撤销跳沿方式的外部中断请求的撤销,包括两项内容:中断标志跳沿方式的外部中断请求的撤销,包括两项内容:中断标志位清位清“0”和外中断信号的撤销。其中,中断标志位(和外中断信号的撤销。其中,中断标志位(IE0或或IE1)清)清“0”是在中断响应后由硬件自动完成的。而外是在中断响应后由硬件自动完成的。而外中断请求信号的撤销,由于跳沿信号过后也就消失了,所中断请求信号的撤销,由于跳沿信号过后也就消失了,所以跳沿方式的外部中断请求也是自动撤销的。以跳沿方式的外部中断请求也是自动撤销的。331定时器/计数器中断请求的撤销3333(2)电平方式外部中断请求的撤销)电平方式外部中断请求的撤销对于电平方式外部中断请求的撤销,中断请求标志的撤销是自对于电平方式外部中断请求的撤销,中断请求标志的撤销是自动的,但中断请求信号的低电平可能继续存在,在以后的机动的,但中断请求信号的低电平可能继续存在,在以后的机器周期采样时,又会把已清器周期采样时,又会把已清“0”的的IE0或或IE1标志位重新置标志位重新置“1”。为此,要彻底解决电平方式外部中断请求的撤销,。为此,要彻底解决电平方式外部中断请求的撤销,除了标志位清除了标志位清“0”之外,必要时还需在中断响应后把中断之外,必要时还需在中断响应后把中断请求信号输入引脚从低电平强制改变为高电平。为此,可在请求信号输入引脚从低电平强制改变为高电平。为此,可在系统中增加如图系统中增加如图5-8所示的电路。所示的电路。34(2)电平方式外部中断请求的撤销343435图5-8 电平方式的外部中断平方式的外部中断请求的撤求的撤销电路路35图5-8 电平方式的外部中断请求的撤销电路35由图由图5-8可见,用可见,用D触发器锁存外来的中断请求低电平,并通触发器锁存外来的中断请求低电平,并通过过D触发器的输出端触发器的输出端Q接到接到INT0*(或(或INT1*)。所以,增)。所以,增加的加的D触发器不影响中断请求。中断响应后,为了撤销中触发器不影响中断请求。中断响应后,为了撤销中断请求,可利用断请求,可利用D触发器的直接置触发器的直接置“1”端端SD实现,即把实现,即把SD端接端接AT89S51的的P1.0端。因此,只要端。因此,只要P1.0端输出一个端输出一个负脉冲就可以使负脉冲就可以使D触发器置触发器置“1”,从而就撤销低电平的中,从而就撤销低电平的中断请求信号。所需的负脉冲可在中断服务程序中先把断请求信号。所需的负脉冲可在中断服务程序中先把P1.0置置1.再让再让P1.0为为0,再把,再把P1.0置置1,从而产生一个负脉冲。,从而产生一个负脉冲。3串行口中断请求的撤销串行口中断请求的撤销串行口中断请求的撤销只有标志位清串行口中断请求的撤销只有标志位清“0”的问题。串行口的问题。串行口中断的标志位是中断的标志位是TI和和RI,但对这两个中断标志,但对这两个中断标志CPU不进行不进行自动清自动清“0”。因为在响应串行口的中断后,。因为在响应串行口的中断后,CPU无法知无法知道道 36由图5-8可见,用D触发器锁存外来的中断请求低电平,并通过D36是接收中断还是发送中断,还需测试这两个中断标志位的状态,是接收中断还是发送中断,还需测试这两个中断标志位的状态,以判定是接收操作还是发送操作,然后才能清除。所以串行以判定是接收操作还是发送操作,然后才能清除。所以串行口中断请求的撤销只能使用软件的方法,在中断服务程序中口中断请求的撤销只能使用软件的方法,在中断服务程序中进行,即使用软件在中断服务程序中把串行口中断标志位进行,即使用软件在中断服务程序中把串行口中断标志位TI、RI清清0。5.8 中断函数中断函数为直接使用为直接使用C51编写中断服务程序,编写中断服务程序,C51中定义了中断函数。中定义了中断函数。由于由于C51编译器在编译时对声明为中断服务程序的函数自动编译器在编译时对声明为中断服务程序的函数自动添加了相应的现场保护、阻断其他中断、返回时自动恢复现添加了相应的现场保护、阻断其他中断、返回时自动恢复现场等处理的程序段,因而在编写中断函数时可不必考虑这些场等处理的程序段,因而在编写中断函数时可不必考虑这些问题,减小了用户编写中断服务程序的繁琐程度。问题,减小了用户编写中断服务程序的繁琐程度。37是接收中断还是发送中断,还需测试这两个中断标志位的状态,以判37第第3章中介绍的中断服务函数的一般形式为:章中介绍的中断服务函数的一般形式为:函数类型函数类型 函数名(形式参数表)函数名(形式参数表)interrupt n using n 关键字关键字interrupt后面的后面的 n是中断号,对于是中断号,对于51单片机,单片机,n的取的取值为值为04,编译器从,编译器从8n+3处产生中断向量。处产生中断向量。AT89S51单单片机的中断源对应的中断号和中断向量见表片机的中断源对应的中断号和中断向量见表5-3。38第3章中介绍的中断服务函数的一般形式为:3838AT89S51单片机在内部单片机在内部RAM中可使用中可使用4个工作寄存器区,每个工作寄存器区,每个工作寄存器区包含个工作寄存器区包含8个工作寄存器(个工作寄存器(R0R7)。)。C51扩扩展了一个关键字展了一个关键字using,using后面的后面的n专门用来选择专门用来选择AT89S51的的4个不同的工作寄存器区。个不同的工作寄存器区。using是一个选项,是一个选项,如果不选用该项,中断函数中的所有工作寄存器的内容将如果不选用该项,中断函数中的所有工作寄存器的内容将被保存到堆栈中。被保存到堆栈中。关键字关键字using对函数目标代码的影响如下:在中断函数的入对函数目标代码的影响如下:在中断函数的入口处将当前工作寄存器区的内容保护到堆栈中,函数返回口处将当前工作寄存器区的内容保护到堆栈中,函数返回前将被保护的寄存器区的内容从堆栈中恢复。使用关键字前将被保护的寄存器区的内容从堆栈中恢复。使用关键字using在函数中确定一个工作寄存器区时须十分小心,要在函数中确定一个工作寄存器区时须十分小心,要保证任何工作寄存器区的切换都只在指定的控制区域中发保证任何工作寄存器区的切换都只在指定的控制区域中发39AT89S51单片机在内部RAM中可使用4个工作寄存器区,每39生,否则将产生不正确的函数结果。生,否则将产生不正确的函数结果。例如,外中断例如,外中断1的中断服务函数如下:的中断服务函数如下:void int1()interrupt 2 using 0/*中断号中断号n=2,选择,选择0区工作寄存器区区工作寄存器区*/中断调用与标准中断调用与标准C的函数调用是不一样的,当中断事件发生的函数调用是不一样的,当中断事件发生后,对应的中断函数被自动调用,中断函数既没有参数,后,对应的中断函数被自动调用,中断函数既没有参数,也没有返回值。中断函数会带来如下影响。也没有返回值。中断函数会带来如下影响。(1)编译器会为中断函数自动生成中断向量。)编译器会为中断函数自动生成中断向量。(2)退出中断函数时,所有保存在堆栈中的工作寄存器及)退出中断函数时,所有保存在堆栈中的工作寄存器及特殊功能寄存器被恢复。特殊功能寄存器被恢复。40生,否则将产生不正确的函数结果。4040(3)在必要时特殊功能寄存器)在必要时特殊功能寄存器Acc、B、DPH、DPL以及以及PSW的内容被保存到堆栈中。的内容被保存到堆栈中。编写编写AT89S51单片机中断程序时,应遵循以下规则:单片机中断程序时,应遵循以下规则:(1)中断函数没有返回值,如果定义了一个返回值,将会得)中断函数没有返回值,如果定义了一个返回值,将会得到不正确的结果。因此建议将中断函数定义为到不正确的结果。因此建议将中断函数定义为void类型,以类型,以明确说明没有返回值。明确说明没有返回值。(2)中断函数不能进行参数传递,如果中断函数中包含任何)中断函数不能进行参数传递,如果中断函数中包含任何参数声明都将导致编译出错。参数声明都将导致编译出错。(3)在任何情况下都不能直接调用中断函数,否则会产生编)在任何情况下都不能直接调用中断函数,否则会产生编译错误。因为中断函数的返回是由汇编语言指令译错误。因为中断函数的返回是由汇编语言指令RETI完成完成的。的。RETI指令会影响指令会影响AT89S51单片机中的硬件中断系统内单片机中的硬件中断系统内41(3)在必要时特殊功能寄存器Acc、B、DPH、DPL以及P41的不可寻址的中断优先级寄存器的状态。如果在没有实际的的不可寻址的中断优先级寄存器的状态。如果在没有实际的中断请求的情况下,直接调用中断函数,也就不会执行中断请求的情况下,直接调用中断函数,也就不会执行RETI指令,其操作结果有可能产生一个致命的错误。指令,其操作结果有可能产生一个致命的错误。(4)如果在中断函数中再调用其他函数,则被调用的函数)如果在中断函数中再调用其他函数,则被调用的函数所使用的寄存器区必须与中断函数使用的寄存器区不同。所使用的寄存器区必须与中断函数使用的寄存器区不同。5.9 C51编程举例编程举例本节通过几个例程介绍有关中断应用的程序的编写。本节通过几个例程介绍有关中断应用的程序的编写。5.9.1 单一外中断的应用单一外中断的应用42的不可寻址的中断优先级寄存器的状态。如果在没有实际的中断请求42【例例5-2】在在51单单片片机机的的P1口口上上接接有有8只只LED。在在外外部部中中断断0输输入入引引脚脚P3.2(INT0*)引引脚脚接接有有一一只只按按钮钮开开关关K1。程程序序要要求求将将外外部部中中断断0设设置置为为负负跳跳沿沿触触发发。在在程程序序启启动动时时,P1口口上上的的8只只LED亮亮。按按一一次次按按钮钮开开关关K1,使使引引脚脚接接地地,产产生生一一个个负负跳跳沿沿触触发发的的外外中中断断0中中断断请请求求,在在中中断断服服务务程程序序中中,让让低低4位位的的LED和高和高4位的位的LED交替闪烁。具体电路如交替闪烁。具体电路如图图5-9所示。所示。43【例5-2】在51单片机的P1口上接有8只LED。在外部中断4344图5-9 控制8只LED交替闪烁的电路44图5-9 控制8只LED交替闪烁的电路44参考程序如下:参考程序如下:#include void Delay(unsigned int i)/*延时函数延时函数Delay(),i为形式参数,不为形式参数,不能赋初值能赋初值*/unsigned int j;for(;i 0;i-)for(j=0;j333;j+)/*晶振为晶振为12MHz,j的选择与晶振频率有关的选择与晶振频率有关*/;/*空函数空函数*/void main()/*主函数主函数*/EA=1;/*总中断允许总中断允许*/EX0=1;/*允许外部中断允许外部中断0中断中断*/IT0=1;/*选择外部中断选择外部中断0为跳沿触发方为跳沿触发方式式*/P1=0;/*P1口的口的8只只LED全亮全亮*/45参考程序如下:4545While(1)/*循环循环*/void int0()interrupt 0 using 0 /*外中断外中断0的中断服务函数的中断服务函数*/EX0=0;/*禁止外部中断禁止外部中断0中断中断*/P1=0 x0f;/*低低4位位LED灭,高灭,高4位位LED亮亮*/Delay(800);/*延时延时800ms*/P1=0 xf0;/*高高4位位LED灭,低灭,低4位位LED亮亮*/Delay(800);/*延时延时800ms*/EX0=1;/*中断返回前,打开外部中断中断返回前,打开外部中断0中断中断*/本例程包含了两个部分,一是中断系统初始化部分,另一是本例程包含了两个部分,一是中断系统初始化部分,另一是中断处理服务函数部分。中断处理服务函数部分。46While(1)/*循环*/46465.9.2 两个外中断的应用两个外中断的应用当多个中断源时,只需增加相应的中断服务函数即可。例当多个中断源时,只需增加相应的中断服务函数即可。例5-3是是处理两个外中断请求的例子处理两个外中断请求的例子【例例5-3】如图如图5-10所示,在所示,在51单片机的单片机的P1口上接有口上接有8只只LED。在外部中断在外部中断0输入输入引脚引脚P3.2(INT0*)引脚接有一只按钮开关)引脚接有一只按钮开关K1。在外部中断。在外部中断1输输入引脚入引脚P3.3(INT1*)引脚接有一只按钮开关)引脚接有一只按钮开关K2。程序要求。程序要求K1和和K2都未按下时,都未按下时,P1口的口的8只只LED呈流水灯显示,仅呈流水灯显示,仅K1(P3.2)按下时,左右)按下时,左右4只只LED交替闪烁。仅按下交替闪烁。仅按下K2(P3.3),),P1口的口的8只只LED全部闪亮。两个外中断的优先全部闪亮。两个外中断的优先级相同。级相同。475.9.2 两个外中断的应用474748图5-10 两个外中断控制两个外中断控制8只只LED显示的示的电路路48图5-10 两个外中断控制8只LED显示的电路48参考程序如下。#include void Delay(unsigned int i)/*延时函数延时函数Delay(),i为形式参为形式参数,不能赋初值数,不能赋初值*/unsigned int j;for(;i 0;i-)for(j=0;j125;j+);/*空函数空函数*/void main()/*主函数主函数*/unsigned char play 9=0 xff,0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf,0 xbf,0 x7f;/*定义了流水灯的显示数据定义了流水灯的显示数据*/unsigned char a;参考程序如下。49for(;)for(a=0;a9;a+)Delay(500)/*延时延时*/P1=play a;/*将已经定义的流水灯显示数据送到将已经定义的流水灯显示数据送到P1口口*/EA=1;/*总中断允许总中断允许*/EX0=1;/*允许外部中断允许外部中断0中断中断*/EX1=1/*允许外部中断允许外部中断1中断中断*/IT0=1;/*选择外部中断选择外部中断0为跳沿触发方式为跳沿触发方式*/IT1=1;/*选择外部中断选择外部中断1为跳沿触发方式为跳沿触发方式*/IP=0;/*两个外部中断均为低优先级两个外部中断均为低优先级*/50for(;)5050void int0_isr(void)interrupt 0 using 0 /*外中断0的中断服务函数*/for(;)P1=0 x0f;/*低4位LED灭,高4位LED亮*/Delay(500);/*延时*/P1=0 xf0;/*高4位LED灭,低4位LED亮*/Delay(500);/*延时*/void int1_isr(void)interrupt 2 using 1 /*外中断1的中断服务函数*/for(;)P1=0 xff;/*全灭*/Delay(500);/*延时*/P1=0;/*全亮*/Delay(500);/*延时*/51void int0_isr(void)interrupt515.9.3 中断嵌套中断嵌套 中断嵌套只能发生在单片机正在执行一个低优先级中断服务程序的时候,此时又有一个高优先级中断产生,就会产生高优先级中断打断低优先级中断服务程序,去执行高优先级中断服务程序。高优先级中断服务程序完成后,再继续执行低优先级中断服务程序。【例例5-4】电路仍如图5-10所示,设计一个中断嵌套程序。要求K1和K2都未按下时,P1口的8只LED呈流水灯显示,当K1按下再松开时,产生一个低优先级的外中断0请求(跳沿触发),进入外中断0中断服务程序,左右4只LED交替闪烁。此时按下K2再松开时,产生一个高优先级的外中断1请求525.9.3 中断嵌套5252(跳沿触发),进入外中断1中断服务程序,P1口的8只LED全部闪烁。当显示一段时间后,再从外中断1返回继续执行外中断0中断服务程序,即P1口控制8只LED左右4只LED交替闪烁。设置外中断1为高优先级,外中断0为低优先级。参考程序如下。#include void Delay(unsigned int i)/*延时函数Delay()*/unsigned int j;for(;i 0;i-)for(j=0;j125;j+);/*空函数*/void main()/*主函数*/53(跳沿触发),进入外中断1中断服务程序,P1口的8只LED全53unsigned char play 9=0 xff,0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf,0 xbf,0 x7f;/*定义流水灯的显示数据定义流水灯的显示数据*/unsigned char a;for(;)for(a=0;a9;a+)Delay(500)/*延时延时*/P1=play a;/*将已经定义的流水灯显示数据送到将已经定义的流水灯显示数据送到P1口口*/EA=1;/*总中断允许总中断允许*/EX0=1;/*允许外部中断允许外部中断0中断中断*/EX1=1/*允许外部中断允许外部中断1中断中断*/IT0=1;/*选择外部中断选择外部中断0为跳沿触发方为跳沿触发方式式*/IT1=1;/*选择外部中断选择外部中断1为跳沿触发方为跳沿触发方式式*54unsigned char play 9=0 xff,054PX0=0;/*外部中断外部中断0为低优先级为低优先级*/PX1=1;/*外部中断外部中断1为高优先级为高优先级*/void int0_isr(void)interrupt 0 using 0 /*外中断外中断0的中断服务函数的中断服务函数*/for(;)P1=0 x0f;/*低低4位位LED灭,高灭,高4位位LED亮亮*/Delay(500);/*延时延时*/P1=0 xf0;/*高高4位位LED灭,低灭,低4位位LED亮亮*/Delay(500);/*延时延时*/void int1_isr(void)interrupt 2 using 1/*外中断外中断1的中断服务函数的中断服务函数*/P1=0;/*8位位LED全亮全亮*/Delay(500);/*延时延时*/P1=0 xff;/*8位位LED全灭全灭*/55PX0=0;/*外部中断0为低优先级*/5555Delay(500);/*延时延时*/本例如果设置外中断本例如果设置外中断1为低优先级,外中断为低优先级,外中断0为高优先级,仍然为高优先级,仍然先按下再松开先按下再松开K1,后按下再松开,后按下再松开K2或者设置两个外中断源或者设置两个外中断源的中断优先级为同级,均不会发生中断嵌套。的中断优先级为同级,均不会发生中断嵌套。5.9.4 多外部中断源系统设计多外部中断源系统设计AT89S51为用户提供两个外部中断请求输入端为用户提供两个外部中断请求输入端INT0*和和INT1*,实际的应用系统中,两个外部中断请求源往往不够用,需对实际的应用系统中,两个外部中断请求源往往不够用,需对外部中断源进行扩充。本节介绍一种利用外部中断和查询相外部中断源进行扩充。本节介绍一种利用外部中断和查询相结合的扩展外部中断源的方法。结合的扩展外部中断源的方法。56Delay(500);/*延时*/5656如如图图5-11所所示示,若若系系统统中中有有5个个外外部部中中断断请请求求源源IR0IR4,它它们们均均为为高高电电平平请请求求有有效效,这这时时可可按按中中断断请请求求的的轻轻重重缓缓急急进进行行排排队队,把把其其中中最最高高级级别别的的中中断断请请求求源源IR0直直接接接接到到AT89S51的的一一个个外外部部中中断断请请求求源源IR0输输入入端端,其其余余的的4个个中中断断请请求求源源IR1IR4按按图图5-11通通过过各各自自的的OC门门(集集电电极极开开路路门门)连连到到AT89S51的的另另一一个个外外中中断断源源输输入入端端,同同时时还还连连到到P1口口的的P1.0P1.3脚脚,供供AT89S51查查询询。各各外外部部中中断断请请求求源源的的中中断断请请求求由由外外设设的的电电路路产产生生。图图5-11电电路路中中,除除了了IR0的的中中断断优优先先权权级级别别最最高高外外,IR1IR4外外部部中中断断源源的的中中断断优优先先权权取取决决于于查查询询顺序,顺序,如图5-11所示,若系统中有5个外部中断请求源IR0IR457图5-11 利用外部中断和查询相结合的多外部中断请求源系统图5-11 利用外部中断和查询相结合的多外部中断请求源系统58这里假设查询顺序为P1.0P1.3,因此,中断优先权由高到低的顺序依次为IR1,IR4。【例例5-5】利用外部中断和查询相结合的方法扩展多个外部中断。参考程序如下:#include sbit P1_0=P10;/*定义位变量*/sbit P1_1=P11;sbit P1_7=P17;void main()/*主函数*/P1=0 xff;/*LED全灭*/EA=1;/*总中断允许*/EX0=1;/*允许外部中断0中断*/EX1=1/*允许外部中断1中断*/IT0=0;/*选择外部中断0为电平触发方式*/IT1=0;/*选择外部中断0为电平触发方式*/这里假设查询顺序为P1.0P1.3,因此,中断优先权由高到59PX0=1;/*外部中断外部中断0为高优先级为高优先级*PX1=0;/*外部中断外部中断1为低优先级为低优先级*/for(;)/*延时等待中断延时等待中断*/;void int0_isr(void)interrupt 0 /*外中断外中断0的中断服务函数的中断服务函数*/P1=0 x0f;/*点亮高点亮高4位位*/void int1_isr(void)interrupt 2 /*外中断外中断1的中断服务函数的中断服务函数*/if(P1_0=0)P1=0(P1&0 xef)/*如果为如果为IR1中断,点亮中断,点亮LED1*/if(P1_1=0)P1=0(P1&0 xdf)/*如果为如果为IR1中断,点亮中断,点亮LED2*/if(P1_2=0)P1=0(P1&0 xbf)/*如果为如果为IR2中断,点亮中断,点亮LED3*/if(P1_3=0)P1=0(P1&0 x7f)/*如果为如果为IR3中断,点亮中断,点亮LED4*/注意,当扩展的外部中断源个数较多时,查询时间稍长。注意,当扩展的外部中断源个数较多时,查询时间稍长。PX0=1;/*外部中断0为高优先级*6
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学培训


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!