资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,中断的基本概念,8,9C51,中断源,中断控制寄存器,中断处理过程,中断优先控制和中断嵌套,中断系统的应用,第5章,89C51,的中断系统,5.1 中断的概念,CPU,正在执行程序时,单片机外部或内部发生的某一,事件,,请 求,CPU,迅速去处理。,CPU,暂时中止当前的工作,转到中断服务处理程序处理所发生的事件。处理完该事件后,再回到原来被中止的地方,继续原来的工作,这称为,中断,。,CPU,处理事件的过程,称为,CPU,的,中断响应过程。,图5-1所示。对事件的整个处理过程,称为,中断处理,(,或中断服务,)。,能够实现中断处理功能的部件称为,中断系统,;产生中断的请求源称为,中断请求源,。,中断源向,CPU,提出的处理请求,称为,中断请求,(或中断申请)。,进入中断保护现场中断处理恢复现场 中断返回,为什么要设置中断?,提高,CPU,工作效率,具有实时处理功能,具有故障处理功能,实现分时操作,中断功能强弱是计算机性能优劣的重要标志,中断源,中断申请,开放中断,保护现场,中断服务,恢复现场,中断返回,中断涉及的几个环节,5.2,89C51,中断系统的结构,有5个中断请求源,两个中断优先级,可两级嵌套。,中断系统结构示意图,如,图,5-2,所示。,图5-,2,P22,表,2-3,P19,图,2-3,INT0,:,外部中断0,,中断请求信号由,P3.2,输入。,INT1,:,外部中断1,,中断请求信号由,P3.3,输入。,T0,:,定时/计数器0溢出中断,,对外部脉冲计数由,P3.4,输入。,T1,:,定时/计数器1溢出中断,,对外部脉冲计数由,P3.5,输入。,串行中断,:包括,串行接收中断,RI,和,串行发送中断,TI,。,中断源是指能发出中断请求,引起中断的装置或事件。,8,9C51,单片机的中断源共有5个,其中2个为外部中断源,3个为内部中断源:,5.3 中断请求源,中断请求:定时和外中断控制寄存器,TCON,;,串行控制寄存器,SCON,;,中断允许控制寄存器,IE,;,中断优先级控制寄存器,IP,。,中断控制寄存器,8,9C51,单片机中涉及中断控制的有,3个方面,4,个特殊功能寄存器,:,INT0,、,INT1,、,T0、T1,中断请求标志放在,TCON,中,串行中断请求标志放在,SCON,中。,中断请求控制寄存器,字节地址为88,H,TCON,D7,D6,D5,D4,D3,D2,D1,D0,位名称,TF1,TF0,IE1,IT1,IE0,IT0,位地址,8,FH,8,EH,8,DH,8,CH,8,BH,8,AH,89,H,88,H,功能,T1,中断请,求标志,T0,中断请求标志,中断请求标志,触发,方式,中断请求标志,触发,方式,TCON,的结构、位名称、位地址和功能如下:,TCON,位功能:,TF1,T1,溢出中断请求标志,T1,计数溢出后,,TF1=1,TF0,T0,溢出中断请求标志,T0,计数溢出后,,TF0=1,TF0/TF1:,定时器溢出中断申请标志位:,=0:定时器未溢出;,=1:定时器溢出申请中断,进中断后,自动清零。,IE1,外中断中断请求标志,当,P3.3,引脚信号有效时,,IE1=1,IE0,外中断中断请求标志,当,P3.2,引脚信号有效时,,IE0=1,IE0/IE1:,外部中断申请标志位:,=0:没有外部中断申请;,=1:有外部中断申请。,CPU,响应中断,IT1,外中断触发方式控制位,IT1=1,,边沿触发方式,即,P3.3,出现,下,跳边,脉冲有效;,IT1=0,,电平触发方式。,IT0,外中断触发方式控制位,其意义和功能与,IT1,相似。,IT0/IT1:,外部中断请求的触发方式选择位:,=0:在,INT0/INT1,端申请中断的信号低电平有效;,=1:在,INT0/INT1,端申请中断的信号负跳变有效.,当,89C51,复位后,,,TCON,被清0,则,CPU,关中断,,所有中断请求被禁止。,脉冲触发方式,串行控制寄存器,SCON,字节地址为98,H,。串行口的,发送中断,和,接收中断,的中断请求标志,TI,和,RI,,,SCON,D7,D6,D5,D4,D3,D2,D1,D0,位名称,TI,RI,位地址,99,H,98,H,功能,串行发送,中断标志,串行接收,中断标志,TI,串行口发送中断请求标志,RI,串行口接收中断请求标志,各标志位的功能:,(1),TI,发送中断请求标志位。串口每发送完一帧串行数据后,硬件自动置,“,1,”,TI。,必须在中断服务程序中用,软件,对,TI,标志清,“,0,”,。,(2),RI,接收中断请求标志位。串口接收完一个数据帧,硬件自动置,“,1,”,RI,标志。,必须在中断服务程序中用,软件,对,RI,标志清,“,0,”,。,80,C51,对中断源的开放或关闭由中断允许控制寄存器,IE,控制。,字节地址,A8H,,,可位寻址,IE,的结构、位名称和位地址如下:,5.4 中断控制,5.4.1,中断允许控制寄存器,IE,IE,D7,D6,D5,D4,D3,D2,D1,D0,位名称,EA,ES,ET1,EX1,ET0,EX0,位地址,AFH,ACH,ABH,AAH,A9H,A8H,中断源,CPU,串行口,T1,T0,EA,CPU,中断允许控制位(总开关),EA=1,CPU,开中;,EA=0,CPU,关中,且屏蔽所有5个中断源。,EX0,外中断,INT0,中断允许控制位,EX0=1,INT0,开中;,EX0=0,INT0,关中。,EX1,外中断,INT1,中断允许控制位,EX1=1,INT1,开中;,EX1=0,INT1,关中。,ET0,定时/计数器,T0,中断允许控制位,ET0=1,T0,开中;,ET0=0,T0,关中。,ET1,定时/计数器,T1,中断允许控制位,ET1=1,T1,开中;,ET1=0,T1,关中。,ES,串行口中断(包括串发、串收)允许控制位,ES=1,,串行口开中;,ES=0,,串行口关中。,说明:,8,9C51,对中断实行,两级,控制,,总控制位是,EA,,,每一中断源还有各自的控制位。,首先,要,EA=1,,其次,还要自身的控制位置,“,1,”,。,例如:,要使,INT0,开中(其余关中),可执行下列指令:,MOV IE,#1000000lB;,或者:,SETB EA ;,SETB EX0 ;,IE,D7,D6,D5,D4,D3,D2,D1,D0,位名称,EA,ES,ET1,EX1,ET0,EX0,位地址,AFH,ACH,ABH,AAH,A9H,A8H,中断源,CPU,串行口,T1,T0,中断允许控制寄存器,IE,改变,IE,的内容,可由位操作指令来实现,即:,SETB bit;,CLR bit。,例5-1,若允许片内2个定时器/计数器中断,禁止其它中断源的中断请求。编写设置,IE,的相应程序段,(1)用位操作指令来编写如下程序段,:,CLR ES,;禁止串行口中断,CLR EX1 ;,禁止外部中断1中断,CLR EX0;,禁止外部中断0中断,SETB ET0 ;,允许定时器/计数器,T0,中断,SETB ET1 ;,允许定时器/计数器,T1,中断,SETB EA ;CPU,开中断,(2)用字节操作指令来编写,:,MOV IE,#8AH ;,1,000,1,0,1,0B,或者用:,MOV 0A8H,#8AH,;A8H,为,IE,寄存器字节地址,IE,D7,D6,D5,D4,D3,D2,D1,D0,位名称,EA,ES,ET1,EX1,ET0,EX0,位地址,AFH,ACH,ABH,AAH,A9H,A8H,中断源,CPU,串行口,T1,T0,5.4.2,中断优先级控制寄存器,IP,89C51,有5个中断源,划分为2个中断优先级:,高优先级和低优先级,。,8,9C51,中断优先控制的基本原则:,高优先级中断,可以中断,正在响应的低优先级中断,反之则不能。,同优先级中断,不能互相中断,。,同一中断优先级中,若有多个中断源同时请求中断,,CPU,将,先响应,优先权高的中断,,后响应,优先权低的中断。,中断嵌套结构类似于调用子程序嵌套,,不同的是,:,子程序嵌套是在程序中事先按排好的;中断嵌套是,随机,发生的。,子程序嵌套无次序限制,中断嵌套只允许高优先级,“,中断,”,低优先级。,PX0,:INT0,中断优先级控制位。,PX0=1,,,为,高,优先级;,PX0=0,,,为,低,优先级;,PX1,:INT1,中断优先级控制位。控制方法同上。,PT0,:T0,中断优先级控制位。控制方法同上。,PT1,:T1,中断优先级控制位。控制方法同上。,PS,:,串行口中断优先级控制位。控制方法同上。,IP,D7,D6,D5,D4,D3,D2,D1,D0,位名称,PS,PT1,PX1,PT0,PX0,位地址,BCH,BBH,BAH,B9H,B8H,中断源,串行口,T1,INT1,T0,INT0,IP,的结构、位名称和位地址如下:,例如:,若要将,INT1、,串行口设置为高优先级,其余中断源设置为低优先级,可执行下列指令:,MOV IP,#00010100B;,需要指出的是,若置5个中断源全部为高优先级,就等于不分优先级。,IE,D7,D6,D5,D4,D3,D2,D1,D0,位名称,PS,PT1,PX1,PT0,PX0,位地址,BCH,BBH,BAH,B9H,B8H,中断源,串行口,T1,INT1,T0,INT0,中断优先级控制寄存器,IP,由软件可改变各中断源的中断优先级。,89C51,的中断系统,有,两个,不可寻址的,“,优先级激活触发器,”,:,一个,用来指示某高优先级的中断正在执行,所有后来的中断均被阻止。,另一个,用来指示某低优先级的中断正在执行,所有同级中断都被阻止,但不阻断高优先级的中断请求。,在同时收到,几个同一优先级的中断请求,时,,优先响应哪一个中断,取决于,内部的查询顺序,。,查询顺序,如,表,5-1,:,表,5-1,中断查询次序,中断源 中断级别,外部中断0最高,T0,溢出中断,外部中断1,T1,溢出中断,串行口中断最低,5.5 响应中断请求的条件,一个中断请求被响应,需满足以下必要条件:,(1),IE,寄存器中的中断总允许位,EA=1,。,(2),该中断源发出中断请求,即该中断源对应的,中,断请求标志为,“,1,”,。,(3)该中断源的,中断允许位=1,,即该中断没有被屏蔽。,(4)无同级或更高级中断正在被服务。,中断响应的主要过程:,首先由硬件自动生成一条长调用指令:,LCALL addr16,接着就由,CPU,执行该指令,将,PC,的内容压入堆栈以保护断点,,再将,中断入口地址装入,PC,。,各中断源服务程序的,入口地址固定,,如,表,5-2,所示:,(P22,表,2-3),表,5-2,中断查询次序,中断源 入口地址,外部中断0 0003,H,定时器/计数器,T0 000BH,外部中断1 0013,H,定时器/计数器,T1001BH,串行口中断0023,H,中断响应是有条件的,遇到,下列三种情况,之一时,中断响应被封锁:,(1),CPU,正在处理同级的或更高优先级的中断,。,(2),所查询的机器周期,不是所当前正在执行指令的最后一个机器周期,。只有在当前指令执行完毕后,才能进行中断响应。,(3),正在执行的指令是,RETI,或是,访问,IE,或,IP,的指令。,需要再去执行完一条指令,才能响应新的中断请求。,如果存在上述三种情况之一,,CPU,将丢弃中断查询结果,不能对中断进行响应。,中断处理过程,中断处理过程大致可分为四步:,中断请求、中断响应、中断服务、中断返回,中断请求,中断源发出中断请求信号,相应的中断请求标志位,(在中断控制寄存器,TCON、SCON,中),置,“,1,”,。,中断响应,CPU,查询(检测)到某中断标志为,“,1,”,,在满足中断响应条件下,响应中断。,中断响应条件,:,该中断已经,“,开中,”,;,CPU,此时没有响应同级或更高级的中断;,当前正处于所执行指令的最后一个机器周期;,正在执行的指令不是,RETI,或者是访向,IE、IP,的指令,否则必须再另外执行一条指令后才能响应。,中断响应操作,CPU,响应中断后,进行下列操作:,保护断点地址;,撤除该中断源的中断请求标志;,关闭同级中断;,将相应中断的入口地址送入,PC;,80C51,五个中断入口地址,:,INT0:0003H;,T0:000BH;,INT1:0013H;,T1:001BH;,串行口:0023,H,执行中断服务程序,中断服务程序应包含以下几部分:,保护现场,执行中断服务程序主体,完成相应操作,恢复现场,保护现场:,在中断服务程序中,通常会涉及到一些特殊功能寄存器,如,Acc,、,PSW,和,DPTR,等,而这些特殊功能寄存器中断前的数据在中断返回后还要用到,若在中断服务程序中被改变,返回主程序后将会出错。因此,要求把这些特殊功能寄存器中断前的数据保存起来,待中断返回时恢复。,中断返回,在中断服务程序最后,必须安排一条中断返回指令,RETI,,当,CPU,执行,RETI,指令后,自动完成下列操作:,恢复断点地址。,开放同级中断,以便允许同级中断源请求中断。,恢复断点地址:,将原来压入堆栈中的,PC,断点地址从堆栈中弹出,送回,PC。,这样,CPU,就返回到原断点处,继续执行被中断的原程序。,初学者容易模糊的是,,中断返回,返回哪里?答案是:从什么地方来,回什么地方去。不是返回到相应中断的入口地址,而是返回到中断断点地址。,5,中断请求的撤除,中断源发出中断请求,相应中断请求标志置,“,1,”,。,CPU,响应中断后,,必须,清除中断请求,“,1,”,标志。否则中断响应返回后,将再次进入该中断,引起死循环出错。,对定时/计数器,T0、T1,中断,外中断,INT0,、,INT1,,若采用,边沿触发,方式,,CPU,响应中断时就用,硬件自动清除,了相应的中断请求标志,TF0、TF1。,对外中断,INT0,、,INT1,,若采用,电平触发方式,需要采取,软硬结合的方法,消除后果。,对串行口中断,用户应在串行中断服务程序中用,软件清除,TI,或,RI。,例:,硬件电路如图所示。当外部设备有中断请求时,中断请求信号经反相,加到锁存器,CP,端,作为,CP,脉冲。由于,D,端接地为0,,Q,端输出低点平,触发,INT0,生中断。,当,CPU,响应中断后,应在该中断服务程序中按排两条指令,:,CLR P1.0,SETB P1.0,从而撤消引起重复中断的,INT0,低电平信号。,因此一般来说,,对外中断,INT0、INTl,,应尽量采用边沿触发方式,以简化硬件电路和软件程序。,5.6 外部中断的响应时间,外部中断的,最短,的响应时间为3个机器周期:,(1)中断请求标志位查询占,1个机器周期,。,(2)子程序调用指令,LCALL,转到相应的中断服务程序入口,需,2个机器周期,。,外部中断响应的,最长,的响应时间为8个机器周期,:,(1),发生在,CPU,进行中断标志查询时,,刚好是开始执行,RETI,或是访问,IE,或,IP,的指令,则需把当前指令执行完再继续执行一条指令后,才能响应中断,当前指令执行完,最长需2个机器周期,。,(,2,),接着再执行一条指令,按最长指令(乘法指令,MUL,和除法指令,DIV),来算,也只有,4个机器周期,。,(,3,),加上,硬件子程序调用,指令,LCALL,的执行,需要,2个机器周期,。,所以,外部中断响应最长时间为8个机器周期。,如果已在处理同级或更高级中断,响应时间无法计算。,在一个单一中断的系统里,,MCS-51,单片机对外部中断请求的响应的时间总是在,38个机器周期,之间。,5.7 外部中断的触发方式选择,(,中断返回,),两种触发方式,:,电平触发,方式和,负,跳沿触发,方式。,5.7.1 电平触发方式,CPU,在每个机器周期采样到的外部中断输入线的电平。,在中断服务程序返回之前,外部中断请求输入必须无效(即变为高电平),,否则,CPU,返回主程序后会再次响应中断。,适于外中断以低电平输入且中断服务程序能清除外部中断请求(即外部中断输入电平又变为高电平)的情况。,5.7.2 边沿触发方式,(负跳变),连续两次采样,一个机器周期采样到外部中断输入为高,下一个机器周期采样为低,则置,“,1,”,中断请求标志,直到,CPU,响应此中断时,该标志才清0。这样不会丢失中断,但,输入的负脉冲宽度至少保持1个机器周期,。,5.8 中断请求的撤消,1,定时器/计数器中断请求,的撤消,中断请求被响应后。硬件会,自动清,TF0,或,TF1,。,2,外部中断请求,的撤消,(1),跳沿,方式外部中断请求的撤消是,自动撤消,的。,(2),电平,方式外部中断请求的撤消,:,除了标志位清,“,0,”,之外,还,需在中断响应后把中断请求信号引脚从低电平强制改变为高电平,,如,图,5-8,所示。,只要,P1.0,端输出一个负脉冲就可以使,D,触发器置,“,1,”,,从而撤消了低电平的中断请求信号。,所需的负脉冲可增加如下两条指令得到:,ORL P1,#01H ;P1.0,为,“,1,”,ANL P1,#0FEH;P1.0,为,“,0,”,ORL P1,,#01H;P1.0,为,“,1,”,电平方式的外部中断请求信号的完全撤消,是通过软硬件相结合,的方法来实现的。,3串行口中断请求的撤消,响应串行口的中断后,,CPU,无法知道是接收中断还是发送中断,,还需测试这两个中断标志位的状态,,以判定是接收操作还是发送操作,然后才能清除。所以,串行口中断请求的撤消,只能用软件清除,CLR TI ;,清,TI,标志位,CLR RI ;,清,RI,标志位,5.9 中断服务程序的设计,1.,中断服务程序设计的任务,基本任务:,(1)设置中断允许控制寄存器,IE。,(2)设置中断优先级寄存器,IP。,(3)对外中断源,是采用电平触发还是跳沿触发。,(4)编写中断服务程序,处理中断请求,。,前,2,条一般放在主程序的初始化程序段中。,例5-3,假设允许外部中断0中断,并设定它为高级中断,其它中断源为低级中断,采用跳沿触发方式。,在主程序中编写如下程序段:,SETB EA ;CPU,开中断,SETB EX0;,允许外中断0产生中断,SETB PX0;,外中断0为高级中断,SETB IT0 ;,外中断0为跳沿触发方式,2,采用中断时的主程序结构,常用的,主程序结构,如下:,ORG 0000H,LJMP MAIN,ORG,中断入口地址,LJMP INT,ORG XXXXH,MAIN:,主 程 序,INT:,中断服务程序,3,中断服务程序的流程,如,图,5-9,所示。,图,5-9,补充:中断系统的应用,中断初始化,设置堆栈指针,SP,定义中断优先级,定义外中断触发方式,开放中断,安排好等待中断或中断发生前主程序应完成的操作内容。,中断服务主程序,中断服务子程序内容要求:,在中断服务入口地址设置一条跳转指令,转移到中断服务程序的实际入口处。,根据需要保护现场。,中断源请求中断服务要求的操作。,恢复现场。与保护现场相对应,注意先进后出、后进先出操作原则。,中断返回,最后一条指令必须是,RETI。,中断初始化,设置堆栈指针,SP,因中断涉及保护断点,PC,地址和保护现场数据,且均要用堆栈实现保护,因此要设置适宜的,堆栈深度,。,深度要求不高且工作寄存器组13不用时,可维持复位时状态:,SP=07H,,深度为24,B(20H2FH,为位寻址区)。,要求有一定深度时,可设置,SP=60H,或50,H,,深度分别为32,B,和48,B。,定义中断优先级,根据中断源的轻重缓急,划分高优先级和低优先级。用,MOV IP,#XXH,或,SETB XX,指令设置。,定义外中断触发方式,一般情况,定义边沿触发方式为宜。若外中断信号无法适用边沿触发方式,必须采用电平触发方式时,应在硬件电路上和中断服务程序中采取撤除中断请求信号的措施。,开放中断,注意开放中断必须同时开放二级控制,即同时置位,EA,和需要开放中断的中断允许控制位。可用,MOV IE,#XXH,指令设置,也可用,SETB EA,和,SETB XX,位操作指令设置。,安排好等待中断或中断发生前主程序应完成的操作内容。,中断服务主程序,中断服务子程序内容要求:,在中断服务入口地址设置一条跳转指令,转移到中断服务程序的实际入口处。,由于80,C51,相邻两个中断入口地址间只有8,B,的空间,,8,B,只能容纳一个有38条指令的极短程序,一般情况中断服务程序均大大超出8,B,长度。因此,必须跳转到其他合适的地址空间。跳转指令可用,SJMP、AJMP,或,LJMP,指令,,SJMP、AJMP,均受跳转范围影响,,建议用,LJMP,指令,,则可将真正的中断服务程序不受限制地安排在64,KB,任何地方。,根据需要保护现场,。,保护现场,不是,中断服务程序的必需部分。,通常是保护,Acc、PSW,和,DPTR,等特殊功能寄存器中的内容。若中断服务程序中不涉及,Acc、PSW,DPTR,,则不需保护,也不需恢复。例如:累加器,A,是最常用的特殊功能寄存器,主程序中不可能不用到,A。,而发生中断又是随机的,可能正好发生在对,A,进行操作、,A,中的数据还有用时进入中断,而在中断服务程序中又涉及到,A,,改变了,A,中的内容,则在进入中断服务程序对,A,操作前应对原,A,中数据进行保护,以便中断返回后恢复,A,中原来数据,需要指出的是,,保护现场数据越少越好,数据保护越多,堆栈负担越重,堆栈深度设置应越深。,中断源请求中断服务要求的操作,。,若是外中断电平触发方式,应有,中断信号撤除,操作。若是串行收发中断,应有对,RI、TI,清0指令。,恢复现场,。与保护现场相对应,注意先进后出、后进先出操作原则。,(6),中断返回,,最后一条指令必须是,RETI。,例:,通过外部中断1,在中断服务中将,B,寄存器里的内容左环移一位。已知:(,B)=01h,要求采用,边沿触发,低优先级,。,此例的实际意义:在,INT1,引脚接一个,按钮开关,到地,每按一下按钮就申请一次中断,中断服务则是:,依次点亮八盏灯中的一盏。,P1.0,P1.7,INT1,300,中断系统应用举例,ORG 0000H,LJMP,MAIN,ORG 0013H ;,中断矢量,LJMP,INT,ORG 0100H,MAIN,:SETB EA ;,开总中断允许,“,开关,”,SETB EX1 ;,开分中断允许,“,开关,”,CLR PX1 ;0,优先级(也可不要此句),SETB IT1 ;,边沿触发,MOV B,#01H;,给,B,寄存器赋初值,HERE,:SJMP,HERE,;,原地等待中断申请,ORG 0200H,INT,:MOV A,B ;,自,B,寄存器中,取数,RL A ;,左环移一次,MOV B,A ;,存回,B,备下次取用,MOV P1,A ;,输出到,P1,口,RETI ;,中断返回,中断服 务程序,【例】,出租车计价器计程方法是车轮每运转一圈产生一个负脉冲,从外中断,INT0(P3.2),引脚输入,行驶里程为轮胎周长,运转圈数,设轮胎周长为2,m,,试实时计算出租车行驶里程(单位米),数据存32,H、31H、30H。,中断系统应用举例,解:编程如下:,ORG0000H,;,复位地址,LJMP STAT,;,转初始化,ORG 0003H,;,中断入口地址,LJMP INT,;,转中断服务程序,ORG 0100H,;,初始化程序首地址,STAT:MOV SP,#60H,;,置堆栈指针,SETB IT0,;,置边沿触发方式,MOV IP,#01H,;,置高优先级,MOV IE,#81H,;,开中,MOV 30H,#0,;,里程计数器清0,MOV 31H,#0,;,MOV 32H,#0,;,LJMP MAIN,;,转主程序,并等待中断,ORG 0200H;,中断服务子程序首地址,INT:PUSH Acc;,保护现场,PUSH PSW;,MOV A,30H;,读低8位计数器,ADD A,#2;,低8位计数器加2,m,MOV 30H,A;,回存,CLR A;,ADDC A,31H;,中8位计数器加进位,MOV 31H,A;,回存,CLR A;,ADDC A,32H;,高8位计数器加进位,MOV 32H,A;,回存,POP PSW;,恢复现场,POP,Acc;,RETI;,中断返回,MAIN,主程序可以处理循环显示等任务。,5.10 多外部中断源系统设计(扩展),两个外部中断请求源往往,不够用,。需对外部中断源进行扩充。本节,介绍一种扩充外部中断源的方法,。,如,图,5-10,所示,若系统中有,5,个外部中断请求源,IR0,IR4,,它们均为高电平请求有效,这时可按中断请求的轻重缓急进行排队,把其中,最高级别的中断请求源,IR0,直接接到,89C51,的一个外部中断请求源,IR0,输入端,其余的,4,个中断请求源,IR1,IR4,按图,5-10,的办法通过各自的,OC,门(集电极开路门)连到,89C51,的另一个外中断源输入端,同时还连到,P1,口的,P1.0,P1.3,脚,供,89C51,查询。,各外部中断请求源的中断请求由外设的硬件电路产生。采用如图,5-10,所示的电路,,5,个外部中断源的中断优先权由高到低的顺序,依次为,IR0,,,IR1,,,,,IR4,。,图,5-10,假设图,5-10,中的,4,个外设中有一个外设提出为高电平有效的中断请求信号,则中断请求通过,4,个集电极开路,OC,门的输出公共点,即引脚的电平就会变低。,究竟是哪个外设提出的中断请求?,还要通过程序,查询,P1.0,P1.3,引脚上的逻辑电平,来确定。,【例】现有5个外中断源,EX1、EX20、EX21、EX22,和,EX23,,高电平时表示请求中断,要求执行相应中断服务程序,试编制程序。,解:,ORG0000H,;,复位地址,LJMP,MAIN,;,转主程序,ORG0003H,;,中断入口地址,LJMP,PINT0,;,转中断服务程序,ORG0013H,;,中断入口地址,LJMP,PINT1,;,转中断服务程序,ORG0100H,;,主程序首地址,MAIN:MOVSP,#60H,;,置堆栈指针,ORLTCON,#05H,;,置,INT0、INT1,为边沿触发方式,SETBPX0,;,置为高优先级,MOVIE,#0FFH,;,全部开中,;主程序内容,ORG 1000H,;,中断服务程序首地址,PINT0:PUSHAcc,;,中断,保护现场,LCALL WORK1,;,调用,EX1,服务子程序,POPAcc,;,恢复现场,RETI,;,中断返回,ORG 2000H,;,中断服务程序首地址,PINT1:CLR EA,;CPU,禁中,PUSH Acc,;,中断保护现场,PUSH DPH,;,PUSH DPL,;,SETB EA,;CPU,开中,JB P1.0,LWK20,;P1.0=1,EX20,请求中断,JB P1.1,LWK21,;P1.1=1,EX21,请求中断,JB P1.2,LWK22,;P1.2=1,EX22,请求中断,LCALL WORK23,;P1.3=1,调用,EX23,服务子程序,LRET:CLR EA,;CPU,禁中,POP DPL,;,恢复现场,POP DPH,;,POP Acc,;,SETB EA,;CPU,开中,RETI,;,中断返回,LWK20,:LCALL WORK20,;P1.0=1,调用,EX20,服务子程序,SJMP LRET,;,转中断返回,LWK21,:LCALL WORK21,;P1.1=1,调用,EX21,服务子程序,SJMP LRET,;,转中断返回,LWK22,:LCALL WORK22,;P1.2=1,调用,EX22,服务子程序,SJMP LRET,;,转中断返回,OVER!,
展开阅读全文