单片机技术及应用-第五章 单片机中断系统_第1页
单片机技术及应用-第五章 单片机中断系统_第2页
单片机技术及应用-第五章 单片机中断系统_第3页
单片机技术及应用-第五章 单片机中断系统_第4页
单片机技术及应用-第五章 单片机中断系统_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机技术与应用实践第5章单片机中断系统5.1中断概述5.2中断系统的结构与控制5.3中断处理过程5.4外部中断源的扩展5.5中断应用举例5.6实践训练单片机技术与应用实践5.1中断概述5.1.1中断的概念什么是中断?我们从一个生活中的例子引入。你正在家中看书,突然铃响了,你在书中做好记号后放下书本,去接,和来的人交谈,然后放下,回来继续看你的书。这就是生活中的“中断〞现象。“某人看书〞就好比执行主程序;“铃响〞就好比中断请求,产生中断信号;“暂停看书〞好比中断响应,要求暂停执行主程序;“书中作记号〞好比保护断点,要求当前PC入栈;“谈话〞好比中断处理,要求执行中断效劳程序;“回来继续看书〞好比中断返回,要求返回主程序。这个例子实际上包含了单片机处理中断的4个步骤:中断请求、中断响应、中断处理和中断返回,如图5-1所示。图5-1中断响应的过程中断的概念:1.中断源生活中很多事件可以引起中断:有人按了门铃,铃响了,你的闹钟响了,你烧的水开了等诸如此类的事件。我们把可以引起中断的事件称为中断源。单片机中也有一些可以引起中断的事件,8051中一共有5个中断源:两个外部中断,两个计数器/定时器中断,一个串行口中断。2.中断的嵌套与优先级处理假设你正在看书,铃响了,同时又有人按门铃,你该先做哪样事呢?如果你正是在等一个很重要的,你一般不会去理会门铃的;反之,如果你正在等一个重要的客人,那么可能就不会去理会。如果不是这两者(即不等,也不是等人上门),你可能会按你通常的习惯去处理。总之,这里存在一个优先级的问题。单片机中也是如此,也有优先级的问题。优先级的问题不仅发生在两个中断同时产生的情况,也发生在一个中断已产生,又有一个中断产生的情况。比方,你正接,有人按门铃的情况,或者你正开门与人交谈,又有响了的情况。这种情况下应该怎么办呢?3.中断的响应过程当有事件产生时,进入中断之前,必须先记住现在看书的页数,或拿一个书签放在当前页的位置,然后去处理不同的事情(因为处理完还要回来继续看书):铃响就要到放的地方去,门铃响就要到门那边去,也就是说,不同的中断要在不同的地点处理,而这个地点通常还是固定的。计算机中也是采用这种方法,5个中断源,每个中断产生后都到一个固定的地方去寻找处理这个中断的程序,当然在去之前首先要保存下面将要执行的指令的地址,以便处理完中断后回到原来的地方继续往下执行程序。具体地说,中断响应可以分为以下几个步骤。(1)保护断点:即保存下一将要执行的指令的地址,就是把该地址送入堆栈。(2)寻找中断入口:根据5个不同的中断源所产生的中断查找5个不同的入口地址。以上工作是由计算机自动完成的,与编程者无关。在这5个入口地址处存放有中断处理程序。(3)执行中断处理程序。(4)中断返回:执行完中断指令后,就从中断处返回到主程序继续执行。5.1.2中断的特点1.分时操作中断可以解决快速的CPU与慢速的外设之间的矛盾,使CPU和外设同时工作。CPU在启动外设工作后继续执行主程序,同时外设也在工作,每当外设做完一件事就发出中断申请,请求CPU中断它正在执行的程序,转去执行中断效劳程序(一般情况是处理输入/输出数据),中断处理完之后,CPU恢复执行主程序,外设也继续工作。这样,CPU可启动多个外设同时工作,大大提高了CPU的效率。2.实时处理在实时控制中,现场的各种参数、信息均随时间和现场的变化而变化。这些外界变量可根据要求随时向CPU发出中断申请,请求CPU及时处理,如中断条件满足,CPU马上就会响应进行相应的处理,从而实现实时处理。3.故障处理针对难以预料的情况或故障,如掉电、存储出错、运算溢出等,可通过中断系统由故障源向CPU发出中断请求,再由CPU转到相应的故障处理程序进行处理。5.2中断系统的结构与控制

