1、
单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,*,*,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,*,*,Click to edit Master title style,Click to edit Master text styles,Second level,Thir
2、d level,Fourth level,Fifth level,*,*,Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单片机原理及接口技术第二李全利C的中断系统及定计数器,80C51,中断系统的结构,5,个中断源、,2,个优先级,2025/5/19 周一,2,中断源,5.1.2 80C51,的中断源,外部中断,0,(,
3、INT0,),外部中断,1,(,INT1,),T0,溢出中断(,TF0,),T1,溢出中断(,TF1,),串行口中断(,RI,或,TI,),2025/5/19 周一,3,触发方式设置及中断标志,7,6,5,4,3,2,1,0,TCON,TF1,TR1,TF0,TR0,IE1,IT1,IE0,IT0,字节地址:,88H,电平方式(,ITx=0,),,INTx,引脚低电平时,IEx=1,,响应中断后,IEx,不自动清,0,(,INTx,引脚状态)。,边沿方式(,ITx=1,),,INTx,引脚负跳变时,IEx=1,,响应中断后,IEx,自动清,0,。,外部中断标志,IE1,、,IE0,(用,IEx
4、表示),2025/5/19 周一,4,两种触发方式比较:,电平方式时,,INTx,低电平必须保持到响应时,否则就会漏掉;在中断服务结束前,,INTx,低电平必须撤除,否则中断返回之后将再次产生中断。,例,,8255,的中断请求线在接受读或写操作后即被复位,因此以其去请求电平触发方式的中断比较方便。,边沿方式时,采样到有效下降沿后,在,IEx,中将锁存一个,1,。若,CPU,暂时不能响应,申请标志也不会丢失,直到响应时才清,0,。,例,,ADC0809,的转换结束信号,EOC,为正脉冲,经反相后就可以作为,80C51,的,INTx,信号,。,2025/5/19 周一,5,溢出中断标志,TF1,
5、TF0,(用,TFx,表示),溢出中断请求标志,TFx,,,Tx,启动后就开始由初值进行加,1,计数,直至最高位产生溢出使,TFx=1,向,CPU,请求中断。,CPU,响应中断后,TFx,自动清,0,。,SCON,的中断标志,7,6,5,4,3,2,1,0,SCON,TI,RI,字节地址:,98H,RI,:串口接收中断标志,响应中断时不能自动清除,TI,:串口发送中断标志,响应中断时不能自动清除,2025/5/19 周一,6,5.1.3 80C51,中断的控制,中断允许控制,中断源的开放和屏蔽由,IE,控制(,1,,开放;,0,,禁止),7,6,5,4,3,2,1,0,IE,EA,ES,E
6、T1,EX1,ET0,EX0,字节地址:,A8H,EX0:,外中断,0,允许,ET0:T0,中断允许,EX1:,外中断,1,允许,ET1:,T1,中断允许,ES :,串口中断允许,EA:,CPU,中断允许,2025/5/19 周一,7,中断优先级控制,中断优先级由,IP,控制(,1,,高级;,0,,低级),7,6,5,4,3,2,1,0,IP,PS,PT1,PX1,PT0,PX0,字节地址:,B8H,PX0:,外中断,0,优先级,PT0:T0,中断,优先级,PX1:,外,中断,1,优先级,PT1:,T1,中断,优先级,PS :,串口中断,优先级,同一优先级的自然顺序:,自高至低:,INT0,、
7、TO,、,INT1,、,T1,、串口。,2025/5/19 周一,8,中断优先级遵循的原则,几个中断同时申请,先响应高级的中断,正进行的中断服务,同级或低级中断不能对其中断,但可以被高级中断所中断。,为此,中断系统内设有对应高、低,2,个优先级状态触发器(用户不能寻址)。,状态触发器的复位由中断返回指令,RETI,控制。,2025/5/19 周一,9,5.2,80C51,单片机中断处理过程,5.2.1,中断响应条件和时间,中断响应条件,有中断请求,相应的中断允许位为,1,CPU,开中断(即,EA=1,),遇下面情况之一将不被响应(此间中断条件失效,中断丢失),正在处理同级或高级中断,当前查询
8、周期不是所执行指令的最后一个机器周期,正在执行,RETI,或访问,IE,或,IP,的指令,2025/5/19 周一,10,中断响应时间,中断响应至少需要,3,个完整的机器周期(,3,8,个)!,受阻时要附加,3,5,个机器周期(,无同级或高级中断正进行,),查询周期不是当前指令的最后机器周期,(,如,MUL,,,+3),查询周期恰逢,RETI,类指令,(,且后跟,MUL,指令,+5),2025/5/19 周一,11,5.2.2,中断响应过程,CPU,响应中断过程,将相应优先级状态触发器置,1,(,阻断后来同级或低级中断,),执行硬件,LCALL,指令(,PC,入栈,中断服务程序入口址送,PC,
9、执行中断服务程序,编写中断服务程序注意,中断服务程序入口存放指令,LJMP,或,AJMP,现场保护与现场恢复,2025/5/19 周一,12,5.2.3,中断返回,中断服务程序最后指令必须是,RETI,,其功能:,将断点从堆栈弹送,PC,,,CPU,从原断点继续执行,将相应优先级状态触发器清,0,,恢复原来工作状态,注意,不能用,RET,代替,RETI,中断服务程序中,PUSH,和,POP,必须成对使用,2025/5/19 周一,13,5.2.4,中断程序举例,【,例,5-1】,单外部中断源示例,ORG 0000H,START:LJMP MAIN,ORG 0003H,LJMP INTO,O
10、RG 0030H,MAIN:CLR IT0,;,电平,SETB EA,SETB EX0,MOV DPTR,,,#1000H,主程序:,2025/5/19 周一,14,中断服务程序,:,ORG 0200H,INT0:PUSH PSW,PUSH ACC,CLR P3.0,;由,P3.0,输出,0,NOP,NOP,SETB P3.0,MOV P1,#0FFH,;置,P1,口为输入,MOV A,P1,;输入数据,MOVX DPTR,A,;存入数据存储器,INC DPTR,;修改数据指针,指向下一个单元,POP ACC,;恢复现场,POP PSW,RETI,2025/5/19 周一,15,【,例,5-2
11、多外部中断源示例,中断服务程序,:,ORG 0003H,LJMP INSE0,ORG 0013H,LJMP INSE1,INSE0:PUSH PSW;XI0,中断服务,PUSH ACC,POP ACC,POP PSW,RETI (,转下页,),2025/5/19 周一,16,INSE1:PUSH PSW (,接上页,),PUSH ACC,JB P1.0,DV1,;,P1.0,为,1,,转,XI1,中断服务程序,JB P1.1,DV2,;,P1.1,为,1,,转,XI2,中断服务程序,JB P1.2,DV3,;,P1.2,为,1,,转,XI3,中断服务程序,JB P1.3,DV4,;,P1.
12、3,为,1,,转,XI4,中断服务程序,INRET:POP ACC,POP PSW,RETI,DV1:,;,XI1,中断服务程序,AJMP INRET,DV4:,;,XI4,中断服务程序,AJMP INRET,2025/5/19 周一,17,5.3,80C51,单片机的定时,/,计数器,定时,/,计数器的结构,基本型:,T0,,定时、计数。,T1,,定时、计数、串口波特率发生器。,增强型:增加了,T2,。见,5.3.4,节。,5.3.1,定时,/,计数器的结构和工作原理,TH1,、,TL1,TH0,、,TL0,TCON,TMOD,2025/5/19 周一,18,定时,/,计数器的工作原理,实质
13、是,16,位加,1,计数器,定时器模式时,是对内部机器周期计数。计数值乘以机器周期就是定时时间,计数器模式时,是对外部事件计数。脉冲由,T0,(,P3.4,)或,T1(P3.5),引脚输入。,注意,:(,若,计数值为,N,计数初值为,X),溢出信号使,TF0,或,TF1,置,1,,并发出中断请求,,16,位时有:,N=65536-X,,或,X=65536-N,12MHz,晶振时,计数频率低于,0.5MHz,2025/5/19 周一,19,5.3.2,定时,/,计数器的控制,工作方式寄存器,TMOD,7,6,5,4,3,2,1,0,TMOD,GATE,C/T,M1,M0,GATE,C/T,M1,
14、M0,字节地址:,89H,GATE,:门控位。,GATE,0,时,只要,TRx,为,1,,就可启动计数器工作;,GATA,1,时,定时器的启动还要加上,INTx,引脚为高电平这一条件。,C/T,:模式选择位。清,0,为定时模式,置,1,为计数方式。,M1M0,:工作方式设置位。可设置四种工作方式,(,见下页,)。,2025/5/19 周一,20,M1M0,工作方式,说 明,00,方式,0,13,位定时,/,计数器,01,方式,1,16,位定时,/,计数器,10,方式,2,8,位自动重装定时,/,计数器,11,方式,3,T0,分成两个独立的,8,位定时,/,计数器;,T1,此方式停止计数,注意:
15、TMOD,不能进行位寻址,2025/5/19 周一,21,控制寄存器,TCON,7,6,5,4,3,2,1,0,TCON,TF1,TR1,TF0,TR0,字节地址:,88H,TFx,:,Tx,溢出标志位。响应中断后,TFx,有硬件自动清,0,。用软件设置,TFx,可产生同硬件置,1,或清,0,同样的效果。,TRx,:,Tx,运行控制位。置,1,时开始工作;清,0,时停止工作。,TRx,要由软件置,1,或清,0,(即启动与停止要由软件控制)。,2025/5/19 周一,22,5.3.3,定时,/,计数器的工作方式,T0,有方式,0,、,1,、,2,、,3,;,T1,有方式,0,、,1,、,2,
16、以,T0,为例说明。,方式,0,:,13,位方式,2025/5/19 周一,23,C/T=1,时,则为计数模式,有:,X=2,13,-N=8192-N,C/T=0,时,则为定时模式,有:,X=2,13,-N=8192-N,,,N=,t,/Tcy,【,例,5-3】,若计数个数,N,为,2,,求计数初值。,公式法计算:,X,8192,2=8190=1FFEH,求补法计算:对,0 0000 0000 0010B,取反加,1,为:,1 1111 1111 1110B(1FFEH),初值计算:,公式法,求补法,:,X=,对,N,求补,2025/5/19 周一,24,LJMP MAIN,【例5-5】有一
17、包装流水线,产品每计数24瓶时发出一个包装控制信号。,与门输出1时,控制开关接通,计数开始;,【例5-5】有一包装流水线,产品每计数24瓶时发出一个包装控制信号。,3 80C51中断的控制,中断服务程序最后指令必须是RETI,其功能:,求补法:X=对N求补,使TR0或TR1置位,启动定时/计数器工作。,DVT0:DJNZ R7,NT0,T0外部引脚上出现一个下降沿信号时,TL0计数加1,产生溢出,将TF0置1,向CPU发出中断请求,实现方法:一是采用1个定时器定时一定的间隔(如20ms),然后用软件进行计数;,C/T=0时,则为定时模式,有:,T1,定时、计数、串口波特率发生器。,2 定时/计
18、数器的控制,LJMP MAIN,0为1,转XI1中断服务程序,MOV TH0,#0D8H,POP PSW,门控位作用,当,GATE=0,时,仅由,TR0,控制与门的开启。与门输出,1,时,控制开关接通,计数开始;,当,GATE=1,时,与门的开启由,INT0,和,TR0,共同控制。这种方式可以用来测量,INT0,引脚上正脉冲的宽度。,注意:方式,0,的计数初值高,8,位和低,5,位确定麻烦,,实际应用中常由,16,位的方式,1,取代。,2025/5/19 周一,25,方式,1,:,16,位方式,X=2,16,-N=65536-N,计数范围:,1,65536,计数初值要分成,2,个字节分别送入,
19、TH0,、,TL0,2025/5/19 周一,26,DVT0:CPL P1.,7引脚输出周期为2s的方波。,CPU响应中断后TFx自动清0。,触发方式设置及中断标志,正在执行RETI或访问IE或IP 的指令,串行口中断(RI或TI),LJMP MAIN,NOP,【例5-5】有一包装流水线,产品每计数24瓶时发出一个包装控制信号。,溢出信号使TF0或TF1置1,并发出中断请求,16位时有:,在中断服务结束前,INTx低电平必须撤除,否则中断返回之后将再次产生中断。,SJMP$;等待中断,C/T=0时,则为定时模式,有:,CLR P1.,ORG 0030H,串行口中断(RI或TI),MAIN:MO
20、V TMOD,#01H ;置T0方式1,【,例,5-4】,若要求定时器,T0,工作于方式,1,,定时时间为,1ms,,当晶振为,6 MHz,时,求送入,TH0,和,TL0,的计数初值各为多少?应怎样送入,TH0,和,TL0,?,由于晶振为,6 MHz,,所以机器周期,Tcy,为,2S,,因此:,N=t/Tcy=110,-3,/210,-6,500,X,2,16,-N,65536-500,65036,FE0CH,也可以利用以下,2,条指令完成:,MOV TL0,#(65536-500)MOD 256;,余数为计数初值的低字节,MOV TH0,#(65536-500)/256 ;,商为计数初值的高
21、字节,用传送指令分别将,FEH,送入,TH0,中,,0CH,送入,TL0,中即可。,2025/5/19 周一,27,方式,2,:,8,位自动重装方式,X=2,8,-N=256-N,计数范围:,1,256,特别适合与脉冲信号发生器,2025/5/19 周一,28,方式,3,:,(仅,T0,有此方式,,T1,的方式,3,将停止计数),TL0,进行,8,位定时,/,计数,TH0,进行,8,位定时(,T1,方式,2,时,可出借,TR1,、,TF1,),2025/5/19 周一,29,5.3.4,定时,/,计数器用于外部中断扩展,例:用,T0,扩展一个外部中断源。将,T0,设置为计数器方式,按方式,2,
22、工作,,TH0,、,TL0,的初值均为,0FFH,,,T0,允许中断,,CPU,开放中断。其初始化程序如下:,MOV TMOD,#06H ;,置,T0,为计数器方式,2,MOV TL0,#0FFH ;,置计数初值,MOV TH0,#0FFH,SETB TR0 ;,启动,T0,工作,SETB EA ;CPU,开中断,SETB ET0 ;,允许,T0,中断,T0,外部引脚上出现一个下降沿信号时,,TL0,计数加,1,,产生溢出,将,TF0,置,1,,向,CPU,发出中断请求,2025/5/19 周一,30,5.3.5,定时,/,计数器应用举例,初始化程序应完成:,对,TMOD,赋值,以确定,T0,
23、和,T1,的工作方式;,求初值,并写入,TH0,、,TL0,或,TH1,、,TL1,;,中断方式时,要对,IE,赋值,开放中断;,使,TR0,或,TR1,置位,启动定时,/,计数器工作。,2025/5/19 周一,31,计数应用,【,例,5-5】,有一包装流水线,产品每计数,24,瓶时发出一个包装控制信号。试编写程序完成这一计数任务。用,T0,完成计数,用,P1.0,发出控制信号。,确定方式字:,T0,在计数的方式,2,时:,M1M0=10,,,GATE=0,,,C/T=1,方式控制字为,06H,求计数初值,X:,N=24,X=256-24=232=E8H,应将,E8H,送入,TH0,和,TL
24、0,中,2025/5/19 周一,32,ORG 0000H,LJMP MAIN,ORG 000BH,LJMP DVT0,ORG 0100H,MAIN:MOV TMOD,#06H ;,置,T0,计数方式,2,MOV TH0,#0E8H;,装入计数初值,MOV TL0,#0E8H,SETB ET0 ;T0,开中断,SETB EA ;CPU,开中断,SETB TR0 ;,启动,T0,SJMP$;,等待中断,DVT0:SETB P1.0,NOP,NOP,CLR P1.0,RETI,END,主程序,中断服务程序,2025/5/19 周一,33,定时应用,定时时间较小时(小于,65ms,)。晶振为,12
25、MHz,时,,Tcy,为,1S,。可直接采用方式,1,完成定时任务。,【,例,5-6】,利用定时,/,计数器,T0,的方式,1,,产生,10ms,的定时,并使,P1.0,引脚上输出周期为,20ms,的方波,采用中断方式,设系统的晶振频率为,12 MHz,。,确定方式字:,T0,在定时的方式,1,时:,M1M0=01,,,GATE=0,,,C/T=0,方式控制字为,01H,求计数初值,X:,Tcy,为,1S,N=10ms/1S=10,000,X=65536-10000=D8F0H,应将,D8,送,TH0,F0H,送,TL0,2025/5/19 周一,34,ORG 0000H,LJMP MAIN,
26、ORG 000BH,LJMP DVT0,ORG 0100H,MAIN:MOV TMOD,#01H ;,置,T0,方式,1,MOV TH0,#0D8H;,装入计数初值,MOV TL0,#0F0H,SETB ET0 ;T0,开中断,SETB EA ;CPU,开中断,SETB TR0 ;,启动,T0,SJMP$;,等待中断,DVT0:CPL P1.0,MOV TH0,#0D8H,MOV TL0,#0F0H,RETI,END,主程序,中断服务程序,2025/5/19 周一,35,采用软件查询方式完成的源程序如下:,ORG 0000H,LJMP MAIN ;,跳转到主程序,ORG 0100H ;,主程序
27、MAIN:MOV TMOD,#01H ;,置,T0,工作于方式,1,LOOP:MOV TH0,#0D8H ;,装入计数初值,MOV TL0,#0F0H,SETB TR0 ;,启动定时器,T0,JNB TF0,$;TF0=0,,查询等待,CLR TF0 ;,清,TF0,CPL P1.0 ;P1.0,取反输出,SJMP LOOP,END,2025/5/19 周一,36,定时时间较大时(大于,65ms,)。实现方法:一是采用,1,个定时器定时一定的间隔(如,20ms,),然后用软件进行计数;二是采用,2,个定时器级联,其中一个定时器用来产生周期信号(如,20ms,为周期),然后将该信号送入另一个计
28、数器的外部脉冲输入端进行脉冲计数。,【,例,5-7】,编写程序,实现用定时,/,计数器,T0,定时,使,P1.7,引脚输出周期为,2s,的方波。设系统的晶振频率为,12MHz,。,确定方式字:,T0,在定时的方式,1,时:,M1M0=01,,,GATE=0,,,C/T=0,方式控制字为,01H,求计数初值,X:,Tcy,为,1S,N=20ms/1S=20,000,X=65536-20000=4E20H,应将,4E,送,TH0,20H,送,TL0,采用定时,20ms,,然后再计数,50,次的方法实现,2025/5/19 周一,37,ORG 0000H,LJMP MAIN,ORG 000BH,LJMP DVT0,ORG 0030H,MAIN:MOV TMOD,#01H;,置,T0,方式,1,MOV TH0,#4EH;,装入计数初值,MOV TL0,#20H;,首次计数值,MOV R7,#50,;,计数,50,次,SETB ET0 ;T0,开中断,SETB EA ;CPU,开中断,SETB TR0 ;,启动,T0,SJMP$;,等待中断,DVT0:DJNZ R7,NT0,MOV R7,#50,CPL P1.7,NT0:MOV TH0,#4EH,MOV TL0,#20H,SETB TR0,RETI,END,主程序,中断服务程序,2025/5/19 周一,38,感谢观看,
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4009-655-100 投诉/维权电话:18658249818