收藏 分销(赏)

第12章 MCS-51的定时器-计数器.ppt

上传人:xrp****65 文档编号:13754854 上传时间:2026-04-10 格式:PPT 页数:48 大小:996.50KB 下载积分:10 金币
下载 相关 举报
第12章 MCS-51的定时器-计数器.ppt_第1页
第1页 / 共48页
第12章 MCS-51的定时器-计数器.ppt_第2页
第2页 / 共48页


点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,程序存储器,ROM,8051,CPU,并行接口,串行接口,中断系统,时钟电路,数据存储器,RAM,定时,/,计数器,2,16,T0,T1,P0,P1,P2,P3,内部中断,外部中断,INT0,INT1,T,X,D,R,X,D,第,12,章,MCS-51,的定时器,/,计数器,内容安排,一,.,内部结构及工作原理,二,.,定时器,/,计数器的控制,三,.,工作方式,四,.,初始化,五,.,应用举例,12.1,内部结构及工作原理,MCS-51,内部提供,2,个,16,位可编程的定时器,/,计数器,可编程修改定时或计数的参数,/,方式,不可编程硬件定时,定时,方式,软件定时,可编程硬件定时,分频器,定时器,/,计数器,功能,定时控制,事故记录,特点,:,T/C0,和,T/C1,的内部结构基本相同,它们即可独立工作,也可相互组合工作,T/C0,是一个,16,位,加,1,计数器,也可以拆成两个,8,位的专用寄存器,(,TH0,和,TL0,),独立使用,它们各自占一个端口地址,TH0,8CH,,,TL0,8AH,,,TH1,8DH,,,TL1,8BH,16,位加,1,计数器复位后初始值为,0000H,,,用来存放定时或计数的初值,每来一个计数脉冲,计数器加,1,,加满后(,FFFFH,0000H,),,将产生一个溢出脉冲,使标志位,TF0,置“,1”,,该标志位可产生一个中断请求,也可供,CPU,查询,启动计数后与,CPU,并行工作,T/C0,可工作于定时模式或计数模式,工作方式有四种:方式,03,,由寄存器,TMOD,、,TCON,设定,定时脉冲周期,=,机器周期,定时方式,计数方式,通过,计数器,计数脉冲,的个数,计数脉冲,来源,系统的主时钟,fosc,,经,12,分频后,(,1,个机器周期),,做定时功能,(,C/T=0,),T0,的外部引脚,(,P3.4,),,,做计数功能,(,C/T=1,),T,0,&,&,B,A,&,TR0,:,定时,/,计数器的启动控制位,当,TR0,1,时,启动计数器计数,GATE,:,门控设置位,当,GATE=1,时,,T/C0,(或,T/C1,),工作于门控工作方式,利用此工作方式可测量正方波宽度,被测方波信号由,INT0,引脚输入,T,0,&,&,B,A,&,1.,定时方式,计数固定周期的脉冲,2.,计数方式,外部输入信号是加到,T0,(,P 3.4,)或,T1,(,P3.5,),端。外部输入脉冲信号产生由,1,至,0,的下降沿时,定时器加,1,外部输入信号最高的计数速率是晶振频率的,1/24,T,0,&,&,B,A,&,12.2,定时器,/,计数器的控制,定时器,/,计数器的工作模式及方式,由,SFR,(,TMOD,、,TCON,),控制,方法,:由,软件,将控制字写入,TMOD,、,TCON,,,目的设定,T/C0,和,T/C1,的工作方式和控制功能,定时器,/,计数器的初始化,1.,工作方式寄存器,TMOD,(,89H,),功能,:控制,T/C0,和,T/C1,的工作方式,其中高四位为,T/C1,的方式控制字段,低四位为,T/C0,的方式控制字,格式:,T/C1,T/C0,(,1,),M1,、,M0,:,工作方式选择位,格式:,T/C1,T/C0,注意,:,TMOD,不能位寻址,,只能通过字节传送方式设定,格式:,T/C1,T/C0,T,0,&,&,B,A,(,2,),C/T,:,计数,/,定时工作方式选择位,(,3,),GATE,:,门控设置位,C/T,0,:,定时工作方式,对机器周期计数,C/T,1,:,计数工作方式,对来自,T0,或,T1,引脚的外来脉冲计数,GATE,0,:,禁止门控工作方式,只要,TR0,(,TR1,),=1,,,不管,INT0,(,INT1,),是高电平还是低电平,启动,T/C0,(,T/C0,),GATE,1,:,允许门控工作方式,计数器工作于定时方式,T,0,&,&,B,A,工作于门控工作方式时,提前用指令,TR0/TR1=1,具备了启动定时器的条件,当,INT0/INT1,引脚出现,01,的跳变,自动启动计数器计数,当,INT0/INT1,引脚出现,10,的跳变,自动停止计数器计数,计数值就是被测信号的宽度,2.,控制寄存器,TCON,(,88H,),功能,:,控制定时器的启动、停止以及定时器的溢出和中断情况,注意,:通过,软件,置位,/,复位,TR0/TR1,TCON,(88H),88H,TF1,TR1,TF0,TR0,IE1 IT1 IE0 IT0,89H,8AH,8BH,8CH,8DH,8EH,8FH,0,停止,T/C0,计数,1,启动,T/C0,计数,停止,T/C1,计数,0,启动,T/C1,计数,1,1,计数器已满(,0000H,),当工作于,查询,方式时,由,指令,将该位清,0,当工作于,中断,方式时,,CPU,响应中断时,由,硬件自动,清零,12.3,工作方式,1.,工作,方式,0,&,&,&,A,B,方式,0,是选择,T/C0,(,T/C1,),高,8,位和低,5,位的,13,位计数器方式,16,位计数器,13,位计数器,TH0,TL0,TH0,进位,,,TH0,溢出(回零),TF0,标志进位(,TF0=1,),CPU,申请中断,通过查询,TF0=1,?,判断,TH0,是否回零溢出,两个开关,B,端“控制”信号控制决定是否启动,/,停止计数,C/T,信号控制决定工作方式,C/T=0,,,定时工作方式,C/T=1,,,计数工作方式,B=1,,,启动,B=0,,,停止,&,&,&,A,B,B,端“控制”信号的逻辑表达式,B=TR0,A=,TR0,(,INT0+GATE,),GATE=0,A=1,封锁“或”门,,INT0,引脚输入信号无效,但是否能打开“与”门,B,,,取决于,TR0,状态,即,TR0,控制,T/C0,GATE=1,A=INT0,,当,TR0=1,且,INT0=1,时,,B=1,,,T/C0,开始计数;当,INT0,从,1,变为,0,时,,T/C0,停止计数,利用这一特性可以测量在,INT0,端出现的正脉冲宽度,&,&,&,A,B,注意,:,初值一次性有效,否则从,0,开始,再次计数,需通过软件重新装入初值,最大定时,/,计数值为,2,13,2.,工作,方式,1,是一个,16,位,定时器,/,计数器,方式,1,的结构几乎与方式,0,一样,唯一的,差别,:方式,1,中的,TH1,(,TH0,)和,TL1,(,TL0,),均是,8,位的,构成,16,位计数器,最大定时,/,计数值为,2,16,&,&,&,A,B,(8位),3.,工作,方式,2,T/C0,(,T/C1,),是一个,16,位计数器,被拆成一个,8,位的计数器,TH0,(,TH1,),和一个,8,位计数器,TL0,(,TL1,),,且两者构成可以自动重装载的,8,位,T/C,TH0(TH1),TL0(TL1),CPU,中断,自动装入,FFH00H,编程时,须给,TH0,(,TH1,)和,TL0,(,TL1,),置入,相同值,工作过程,:,注意,:,初值多次有效,硬件自动完成初值赋值,通过软件修改初值,最大定时,/,计数值,为,2,8,(满足)条件,T/C0,启动,TL0,加,1,计数,FFH00H,CPU,中断,TH0,值,TL0,(,8,位),4.,工作,方式,3,0,0,TH0,只用于简单的内部定时功能,,占用,T/C1,的,TR1,和,TF1,位,T/C0,工作于此方式,,TL0,占用了,T/C0,:,C/T,、,GATE,、,TR0,、,TF0,、,T0,、,INT0,引脚,除仅用,8,位寄存器外,功能操作方式,1,完全相同,T/C1,不工作于方式,3,,且只能按非中断的方式工作,常常利用它的定时功能作,串行口波特率发生器,T/C1,设置为方式,3,,则,T/C1,立即停止计数,并保持原有的计数值,T/C1,可设置为方式,02,TR1,及,TF1,已被,T/C0,(,TH0,),占用,计数开关已被接通,此时仅用,T/C1,的,C/T,来切换定时或计数工作方式,就可使,T/C1,工作,计数器(,8,、,13,、,16,位)回零溢出,只能将输出送入串行口或不需要中断的场合,0,0,12.4,初始化,1.,初始化,步骤,T/C,的,初始化,:通过程序设定和控制,T/C,的工作方式和模式,初始化的,步骤,:,确定工作方式,即根据题目要求先给,TMOD,送一个方式控制字,计算计数,/,定时初值,并写入,TH0,、,TL0,或,TH1,、,TL1,中,根据需要,置位,EA,使,CPU,开放中断,同时置位,ET0/ET1,允许,T/C,中断(,IE,),,IP,设定中断优先级,给,TCON,送命令控制字,即置位,TR0/TR1,,,启动,T/C,计数,2.,计数器,初值的计算,计数,/,定时器工作于计数模式时,首先给计数器送初值到,TH0/TL0,、,TH1/TL1,中,计数器,/,定时器是加,1,计数,全“,1”,到全“,0”,溢出,置位,TF0/TF1,中断标志,向,CPU,提出中断请求,设需要计数器计数的个数,为,X,,,计数初值为,C,,,则计算计数初值表达式:,C=M-X,M,(,计数器的模值),=,2,13,(方式,0,),2,16,(方式,1,),2,8,(方式,2,、,3,),3.,定时器,初值的计算,定时模式下,计数器对单片机振荡频率,f,osc,经,12,分频后的机器周期进行加,1,计数,设,X,表示计数个数,,,M,表示模,,C,表示定时初值,,Tcy,表示机器周期,(,Tcy,=12/,f,osc,),,则定时时间,T,的计算公式:,T=X,Tcy,=,(,M-C,),Tcy,C=M T/,Tcy,定时器的,溢出率,:,1/T=,f,osc,/,(,12X,),=,f,osc,/,(,12,(,M-C,),方式,0,:,Tmax,=2,13,1,s=8.192 ms,方式,1,:,Tmax,=2,16,1,s=65.536 ms,方式,2,、,3,:,Tmax,=2,8,1,s=0.256 ms,f,osc,=12MHz,例,12-1,:设单片机主时钟,f,osc,=12MHz,,,定时时间,2ms,,,请编出初始化程序,解,:设置工作方式控制字,(,TMOD,)(,89H,),=0 0 0 0 0 0 0,0,=00H,(,方式,0,),=0 0 0 0 0 0 0,1,=01H,(,方式,1,),初始化程序,MOV TMOD,,,#00H,(,#01H,),;,送控制字,MOV TH0,,,#0C1H,(,#0F8H,),;,送初值高,8,位,MOV TL0,,,#10H,(,#30H,),;,送初值低,8,位,SETB EA,;,开中断,SETB ET0,SETB TR0,;,启动定时器,计算计数器初值:,方式,0,:,Tc,2,13,2ms/1 s=6192=,1830H,方式,1,:,Tc,2,16,2ms/1 s=63536=F830H,12.5,应用举例,1.,方式,0,的应用,例,12-2,:利用,T/C0,方式,0,产生,1ms,定时,在,P1.0,输出周期为,2ms,的方波。设,8031,单片机晶振频率,f,osc,=12MHz,解,:,(,1,)确定,T/C0,的工作方式,要使,P1.0,输出周期为,2ms,的方波,只要使,P1.0,每隔,1ms,取反一次即可,(,2,)送,T/C0,的方式控制字,定时,:(,TMOD,),=0000 0000B=00H,,即,T/C0,方式,0,,只由,TR0,启动,,T/C1,不用,高,4,位取,0,(,3,)计算定时初值,Tcy,=12/,f,osc,=12/(1210,6,)s=1 s,计数个数,:,X=1 ms/1s=1000,定时初值:,C=,(,2,13,X,),=8192,1000=7192 D=,1C18H=,11100000 11000B,TH0,初值为,E0H,,,TL0,初值为,18H,(,4,)编程,方法:,中断,或,查询,两种方式,中断方法,ORG0000H,LJMPMAIN,;,转到主程序,MAIN,ORG,000BH,LJMP TC0S,;,转到,T/C0,的中断服务程序,TC0S,主程序,:,ORG 1000H,MAIN,:,MOV SP,#6FH,MOV TMOD,#00H,;置,T/C0,的方式,0,,定时,MOV TH0,#0E0H,;,送定时初值,MOV TL0,#18H,SETB EA,;,CPU,开中断,SETB ET0,;,T/C0,允许中断,SETB TR0,;,启动,T/C0,定时,HERE,:,SJMP HERE,;,等待中断,中断服务程序,:,ORG1200H,TC0S,:,MOV TH0,#0E0H,;,重新装入计数初值,MOV TL0,#18H,CPL P1.0,;,输出方波,RETI,END,查询方式,程序,:,ORG 0000H,LJMP MAIN,;,转到主程序,MAIN,ORG 1000H,MAIN,:,MOV SP,#6FH,MOV TMOD,#00H,;置,T/C0,的方式,0,,定时,MOV TH0,#0E0H,;,送定时初值,MOV TL0,#18H,SETB TR0,;,启动,T/C0,定时,LOOP,:,JBC TF0,,,DO1,;,查询定时时间到否,SJMP LOOP,DO1,:,MOV TH0,#0E0H,;,重新装入计数初值,MOV TL0,#18H,CPL P1.0,;,输出方波,SJMP LOOP,;,周而复始,END,2.,方式,1,的应用,例,12-3,:例,12-2,也可采用方式,1,定时,只需修改,TMOD,及,TH0,、,TL0,,,其他不变,3.,方式,2,的应用,例,12-4,:利用,T/C1,方式,2,实现以下功能:,当,T1,(,P3.5,),每输入一个负脉冲时,使,P1.0,输出一个,500s,的同步脉冲,如图所示。设,f,osc,=6MHz,T1(P3.5),P1.0,外部计数,初值(,0FFH,),外部计数,初值,(0FFH),定时方式,(500s),定时方式,(500s),解,:(,1,),确定,T/C1,的工作方式,对,T1,(,P3.5,),输入的负脉冲采用方式,2,计数,而后,P1.0,输出,500s,的同步脉冲采用方式,2,定时,。,T/C1,先计数,后定时,分时操作,(,2,),送,T/C1,的方式控制字,计数时:,(,TMOD,),=0110 0000B=60H,定时时:,(,TMOD,),=0010 0000B=20H,(,3,),计算计数初值,计数个数:,X=1,计数初值:,C=256,X=256,1=255=0FFH,(,TH1,),=,(,TL1,),=0FFH,(,4,),计算定时初值,计数个数:,X=T/,Tcy,=500s/2s=250,计数初值:,C=256,X=256,250=6=06H,(,TH1,),=,(,TL1,),=06H,(,5,)编程(,查询法,):,查询,TF1,且由软件,将,TF1,清零的方法,程序,:,ORG0000H,LJMP START,;,转到主程序,START,ORG 1000H,START,:,MOV SP,#6FH,MOV TMOD,#60H,;置,T/C1,的方式,2,,外部计数,MOV TH1,#0FFH,;,计一个数,MOV TL0,#0FFH,SETB TR1,;,启动,T/C1,计数,LOOP1,:,JBC TF1,,,TIS,;,溢出否,SJMP LOOP1,TIS,:,CLR TR1,MOV TMOD,#20H,;置,T/C1,的方式,2,,定时,MOV TH0,#06H,4H,;,定时,500s,MOV TL0,#06H,4H,CLR P1.0,SETB TR1,;,(,1,个机器周期,2s,),LOOP2,:,JBC TF1,,,TIS1,;,溢出,否(,2,个机器周期,4s,),SJMP LOOP2,TIS1,:,SETB P1.0,;,输出同步脉冲(,1,个机器周期,2s,),CLR TR1,AJMP,START,END,注意,:,考虑到程序中“,”,指令的机器周期数,定时初值应调整为,06H+4H=0AH,,,也就是使,T/C1,少计,4,个机器周期,以确保,P1.0,输出的负脉冲宽度为,500s,4.,方式,3,的应用,解,:,(,1,),确定,T/C0,的工作方式,T/C0,方式,3,中,,TL0,可以计外部脉冲,令,TL0,对,T0,输入的负脉冲计数;,TH0,定时,500s,,,TF1=1,,使,P1.0,输出一个负脉冲为,500s,的同步脉冲,T0(P3.4),P1.0,外部计数,初值(,0FFH,),外部计数,初值,(0FFH),定时方式,(500s),定时方式,(500s),例,12-5,:利用,T/C0,方式,3,实现以下功能:,当,T0,(,P3.4,),每输入一个负脉冲时,使,P1.0,输出一个,500s,的同步脉冲,如图所示。设,f,osc,=6MHz,(,3,),计算计数初值,(,TL0,),计数个数,:,X=1,计数初值:,C=256,X=256,1=255=0FFH,(,TL0,),=0FFH,(,4,),计算定时初值,(,TH0,),计数个数:,X=T/,Tcy,=500s/2s=250,计数初值:,C=256,X=256,250=6=06H,(,TH0,),=06H,(,2,),送,T/C0,的方式控制字,计数时:(,TMOD,),=0000 0111B=07H,由于,TH0,只能定时工作,故方式字中以,TL0,的计数方式定义,主程序,:,ORG 1000H,MAIN,:,MOV SP,#6FH,MOV TMOD,#07H,;置,T/C0,的方式,3,MOV TH0,#06H,;,定时,MOV TL0,#0FFH,;,计一个数,MOV IE,#1000 1010B,;,CPU,开中断,;,T/C0,、,T/C1,允许中断,SETB TR0,;,启动,T/C0,计数,HERE,:,SJMP HERE,;,等待中断,(,5,)编程(,中断法,):,程序,:,ORG 0000H,LJMP MAIN,;,转到主程序,MAIN,ORG,000BH,LJMP T00S,;,转到,TF0,的中断服务程序,TC0S,ORG,001BH,LJMP T01S,;,转到,TF1,的中断服务程序,TC1S,TF1,中断服务程序,:,ORG 1300H,TC1S,:,SETB P1.0,;,输出波形,CLR TR1,;,关闭,T/C1,计数,MOV TH0,#06H,;,重新,赋,TH0,初值,RETI,END,注意,:,程序执行时,TF0,与,TF1,中断不会同时产生(,?,),根据,8051,响应单级中断延误时间(,3,个机器周期)计算,调整,TH0,在中断服务程序中重新装入的初值,?,TF0,中断服务程序,:,ORG 1200H,TC0S,:,CLR P1.0,;,输出波形,SETB TR1,;,启动,T/C1,计数,MOV TL0,#0FFH,;,重新赋,TL0,初值,RETI,例,12-6,:设,8031,时钟频率,f,osc,=12MHz,,,请编出利用定时器,/,计数器,T0,在,P1.0,引脚上输出,2,秒的方波程序,解,:,(,1,)问题分析,MCS-51,系列单片机中有一个,16,位定时,器,/,计数器,(,T/C,)。当,f,osc,=12MHz,时,最大定时为,65.536 ms,;当,f,osc,=6MHz,时,最大定时,为,131.072 ms,;,都达不,到,1 s,时间,怎么实现?,解决方法,:,方法,1,:采用两个,T/C,级联的方法,一个,T/C,定时,回,0,溢出时,使,P1.0,输出一个负脉冲送到另一个,T/C,的外部脉冲输入端用以计数,如,:当,f,osc,=12MHz,时,最大定时时间可以达到,T=,(,65536 65536,),1s=4294967296s=4294967.296 ms=4294.967296 s,。,若再与软件计数相结合,会产生更长时间,方法,2,:,采用一个,T/C,定时与软件计数相结合的方法,思路,:在主程序中设定一个初值为,20,的软件计数器和使,T0,定时,50ms,。,这样,每当,T0,定时到,50ms,时,CPU,就响应它的溢出中断请求,从而进入它的中断服务程序。在中断服务程序中,,CPU,先使用软件计数,减,1,,然后判断它是否为零。若它为零,则表示定时,1,秒钟已到,便可恢复软件计数器初值和改变,P1.0,引脚上电平,然后返回主程序;若它不为零,则表示定时,1,秒未到,也返回主程序,如此重复上述过程,我们便可,在,P1.0,引脚上观察到周期为,2,秒的方波,(,1,),确定,T/C0,的工作方式,要,使,P1.0,输出周期,为,2 s,的方波,只要使,P1.0,每隔,1 s,取反一次即可。方式,1,(,2,),送,T/C0,的方式控制字,定时:,(,TMOD,),=0000 0001B=01H,(,3,),计算定时初值,计数个数:,X=T/,Tcy,=50ms/1s=50000,计数初值,:,C=65536-X=65536-50000=15536=,3CB0H,(,TH0,),=3CH,;(,TL0,),=0B0H,主程序,:,ORG1000H,START:MOV TMOD,#01H,;令,T0,为定时器方式,1,MOV TH0,#3CH,;,装入定时初值,MOV TL0,#0B0H,MOV R2,#00H,;,软件计数器,R2,赋初值,MOV IE,#82H,;开,T0,中断,SETB P1.0,SETB TR0,;,启动,T0,计数,HERE:SJMP HERE,;,等待中断,(,4,),编程,(,中断法,),程序,:,ORG0000H,LJMP 1000H,ORG 000BH,LJMP BRT0,中断服务程序,:,ORG 0100H,BRT0:INC R2,CJNZ R2,#14H,,,NEXT,;,若未到,1,秒钟,则,NEXT,CPL P1.0,;,若已到,1,秒,则改变,P1.0,电平,MOV R2,#00H,;,恢复,R2,初值,NEXT:MOV TH0,#3CH,;,重装定时器初值,MOV TL0,#0B0H,RETI,END,方法,1,:自己完成!,作业,MCS-51,单片机内部有几个定时器,/,计数器?各是几位定时器,/,计数器?计数脉冲的来源有哪些?,定时器,/,计数器用作定时器时,定时时间与哪些因素有关?定时器,/,计数器用作计数时,对输入信号频率有何限制?,MCS-51,单片机内部一个定时器的定时时间有限,如何计算某种工作方式下的最大定时时间?如何实现两个内部定时器的串行定时,以满足较长定时时间的要求?,MCS-51,系统中,如何通过软、硬件结合的方法,实现内部定时器较长时间的定时?,MCS-51,系统中,以内部定时器,/,计数器,1,(,T/C1,),对外部事件计数。每计数,1000,个脉冲后,,T/C1,转为定时工作方式。定时,10ms,后,又转为计数方式,如此循环不止。假定单片机晶振频率为,6MHz,,,请使用方式,1,编程实现,利用,T/C1,方式,1,产生,1ms,定时,在,P1.0,输出周期为,2ms,的方波。设,8031,单片机晶振频率,f,osc,=12MHz,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 应用文书 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服