5.2.1中断系统的结构图5-2所示是MCS-51单片机的中断系统结构,它由与中断有关的特殊功能存放器、中断入口、顺序查询逻辑电路等组成。图5-2MCS-51单片机的中断系统结构5.2.2中断系统控制1.中断源MCS-51单片机提供5个中断源,其中两个为外部中断源INT0(P3.2)、INT1(P3.3),两个为片内定时器/计数器T0和T1的溢出中断源TF0(TCON.5)、F1(TCON.7),一个串行口发送与接收中断源TI(SCON.1)或RI(SCON.0)。这些中断源分别由TCON与SCON的相应位锁存。定时器/计数器控制存放器TCON是定时器/计数器0和定时器/计数器1(T0、T1)的控制存放器,它同时也用来锁存T0、T1的溢出中断源和外部中断源。如图5-3所示。图5-3TCON存放器IT0:外部中断0触发方式控制位。IT0=0,INT0(P3.2)为低电平触发方式;IT0=1,INT0(P3.2)为负跳变触发方式。IE0:外部中断0标志位。IE0=1,外部中断0向CPU请求中断。IT1:外部中断1触发方式控制位。IE1:外部中断1标志位。TF0:T0中断溢出标志位。T0溢出硬件置1,响应中断后硬件清0(在查询方式下软件清0)。TF1:T1中断溢出标志位,功能同TF0。TR0:T0的启停控制位。TR1:T1的启停控制位。2.中断源的自然优先级与中断效劳程序入口地址MCS-51单片机有5个独立的中断源,它们可以利用专用存放器IP设置不同的优先级。假设都被设置成同一优先级,5个中断源的自然优先级由硬件形成,排列如表5-1所示。表5-1中断自然优先级排序对于MCS-51单片机的5个独立中断源,应有相应的中断效劳程序,这些程序应有固定的存放位置。好比5扇门的锁需要5把钥匙才能翻开一样,搞错了就不可能翻开对应的门。5个独立中断源所对应的向量地址如表5-2所示。表5-2中断源的入口地址3.中断控制1) 中断允许存放器在8051单片机中断系统中,中断的允许或禁止是由8位中断允许存放器IE来控制的。中断允许存放器IE(SFR地址:0A8H)各位的定义如表5-3所示。表5-3中断允许存放器IEEA:总允许位(一级控制)。EA=0时,禁止一切中断;EA=1时,中断开放。ES:串行口中断允许位(二级控制)。ES=1时允许RI、TI引发中断,否那么禁止串口中断。ET1、ET0:定时器T1、T0允许位,ET1=1或ET0=1时,允许TF1或TF0引发中断,否那么禁止相应的定时器中断。EX1、EX0:外部中断1/外部中断0,允许位EX1=1或EX0=1时允许相应的外部中断,否那么禁止相应的外部中断。2)中断的优先级控制存放器中断优先级存放器IP(SFR地址:0B8H)各位的定义如表5-4所示。表5-4中断优先级存放器IPPS:串行口中断优先级设定位。PT1、PT0:定时器T1、T0中断优先级设定位。PX1、PX0:外部中断1、外部中断0的中断优先级设定位。以上各位假设被置1,那么相应的中断将被设置为高优先级中断;假设被置0,那么相应的中断将被设置为低优先级中断。假设将T0、外中断1设为高优先级,其他设为低优先级,求IP的值。IP的前3位没用,可任意取值,设为000,后面根据要求写即可,指令为:MOVIP,#00000110B5.3中断处理过程

5.3.1中断系统的功能1.实现中断响应和中断返回〔中断响应流程图如图5-4所示〕图5-4中断响应流程图

2.实现优先权排队通常,系统中有多个中断源,当有多个中断源同时发出中断请求时,要求计算机能确定哪个中断更紧迫,以便首先响应。为此,计算机给每个中断源规定了优先级别,称为优先权。这样,当多个中断源同时发出中断请求时,优先权高的中断能先被响应,只有优先权高的中断处理结束后才能响应优先权低的中断。计算机按中断源优先权上下逐次响应的过程称优先权排队,这个过程可通过硬件电路来实现,也可通过软件查询来实现。3.实现中断嵌套当CPU响应某一中断时,假设有优先权高的中断源发出中断请求,那么CPU中断正在进行的中断效劳程序,并保存这个程序的断点(类似于子程序嵌套),响应高级中断,高级中断处理结束以后,再继续执行被中断的中断效劳程序,这个过程称为中断嵌套,其示意图如图5-5所示。如果发出新的中断请求的中断源的优先权级别与正在处理的中断源同级或更低时,CPU不会响应这个中断请求,直至正在处理的中断效劳程序执行完以后才可以处理新的中断请求。图5-5中断嵌套流程5.3.2中断处理1.中断响应中断响应是CPU对中断源中断请求的响应,包括保护断点和将程序转向中断效劳程序的入口地址(通常称矢量地址)。CPU并非任何时刻都响应中断请求,而是在中断响应条件满足之后才会响应。CPU响应中断的条件如下。有中断源发出中断请求。中断总允许位EA=1。申请中断的中断源允许。满足以上根本条件后,CPU一般会响应中断,但假设有以下任何一种情况存在,那么中断响应会受到阻断。CPU正在响应同级或高优先级的中断。当前指令未执行完。正在执行RETI中断返回指令或访问专用存放器IE和IP的指令。假设存在上述任何一种情况,中断查询结果即被取消,CPU不响应中断请求而在下一机器周期继续查询;否那么,CPU在下一机器周期响应中断。CPU在每个机器周期的S5P2期间查询每个中断源,并设置相应的标志位,在下一机器周期S6期间按优先级顺序查询每个中断标志,如果查询到某个中断标志为1,那么将在下一个机器周期S1期间按优先级进行中断处理。2.中断响应过程中断响应过程包括保护断点和将程序转向中断效劳程序的入口地址。首先,中断系统通过硬件自动生成长调用指令(LCALL),该指令将自动把断点地址压入堆栈保护(不保护累加器A、程序状态存放器PSW和其他存放器的内容),然后,将对应的中断入口地址装入程序计数器PC(由硬件自动执行),使程序转向该中断入口地址,执行中断效劳程序。MCS-51单片机各中断源的入口地址由硬件事先设定,这在前面已经提过。使用时,通常在这些中断入口地址处存放一条无条件转移指令,使程序跳转到用户安排的中断效劳程序的起始地址。比方,要采用定时器T1中断,其中断入口地址为001BH,中断效劳程序名为CONT,因此指令形式为:ORG001BH;T1中断入口AJMPCONT ;转向中断效劳程序3.中断处理中断处理就是执行中断效劳程序。中断效劳程序从中断入口地址开始执行,到返回指令RETI为止。一般包括两局部内容:一是保护现场;二是完成中断源请求的效劳。通常,主程序和中断效劳程序都会用到累加器A、程序状态存放器PSW及其他一些存放器,当CPU进入中断效劳程序用到上述存放器时,会破坏原来存储在存放器中的内容,一旦中断返回,将会导致主程序混乱,因此,在进入中断效劳程序后,一般要先保护现场,然后执行中断处理程序,在中断返回之前再恢复现场。编写中断效劳程序时还需注意以下几点。(1) 各中断源的中断入口地址之间只相隔8B,容纳不下普通的中断效劳程序,因此,在中断入口地址单元通常存放一条无条件转移指令,可将中断效劳程序转至存储器的其他任何空间。(2) 假设要在执行当前中断程序时禁止其他更高优先级中断,需先用软件关闭CPU中断,或用软件禁止相应高优先级的中断,在中断返回前再开放中断。(3) 在保护和恢复现场时,为了不使现场数据遭到破坏或造成混乱,一般规定此时CPU不再响应新的中断请求。因此,在编写中断效劳程序时,要注意在保护现场前关中断,在保护现场后假设允许高优先级中断,那么应开中断。同样,在恢复现场前也应先关中断,恢复之后再开中断。4.中断返回中断返回是指中断效劳完成后,计算机返回原来断开的位置(即断点),继续执行原来的程序。中断返回由中断返回指令RETI实现。该指令的功能是把断点地址从堆栈中弹出,送回到程序计数器PC,此外,还通知中断系统已完成中断处理,并同时去除优先级状态触发器。特别要注意的是,不能用RET指令代替RETI指令。中断处理流程图如图5-6所示。图5-6中断处理流程图5.中断请求的撤除CPU响应中断请求后即进入中断效劳程序,在中断返回前,应撤除该中断请求,否那么会重复引起中断而导致错误。MCS-51单片机各中断源中断请求撤销的方法各不相同,下面将分别介绍。1)定时器中断请求的撤除对于定时器0或定时器1溢出中断,CPU在响应中断后即由硬件自动去除其中断标志位TF0或TF1,无需采取其他措施。2)串行口中断请求的撤除对于串行口中断,CPU在响应中断后,硬件不能自动去除中断请求标志位TI、RI,必须在中断效劳程序中用软件将其去除。3)外部中断请求的撤除外部中断可分为边沿触发型和电平触发型。对于边沿触发的外部中断0或1,CPU在响应中断后由硬件自动去除其中断标志位IE0或IE1,无需采取其他措施。对于电平触发的外部中断,其中断请求撤除方法较复杂。因为对于电平触发外中断,CPU在响应中断后,硬件不会自动去除其中断请求标志位IE0或IE1,同时,也不能用软件将其去除,所以,在CPU响应中断后,应立即撤除INT0或INT1引脚上的低电平;否那么,就会引起重复中断而导致错误。而CPU又不能控制INT0或INT1引脚的信号,因此,只有通过硬件再配合相应软件才能解决这个问题。图5-7所示是可行方案之一。图5-7撤除外部中断请求的电路6.中断响应时间中断响应时间是指从中断请求标志位置位到CPU开始执行中断效劳程序的第一条指令所持续的时间。CPU并非每时每刻对中断请求都予以响应,另外,不同的中断请求其响应时间也是不同的,因此,中断响应时间形成的过程较为复杂。以外部中断为例,CPU在每个机器周期的S5P2期间检测其输入引脚INT0或INT1端的电平,如果中断请求有效,那么置位中断请求标志位IE0或IE1,然后在下一个机器周期再对这些值进行查询,这就意味着中断请求信号的低电平至少应维持一个机器周期。这时,如果满足中断响应条件,那么CPU响应中断请求,在下一个机器周期执行一条硬件长调用指令LCALL,使程序转入中断矢量入口。该调用指令执行时间是两个机器周期,因此,外部中断响应时间至少需要3个机器周期,这是最短的中断响应时间。如果中断请求不能满足前面所述的3个条件而被阻断,那么中断响应时间将延长。例如,一个同级或更高级的中断正在进行,那么附加的等待时间取决于正在进行的中断效劳程序的,长度。如果正在执行的一条指令还没有进行到最后一个机器周期,那么附加的等待时间为1~3个机器周期(因为一条指令的最长执行时间为4个机器周期)。如果正在执行的指令是RETI指令,那么附加的等待时间在5个机器周期之内(最多用一个机器周期完成当前指令,再加上最多4个机器周期完成下一条指令)。假设系统中只有一个中断源,那么中断响应时间为3~8个机器周期。5.4外部中断源的扩展

5.4.1用定时器作外部中断源MCS-51单片机有两个定时器,具有两个内部中断标志和外部计数引脚,如在某些应用中不被使用,那么它们的中断可作为外部中断请求使用。此时,可将定时器设置成计数方式,计数初值可设为满量程,那么它们的计数输入端T0(P3.4)或T1(P3.5)引脚上发生负跳变时,计数器加1便产生溢出中断。利用此特性,可把T0脚或T1脚作为外部中断请求输入线,而计数器的溢出中断作为外部中断请求标志。【例5-1】将定时器T0扩展为外部中断源。解:将定时器T0设定为方式2(自动恢复计数初值),TH0和TL0的初值均设置为FFH,允许T0中断,CPU开放中断,局部源程序如下:MOV TMOD,#06HMOV TH0,#0FFHMOV TL0,#0FFHSETBTR0SETBET0SETBEA…当连接在T0(P3.4)引脚的外部中断请求输入线发生负跳变时,TL0加1溢出,TF0置1,向CPU发出中断申请,同时,TH0的内容自动送至TL0,使TL0恢复初值。这样,T0引脚每输入一个负跳变,TF0都会置1,向CPU请求中断,此时,T0脚相当于边沿触发的外部中断源输入线。同样,也可将定时器T1扩展为外部中断源。5.4.2中断和查询相结合利用两根外部中断输入线(INT0引脚),每一中断输入线可以通过或非的关系连接多个外部中断源,同时,利用并行输入端口线作为多个中断源的识别线,其电路原理如图5-8所示。图5-8一个外部中断扩展成多个外部中断的原理由图5-8可知,4个外部扩展中断源通过4个OC门电路组成线或后再与INT0(P3.2)相连,4个外部扩展中断源EXINT0~EXINT3中有一个或几个出现高电平那么输出为0,使脚为低电平,从而发出中断请求,因此,这些扩充的外部中断源都是电平触发方式(高电平有效)。CPU执行中断效劳程序时,先依次查询P1口的中断源输入状态,然后转入到相应的中断效劳程序,4个扩展中断源的优先级顺序由软件查询顺序决定,即最先查询的优先级最高,最后查询的优先级最低。中断效劳程序如下:ORG 0003H ;外部中断0入口 AJMP INT_0 ;转向中断效劳程序入口

INT_0:PUSH PSW ;保护现场 PUSH ACC JBP1.0,EXINT0;中断源查询并转相应中断程序 JB P1.1,EXINT1 JB P1.2,EXINT2 JB P1.3,EXINT3EXIT:POPACC ;恢复现场POPPSW RETI

EXINT0: ;EXINT0中断效劳程序 AJMP EXITEXINT1: ;EXINT1中断效劳程序 AJMP EXITEXINT2: ;EXINT2中断效劳程序 AJMP EXITEXINT3: ;EXINT3中断效劳程序 AJMP EXIT同样,外部中断1(INT1)也可作相应的扩展。5.5中断应用举例

中断控制实质上是对4个与中断有关的特殊功能存放器TCON、SCON、IE和IP进行管理和控制,具体实施如下。(1)CPU的开、关中断。(2)具体中断源中断请求的允许和禁止(屏蔽)。(3)各中断源优先级别的控制。(4)外部中断请求触发方式的设定。中断管理和控制程序一般都包含在主程序中,根据需要通过几条指令来完成。中断效劳程序是一种具有特定功能的独立程序段,可根据中断源的具体要求进行效劳。下面通过实例来说明其具体应用。【例5-2】请写出INT1为低电平触发的中断系统初始化程序。解:(1)采用位操作指令。SETB EASETB EX1 ;开INT1中断SETB PX1 ;令INT1为高优先级CLR IT1 ;令INT1为电平触发(2)采用字节型指令。MOV IE,#84H ;开INT1中断MOV IP,#04H ;令INT1为高优先级ANL TCON,#0FBH ;令INT1为电平触发【例5-3】利用外部中断0(P3.2口),使P1.0口接的LED作为中断响应,按钮SB接在P3.2脚上,硬件简图如图5-9所示,运行以下程序,分析功能。解:程序清单如下: ORG 0000H AJMP MAIN ORG 0003H ;外部中断地址入口 AJMP INT_0 ;转到真正的处理程序处 ORG 0030HMAIN:MOVSP,#5FH ;初始化堆栈 MOV P1,#0FFH ;灯全灭 MOV P3,#0FFH ;P3口置高电平 SETB IT0 ;下降沿触发 SETB EA ;开总中断 SETB EX0 ;开外部中断0 AJMP $ ;在本行等待INT_0:PUSHACC ;数据进栈 PUSH PSW CPL P1.0 ;取反 POP PSW ;数据出栈,目的是保护现场 POP ACC RETI ;中断返回 END图5-9外部中断0的简单应用【例5-4】P1口作输出口,正常时控制8只灯(P1口输出低电平时灯被点亮)每隔0.5s全亮全灭一次;按下开关1,8只灯从右向左依次点亮;按下开关2,8只灯从左向右依次点亮。开关1的低电平脉冲信号作为外部中断信号由INT0(P3.2)管脚输入,开关2的低电平信号作为外部中断信号由INT1(P3.3)管脚输入。解:中断允许存放器IE中相应的EA、EX1、EX0位设置为1。外部中断0为低优先级,IP中的PX0位设置为0;外部中断1为高优先级,IP中的PX1位设置为1。外部中断0的中断触发方式设为边沿触发,控制位IT0应设置为1;外部中断1的中断触发方式设为电平触发,控制位IT1应设置为0。程序清单如下:ORG 0000H ;程序入口 LJMP MAIN ;转向主程序 ORG 0003H ;外部中断0的入口地址 LJMP INT_0 ;转向外部中断0中断效劳程序 ORG 0013H ;外部中断1的入口地址 LJMP INT_1 ;转向外部中断1中断效劳程序 ORG 0030H

MAIN:MOVSP,#80H MOV IE,#85H ;允许外部中断0、外部中断1 SETB PX1 ;外部中断1为高优先级 SETB TI0 ;外部中断0为边沿触发 MOV A,#00HLP1:MOV P1,A LCALL DELAY CPL A SJMP LP1 ORG 0100HINT_1:PUSH ACC ;外部中断1中断效劳程序 PUSH PSW SETB RS1 ;选择第2组工作存放器 CLR RS0 MOV R2,#07H MOV A,#7FH ;灯点亮的初始状态NEXT1:MOVP1,A LCALL DELAY RRA DJNZ R2,NEXT1 POP PSW POP ACC RETIINT_0:PUSH ACC ;外部中断0中断效劳程序 PUSH PSW SETB RS1 ;选择第2组工作存放器 CLR RS0 MOV R2,#07H MOV A,#7FH ;灯点亮的初始状态NEXT0:MOVP1,A LCALL DELAY RLA DJNZ R2,NEXT0 POP PSW POP ACC RETIDELAY:MOV R3,#250 ;延时0.5s程序DEL2:MOV R2,#248 NOPDEL1:DJNZ R2,DEL1 DJNZ R3,DEL2 RET END5.6实践训练

任务:工业顺序控制1.实现任务工业顺序控制,由P1.0~1.6控制注塑机的7道工序,现模拟控制7只发光二极管的点亮,低电平有效,设定每道工序时间转换为延时,P3.4为开工启动开关,高电平启动。P3.3为外部故障输入模拟开关,低电平报警,P1.7为报警声音输出,设定6道工序只有1位输出,第七道工序3位有输出。2.任务目标(1)掌握中断的初始化步骤。(2)了解中断的处理过程。(3)了解中断效劳子程序与普通子程序的异同。3.知识点分析(1)中断的入口地址。(2)中断源的产生、中断的控制、优先级的处理、中断的响应和返回。4.实施过程(1)硬件设计P3.4接K1,P3.3接K2(外中断1),P1.0~P1.6分别接发光二极管D1~D7,P1.7接LM386正向输入端,通过LM386功率放大后5脚输入接扬声器,由它发出报警声音。硬件设计如图5-12所示。图5-12工业顺序控制2) 软件设计根据要求,程序设计如下: ORG 0000H LJMP PO10 ORG 0013H ;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论