单片机原理及应用教程(c语言版)第6章 mcs51单片机的定时器计数器

上传人:e****s 文档编号:243498798 上传时间:2024-09-24 格式:PPT 页数:100 大小:802KB
返回 下载 相关 举报
单片机原理及应用教程(c语言版)第6章 mcs51单片机的定时器计数器_第1页
第1页 / 共100页
单片机原理及应用教程(c语言版)第6章 mcs51单片机的定时器计数器_第2页
第2页 / 共100页
单片机原理及应用教程(c语言版)第6章 mcs51单片机的定时器计数器_第3页
第3页 / 共100页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单片机原理及应用教程,(,C,语言版),第,6,章,MCS-51,单片机定时器,/,计数器,主 编:,周国运,中国水利水电出版社,第,6,章,MCS-51,单片机定时器,/,计数器,目 录,6.1,单片机定时器,/,计数器的结构及原理,6.2,定时器,/,计数器,T0,、,T1,6.3,定时器,/,计数器,T2,6.4,定时器,/,计数器应用举例,定时器,/,计数器应用极其广泛。,本章主要讨论,MCS-51,单片机定时器,/,计数器,T0,、,T1,、,T2,的逻辑结构、工作原理、使用方法和应用。,本章为单片机的主要内容,也是学习第七章串行口的基础。,第,6,章,MCS-51,单片机的定时器,/,计数器,6.1,单片机定时器,/,计数器,的结构及原理,主要内容,6.1.1,单片机定时器,/,计数器的结构,6.1.2,单片机定时器,/,计数器的工作原理,6.1.1,单片机定时器,/,计数器的结构,MCS-51,单片机定时器,/,计数器的原理结构图,CPU,中断,溢,出,溢,出,溢,出,定时器,0,定时器,1,定时器,2,TMOD,T,2,CON,T,2,MOD,TCON,TH,0,TL,0,TH,1,TL,1,TH,2,TL,2,RCAP,2,L,RCAP,2,H,模,式,模,式,T,2,(,P,1,.,0,),T,1,(,P,3,.,5,),T2EX(P1.1),T,0,(,P,3,.,4,),模,式,控,制,控,制,控,制,中断,重装,捕获,6.1.1 MCS-51,单片机定时器,/,计数器的结构,MCS-51,主要由如下构成,:,三个,16,位的可编程定时器,/,计数器:定时器,/,计数器,0,、,1,和,2,。,每个定时器有两部分构成:,THx,和,TLx,特殊功能寄存器,TMOD,和,TCON,,主要对,T0,和,T1,进行控制。,特殊功能寄存器,T2MOD,和,T2CON,,主要对,T2,进行控制,,RCAP2H,、,RCAP2L,为,T2,服务。,引脚,、,、,,为计数脉冲输入。,定时器,T0,、,T1,和,T2,有中断功能,计数器溢出或被触发(,T2,),向,CPU,发出中断请求。,6.1.2,单片机定时器,/,计数器的工作原理,定时器,/,计数器,T0,、,T1,、,T2,的内部结构简图如下图所示。,C,/,T=0,中断请求,振荡器,T,L,x,(,8,位,),THx,(,8,位,),Tx,n,分频,TFx,C,/,T=1,控制,TRx,做定时器,做计数器,6.1.2 MCS-51,单片机定时器,/,计数器的工作原理,从上图可以看出:,定时器的实质是一个加,1,计数器,。,C/T =0,,为定时器计数频率:,fosc/12,计数信号由片内振荡电路提供,振荡脉冲,n,分频送给计数器,每个机器周期计数器值增,1,。,C/T =1,,为计数器,计数信号由,Tx,引脚,、,和,P1.0),输入,每输入一有效信号,相应的计数器中的内容进行加,1,计数器的最高计数频率为:,fosc/24,1,),每,1,个输入脉冲的下降沿使计数器计,1,个数,2,),每,1,个机器周期对引脚采样,1,次,当上,1,个机器周期采样为高、本机器周期采样为低为,1,个下降沿。,6.1.2 MCS-51,单片机定时器,/,计数器的工作原理,控制信号,TRx,=1,时,定时器启动,。,当定时器由全,1,加到全,0,时计满溢出,,TFx,=1,,向,CPU,申请中断;同时,定时器从,0,开始继续计数。,6.2,定时器,/,计数器,T0,、,T1,主要内容,6.2.1 T0,、,T1,的特殊功能寄存器,6.2.2 T0,、,T1,的工作模式,6.2.3 T0,、,T1,的使用方法,6.2.1 T0,、,T1,的特殊功能寄存器,1. T0,、,T1,模式寄存器,TMOD,功能:确定定时器的工作模式。,其格式为:,TMOD,(89H),D7,D6,D5,D4,D3,D2,D1,D0,GATE,C/T,M1,M0,GATE,C/T,M1,M0,GATE,外部门控制位。,GATE,1,,使用外部控制门,且,TRx=1,当()为高时启动定时器, ()为,T0,、,T1,运行外部控制引脚。,6.2.1 T0,、,T1,的特殊功能寄存器,GATE,0,,,禁止外部信号控制定时器,/,计数器。,C/T,定时或计数方式选择位,C/T,0,,为定时器;,C/T,1,,为计数器,计数采样:,CPU,在每机器周期的,S5P2,期间,对计数脉冲输入引脚进行采样。,若前一机器周期采样值为,1,,下一机器周期采样值为,0,,则计数器增,1,,,即下降沿计数,。,6.2.1 T0,、,T1,的特殊功能寄存器,M1,、,M0,工作模式选择位。,表,6-1,定时器,/,计数器的工作模式,M1,M0,工作模式,功 能,0,0,模式,0,13,位定时,/,计数,0,1,模式,1,16,位定时,/,计数,1,0,模式,2,8,位初值自动重装定时,/,计数,1,1,模式,3,定时器,0,:,TL0,可,8,位定时或计数,TH0,为,8,位定时器。,定时器,1,:无此方式,6.2.1 T0,、,T1,的特殊功能寄存器,2. T0,、,T1,控制寄存器,TCON,TCON,(88H),D7,D6,D5,D4,D3,D2,D1,D0,TF1,TR1,TF0,TR0,IE1,IT1,IE0,IT0,TF1,、,TF0,:,T1,、,T0,的溢出标志位,计数溢出,,TFx=1,。,中断方式:,自动清零;,查询方式:,软件清零。,6.2.1 T0,、,T1,的特殊功能寄存器,TR1,、,TR0,:,T1,、,T0,启停控制位。,置,1,,启动定时器;,清,0,,关闭定时器。,注意:,GATE=1,,,TRx,与()的配合控制,。,IE1,、,IE0,:,外部中断,1,、,0,请求标志位,IT1,、,IT0,:,外部中断,1,、,0,触发方式选择位,6.2.2 T0,、,T1,的工作模式,MCS-51,的,T0,、,T1,共有,4,种工作模式,,,前三种模式下两个定时器,/,计数器工作原理是相同的,,只有模式,3,下两者才有差别。以下主要以,T0,为例进行介绍,,T1,类似。,模式,0,与模式,1,的区别仅仅是计数器的位数不同,前者是,13,位,后者是,16,位,其它完全相同,现在一般都不使用模式,0,,故不讲。,当设置,M1M0,01,时,选择模式,1,,为,16,位定时器,/,计数器。,模式,1,原理结构,模式,1,原理结构由,4,部分构成(下页图):,信号源运行控制,计数器溢出标志,1,模式,1,6.2.2 T0,、,T1,的工作模式,6.2.2 T0,、,T1,的工作模式,图,6-6 T0,模式,1,原理结构,振荡器,12,分频,TL0,(8,位,),TH0,TF0,+,T0(P3.4),TR0,(P3.2),GATE,C,/,T,=,0,C,/,T,=,1,中断,(8,位,),0,1,运行控制,计数器,溢出中断,信号源,6.2.2 T0,、,T1,的工作模式,信号源,C/T,设为,1,,为计数器,,用引脚脉冲,C/T,设为,0,,为定时器,,用内部脉冲,运行控制,GATE=1,,由外部信号控制运行,此时应该设置,TR0=1,引脚为高电平,,T0,运行,GATE=0,,由内部控制运行,TR0,设置为,1,,,T0,运行,6.2.2 T0,、,T1,的工作模式,计数部件,由,TL0,、,TH0,组成,是一个,16,位的加法计数器,对送来的脉冲进行计数,计数溢出后输出由低变高,设置溢出标志。,溢出标志:,TF0,。,当计数部件溢出后对其置,1,,向,CPU,请求中断。,模式,1,定时时间的计算公式如下:,定时时间,=,计数值,机器周期,=,(,2,16,-,定时初值),振荡周期,12,最大定时时间(初值为,0,时)为:,2,16,振荡周期,12,。,2,模式,2,6.2.2 T0,、,T1,的工作模式,M1 M0,10,时,选择模式,2,,为,8,位定时器,/,计数器,且初值自动重装。,模式,2,原理结构,原理结构如下页图所示,由,4,部分构成:,信号源运行控制,计数器溢出标志,在能够满足计数要求时,尽可能地选择模式,2,。,图,6-7 T0,(,T1,)模式,2,原理结构,8,位初值自动重装,振荡器,12,分频,T,0,(,P,3,.,4,),TR0,TF,0,中,断,GATE,+,C,/,T,=,0,C,/,T,=,1,TL0,(,8,位,),TH0,(,8,位,),P,3,.,2,0,1,运行控制,计数器,溢出标志,信号源,6.2.2 T0,、,T1,的工作模式,M1 M0,11,,选择模式,3,。,逻辑结构如图,6-8,和,6-9,所示:,结构,:,TL0,、,TH0,分为两个独立的,8,位计数器,TL0,:,8,位定时器,/,计数器,使用,T0,所有的资源和控制位,TH0,:,8,位定时器,使用,T1,所有的资源,(,中断向量、中断控制,ET1,、,PT1),和控制位(,TR1,、,TF1,),6.2.2 T0,、,T1,的工作模式,3,模式,3,图,6-8,模式,3,下,T0,的原理结构图,振荡器,12,分频,TR1,振荡器,T0(P3.4),TR0,TF1,GATE,+,C,/,T,=,0,C,/,T,=,1,TL0,(,8,位),TH0,P3.2,中断,中断,TF0,12,分频,(,8,位),6.2.2 T0,、,T1,的工作模式,T0,模式,3,时,T1,的工作模式,T1,可以模式,0,模式,2,工作。,T1,的结构如图,6-9,所示,由于,TF1,及中断矢量被,TH0,占用,所以,T1,仅用作波特率发生器或其它不用中断的地方。,T1,作波特率发生器,其计数溢出直接送至串行口。,设置好工作方式,串行口波特率发生器开始自动运行。,TMOD,中,T1,的,M1M0=11,,,T1,停止工作,因为,T1,没有模式,3,。,6.2.2 T0,、,T1,的工作模式,图,6-9 T0,模式,3,时,T1,的原理结构,串行口,重新装入,C,/,T,=,0,C,/,T,=,1,C,/,T,=,1,C,/,T,=,0,T,1,(,P,3,.,5,),T,1,(,P,3,.,5,),(a)T1,模式,1,振荡器,12,分频,振荡器,12,分频,串行口,TH,1,(,8,位,),TL,1,(,8,位,),TL,1,(,8,位,),TH,1,(,8,位,),(b)T1,模式,2,6.2.2 T0,、,T1,的工作模式,6.2.3 T0,、,T1,的使用方法,T0,、,T1,各有两种功能(定时,/,计数)、,4,种或,3,种工作模式,如何选择其功能和工作模式,是使用,T0,、,T1,编写程序需要首先解决的问题。,1.,选择定时和计数概念,如果需要对单片机外部输入的脉冲进行计量,则选择计数功能,(如统计产品数量、轮子转到周数(每周产生的脉冲数目一定)、液滴的数目等),;,否则选择定时功能,(如定时启动,/,停止机器运转、定时打开,/,关闭阀门、产生方波、产生某种频率的声音等)。,6.2.3 T0,、,T1,的使用方法,2.,选择工作模式,(,1,)计算计数值,N,1,)计数情况,需要计的数,N,往往是给定的,如计,100,个数、,200,个数等。,2,)定时情况,在这种情况下往往给出的是定时的时间,t,根据定时器每个机器周期计,1,个数的规律,则计数值,N,与定时时间,t,、机器周期,T,MC,、晶振频率,f,osc,的关系如下:,t = N,T,MC,、,T,MC,= 12/f,osc,N = t / T,MC,= t,f,osc,/12,(公式,6-1,),6.2.3 T0,、,T1,的使用方法,(,2,)确定工作模式,如果,N256,,则选择模式,1,;否则选择模式,2,,或者选择模式,3,。,首选模式,2,。,3,计数初值,X,的计算,计数初值,X =,最大计数值,-,计数值,N,(,公式,6-2,),计数初值和工作模式有关,即与计数位数有关,:,模式,1,:,16,位计数,,N=65536,(,2,16,),模式,2,:,8,位计数,,N=256,(,2,8,),模式,3,:,8,位计数,,N=256,(,2,8,),6.2.3 T0,、,T1,的使用方法,4,什么情况下选择模式,3,模式,3,是在系统既需要波特率发生器,又需要多个定时器,/,计数器,而且计数值都比较小(,N,256,)的情况下使用。,这时定时器,/,计数器,T1,作为波特率发生器,定时器,/,计数器,T0,分为两个,8,位定时器,或者分成的两个其中一个作,8,位定时器、另一个,8,位计数器使用。,6.2.3 T0,、,T1,的使用方法,5,使用,T0,、,T1,编程的方法步骤, 计算计数值,N,。, 确定工作模式。, 计算定时或计数的初值,X,。, 编写初始化程序:,设置,TMOD,,设置,TLx,和,THx,,(需要时开,T0,、,T1,中断和总中断),设置,TRx,启动运行。, 编写,T0,、,T1,的应用程序。,前,3,项为编写初始化程序的准备,称之为初始化准备。,6.2.3 T0,、,T1,的使用方法,6,在运行中读取,TLx,、,THx,的方法,在,T0,、,T1,运行情况下,,TLx,和,THx,中的值在变化,读的期间有可能进位,读出的数据不正确。,正确的读取方法如下:,do,xh=THx;,xl=TLx;,while(xh!=THx);,程序中的,xl,、,xh,为已经定义过的无符号字符型变量。,6.2.3 T0,、,T1,的使用方法,例,6-1,对,89C52,单片机编程,使用定时器,/,计数器,T0,以模式,1,定时,以,中断方式实现从引脚产生周期为,1000s,的方波。设单片机的振荡频率为,12MHz,。,分析与计算,(,1,)方波产生原理,将,T0,设为定时器,,计算出合适的初值,定时到了之后对引脚取反即可。,(,2,)选择工作模式,计算计数值,N,6.2.3 T0,、,T1,的使用方法,定时时间,t,:,周期为,1000s,的方波要求,t =,周期,/2 = 1000/2 = 500(s),对应计数值:,N = t/,机器周期,= 500/1 = 500,N=500256,,所以选择模式,1,。,模式字:,TMOD=0000 0001B = 0x01,(,3,)计算初值,X,X = 65536 N = 65036 = 0xfe0c,方波周期,T,定时时间,t,6.2.3 T0,、,T1,的使用方法,C,语言程序:,#include /,包含特殊功能寄存器库,sbitP1_0=P10; /,定义位变量,void main( ),TMOD=0x01;,/T0,用模式,1,、定时,TL0=0x0c;,TH0=0xfe;,/,设置定时器的初值,ET0=1;,/,允许,T0,中断,EA=1;,/,允许,CPU,中断,TR0=1;,/,启动定时器,while(1); /,等待中断,6.2.3 T0,、,T1,的使用方法,void time0_int(void,) interrupt 1,/,中断服务程序,TL0=0x0c;,TH0=0xfe;/,定时器重赋初值,取反,输出方波,汇编语言程序,:,ORG0000H,SJMPMAIN,ORG000BH,;T0,中断入口地址,LJMPINT_T0,6.2.3 T0,、,T1,的使用方法,MAIN: ;,主程序,MOV SP,#0DFH,;设置堆栈指针,MOV TMOD,#01H,;,T0,模式,1,定时,MOVTL0,#0CH,;设置定时初值,MOVTH0,#0FEH,SETBET0,;,T0,开中断,SETBEA,;,CPU,开中断,SETBTR0,;启动,T0,SJMP$,;等待,T0,中断,INT_T0,: ;,中断服务程序,MOV TL0,#0CH,MOVTH0,#0FEH,;重装定时初值,CPLP1.0,;取反,RETI,;中断返回,END,6.2.3 T0,、,T1,的使用方法,例,6-2,设单片机的振荡频率为,12MHz,,用,T1,编程实现从输出频率为,2KHz,的方波。,1,、分析与计算,(,1,)选择工作模式,要求输出方波频率为,2KHz,,则周期为,500s,,只需对每,250s,取反一次即可,即定时时间,t,为,250s,。,需要计算计数值,N,计算计数值,N,:,N= t/ T,MC,= t f,osc,/12,=250,12,M/12=250,N=250=1,,,则同时又作波特率发生器,至少,1,个为,1,0,0,0,波特率发生器,(,T2EX,可作外中断),6.3.2 T2,的工作方式,一、自动重装方式,(定时或计数),1,、递增定时、计数,CP/RL2,0,,,DCEN=0,时,自动重装方式。有两种情况引起重装,结构如下页图所示。,(,1,)计数溢出重装,TF2,置,1,,产生溢出中断请求;, 将,RCAP2L,和,RCAP2H,的数装入,TL2,和,TH2,中。,(,2,)外部触发重装,当,EXEN2,1,,并且,T2EX,()有负跳变时,EXF2,置,1,,外部触发中断请求;, 将,RCAP2L,和,RCAP2H,的数装入,TL2,和,TH2,中,RCAPL,RCAPH,TF2,TL,2,TH,2,EXF2,EXEN2,T2,(P1.0),T,2,EX,(,P,1,.,1,),溢出,T,2,中断请求,TR2,振荡器,12,C,/,T,2,=,0,C,/,T,2,=,1,+,+,图,6-12,重装方式原理图,6.3.2 T2,的工作方式,2,、外部控制递减、递增定时或计数,CP/RL2,0,,,DCEN=1,,,T2,由外部引脚,T2EX,() 控制递减、递增定时或计数。,(,1,)外部控制递增定时、计数,条件:,T2EX,()引脚为高电平,计满溢出时:,TF2,置,1,,请求中断;,将,RCAP2L,和,RCAP2H,中的数装入,TL2,和,TH2,中。,决定于,C/T2,6.3.2 T2,的工作方式,递增、递减计数重装控制,递减计数重装值,递增计数重装值,控制递增、递减计数重装,高:递增计数重装,RCAP2L,RCAP2H,TF2,TL2,TH2,EXF2,T2,TR2,振荡器,12,C/T2=0,C/T2=1,0,FFH,0,FFH,中断请求,TEX2,(P1.1),(P1.0),6.3.2 T2,的工作方式,(,2,)外部控制递减定时、计数,条件:,T2EX,()引脚为低电平,计数溢出时:,TF2,置,1,,请求中断;,将,0xffff,装入,TL2,和,TH2,中。,递减计数的溢出:,TL2,和,TH2,与,RCAP2L,和,RCAP2H,的值相等,6.3.2 T2,的工作方式,二、捕获方式,(可定时、计数),当,CP/RL2,l,,选择捕获方式。,有以下两种情况。,T2,捕获方式结构如下页图所示。,1,、捕获定时、计数,(,1,)条件与触发捕获,条件:,EXEN=1,;,触发捕获:,T2EX,()端的信号有负跳变时,(,2,)捕获,将,TL2,和,TH2,的内容装入,RCAP2L,和,RCAP2H,中,(,3,),EXF2,置,1,,产生触发中断请求,6.3.2 T2,的工作方式,2,、一般定时、计数,(,非捕获时不会自动重装,),设置,EXEN=0,计数溢出,TF2,置,1,,产生溢出中断请求,RCAP2L,RCAP2H,TF2,TL2,TH2,EXF2,EXEN2,T2,T2EX,溢出,中断请求,TR2,振荡器,12,C,/,T,2,=,0,C,/,T,2,=,1,+,1,P1.1,P1.0,6.3.2 T2,的工作方式,三、波特率发生器方式,RCLK=1,或,TCLK,1,时,选择波特率发生器方式,。结构如下页图所示。具有两个功能。,1,、功能一,为串行口提供时钟,波特率,=fosc,(32(65536 - (RCAP2H,,,RCAP2L),特点,:,1,)计数满后自动将,RCAP2L,、,RCAP2H,中的值装入,TL2,、,TH2,中;,2,)不产生溢出中断。,6.3.2 T2,的工作方式,波特率,=fosc,(32(65536 - (RCAP2H,,,RCAP2L),T2EX,可以做外部中断源,串口时钟方式原理图,RCAP2H,TL,2,TH,2,T,2,溢出,TR,2,2,C,/,T,2,=,1,C,/,T,2,=,0,串口时钟,振荡器,RCAP2L,EXEN2,T,2,EX,外部信号,EXF2,中断申请,16=,波特率,6.3.2 T2,的工作方式,2,、功能二,外部中断源,条件:,EXEN2=1,;,中断请求输入引脚:,触发方式:,下降沿,中断请求标志:,EXF2,, 出现下降沿,,EXF2,置,1,。,6.3.2 T2,的工作方式,定时器,/,计数器,T2,作为波特率发生器使用时的编程方法:,RCAP2H=0x30;/,设置波特率,RCAP2L=0x38;,TCLK=1;/,选择定时器,2,的溢出脉冲,/,作为串口发送波特率发生器,注意:在波特率发生器工作方式下,在,T2,计数过程中不能再读,/,写,TH2,和,TL2,的内容。,6.3.2 T2,的工作方式,四、可编程时钟输出方式,当,T2OE=1,,且,C/T2=0,时,,T2,工作于,时钟输出方式,。结构如下页图所示。具有两个功能。,1,、功能一,时钟输出,1,)输出引脚:,P1.0,2,)输出方波频率:,f=fosc,(4(65536 - (RCAP2H,,,RCAP2L),(RCAP2H,,,RCAP2L)= 65536 -fosc,f,4,3,)特点:,自动重装初值 计数满后,将,RCAP2L,和,RCAP2H,的值自动装入,TL2,和,TH2,;,不产生溢出中断。,6.3.2 T2,的工作方式,四、可编程时钟输出方式,当,T2OE=1,,且,C/T2=0,时,,T2,工作于,时钟输出方式,。结构如下页图所示。具有两个功能。,2,、功能二,外部中断源,条件:,EXEN2=1,;,中断请求输入引脚:,触发方式:,下降沿,中断请求标志:,EXF2,, 出现下降沿,,EXF2,置,1,。,6.3.2 T2,的工作方式,图,6-15 T2,时钟输出方式下的原理图,EXF,2,EXEN2,T,2,中断,T2EX,P1.1,6.3.2 T2,的工作方式,例,6-3,对单片机编程,使用,T2,时钟输出方式,从输出周期为,1ms,的方波。设单片机的振荡频率为,12MHz,。,(,1,)分析与计算,T2,的时钟输出方式可直接输出方波。,输出方波周期为,1ms,,则频率,f,out,为,1KHz,。,根据公式,6-6,可知,计数初值,x=65536-fosc/ (4fout),=62536,。,6.3.2 T2,的工作方式,(,2,),C,语言程序清单,# include ,void main(),C_T2=0;,/,设置,T2,作定时器使用,CP_RL2=0;,/,设置,T2,初值自动重装,T2MOD=0x02;,/,设置,T2,输出时钟,TL2=62536%256;,/,为,T2,赋初值,TH2=62536/256;,RCAP2L=62536%256;,/,重装寄存器赋初值,RCAP2H=62536/256;,TR2=1;,/,启动,T2,while(1);/CPU,保持运行状态,T2,在工作,6.3.2 T2,的工作方式,(,3,)汇编语言程序清单,T2MOD EQU 0C9H;,定义,T2,模式寄存器,TL2 EQU 0CCH;,定义,T2,计数低,8,位寄存器,TH2 EQU 0CDH,RCAP2L EQU 0CAH;,定义重装低,8,位寄存器,RCAP2H EQU 0CBH,CP_RL2 BIT 0C8H;,定义,T2,捕获,/,重装控制位,C_T2 BIT 0C9H;,定义,T2,计数,/,定时控制位,TR2 BIT 0CAH;,定义,T2,运行控制位,6.3.2 T2,的工作方式,MAIN:,CLR C_T2;,设置,T2,作定时器,CLR CP_RL2;,设置,T2,初值自动重装,MOV T2MOD,#02H;,设置,T2,输出时钟,MOV TL2,#48H;,为定时器赋初值,MOV TH2,#0F4H,MOV RCAP2L,#48H;,重装寄存器赋初值,MOV RCAP2H,#0F4H,SETB TR2;,启动,T2,SJMP $ ; CPU,保持运行状态,T2,在工作,6.3.2 T2,的工作方式,6.4,定时器,/,计数器应用举例,6.4,定时器应用举例,例,6-4,用,89C52,单片机设计一程序,测量脉冲信号的宽度。设单片机晶振频率为,12MHz,。,分析:,如图,6-16,所示,设置,GATE0,位为,1,,在引脚为低电平时设置,TR0=1,,当,GATE,信号为高时自动启动计数,当,GATE,信号变低时自动结束计数,这时设置,TR0=0,,读取计数值便可计算出脉冲宽度,单位为,s,,机器周期为,1s,。,6.4,定时器应用举例,C,语言程序清单:,#include ,sbit P3_2=P32;,unsigned int_test( ),TMOD=0x09;/T0,以模式,1,定时,用外部门,TL0=0;TH0=0;/,设置初值为,0,while(P3_2);/,引脚为高等待变低,TR0=1;/,开,T0,内控开关由外部门控制,while(!P3_2);/,检测脉冲是否来到,while(P3_2);/,检测脉冲是否结束,TR0= 0;/,脉冲已结束,,T0,内控开关,return (TH0*256+TL0);/,返回计数值,6.4,定时器应用举例,汇编语言程序清单:,TEST:MOV TMOD,#09H;,置,T0,模式,1,定时用外部门,MOV TL0,#00H;,设置初值为,0,MOV TH0,#00H,JB P3.2,$ ;,引脚为高等待测量下一个正脉冲,SETB TR0 ;,开,T0,内控开关,由外部控制行,JNBP3.2,$;,检测脉冲是否来到,JBP3.2,$;,检测脉冲是否结束,CLR TR0;,脉冲已结束,关内控开关,MOV R7,TL0;,计数器,TL0,的值送,R7,MOV R6,TH0;,计数器,TH0,的值送,R6,RET,6.4,定时器应用举例,例,6-5,设某单片机系统使用定时器较多,,T1,作串行口的波特率发生器,,T2,作时钟信号输出产生多种较复杂的报警声;,另外需要对产品包装进行计数,每计,120,件使阴极接在引脚的,LED,亮,2s,,,并且发出报警声音响,2s,。,试编写程序,实现对产品的计数和声光报警,不用考虑串行通信和声音的具体产生程序。,设单片机的晶振频率,fosc=6MHz,。,6.4,定时器应用举例,分析:,(,1,)关于定时器及工作模式的选择,T1,、,T2,都已经被使用,仅剩下,T0,,还需要计数和定时,可以考虑把,T0,设置为模式,3,,,TL0,计数,,TH0,定时。,由于计数仅,120,,虽然要求定时,2s,,但可以用多次中断能够满足要求。,6.4,定时器应用举例,(,2,)关于声光报警的实现,当,TL0,计数,120,后产生中断,在中断服务程序中开声、光,开,TH0,运行开始计时。,设置,TR2=1,便有声音信号输出,对输出,0,便使,LED,点亮,。设置,TH0,计数,250,,由于机器周期为,2s,,则,定时,2s,需要中断的次数为,2000000/(2502)=4000,TH0,中断,4000,次后,,设置,TR2=0,便关闭声音信号输出,对输出,1,便使,LED,熄灭,。,TL0,的计数初值为,256-120=136,;,TH0,的定时初值为,256-250=6,。,6.4,定时器应用举例,C,语言程序清单:,# include ,unsigned int num=0;/,定义,TH0,中断次数变量,sbit P3_7=P37;/,定义控制,LED,发光引脚,void main( )/,主函数,TMOD=0x27;/T0,模式,3,计数,,T1,模式,2,定时,TL0=136;/,设置,TL0,初值,计数,TH0=6;/,设置,TH0,初值,定时,ET0=1;/,开,T0,中断,ET1=1;/,开,T1,中断,EA=1;/,开总中断,TR0=1;/,启动,T0,计数,while(1);/,停留于此,保存程序运行状态,6.4,定时器应用举例,void TL0_int(void),interrupt 1,/TL0,(,T0,)中断服务程序,TL0=136;/,定时器重赋初值,P3_7=0;,/,开,LED,TR1=1;,/,启动定时器,TH0,TR2=1;,/,启动,T2,产生声音信号,void TH0_int(void),interrupt 3,/TH0,(,T1,)中断服务程序,TH0=6;/,定时器重赋初值,num+;/,中断次数加,1,If(num3999),P3_7=1;,/,关,LED,TR1=0;,/,关闭,TH0,TR2=0;,/,关声音,num=0;/,中断次数设置为,0, ,6.4,定时器应用举例,例,6-6,对,89C52,单片机的定时器,T0,编程,设计一产生时分秒的时钟。设晶振频率为,12MHz,。,分析:,设置,T0,为定时功能,定时,10ms,产生中断,中断,100,次为,1,秒,秒加,1,,有了秒时间后,按照时钟的时分秒规律,对保存时分秒的变量进行相应的累加,便产生了时分秒时间。,电路设计:,本例用,6,位数码管显示出时间,其电路和模拟运行如图,6-17,所示。图中的排电阻,RESPACK8,为数码管各段的驱动限流电阻,可以设,200,左右,数码管的各位在实际中也需要驱动,如使用,74LS245,,在,Proteus,中模拟可以省略。,6.4,定时器应用举例,数码管显示在第,9,章才讲,在这里并不要求掌握,可以先了解一下,主要是便于在,Proteus,中模拟运行。,选择工作模式、计算初值:,根据定时器,/,计数器使用的方法步骤,初始化准备如下:,这里定时时间,t,为,10ms=10000s,计算计数值,N,:,N= t/T,MC,= tfosc/12=1000012M/12=10000,选择模式,1,,因为,N256,计算初值,X,:,X=216-N=65536-10000=,55536,6.4,定时器应用举例,6.4,定时器应用举例,C,语言程序清单如下,#include ,#define codport P0 /,显示段码输出口,#define sitport P2/,显示位码输出口,unsigned,char code,ledcode= /*,显示,0,9,的代码,*/,0x3f,6,0x5b,0x4f,0x66,0x6d,0x7d,7,0x7f,0x6f;,unsigned char data hou,min,sec,num; /,时分秒中断数,unsigned char data disbuf=0,0,0,0,0,0;,6.4,定时器应用举例,void display(),/,显示函数,unsigned int j;/j,用于循环,unsigned char i,scan;/scan,为扫描码,scan=0x01;,for(i=0;i6;i+),codport=0;/,先清屏,显示错乱,codport=ledcodedisbufi;,/,输出显示数的段码,sitport=scan;/,输出位码,scan=(scan1); /,指向下一个数位,for(j=0;j99), num=0; sec+;/,秒加,1,if(sec59),sec=0; min+; /,分加,1,if(min59), min=0;hou+; /,时加,1,if(hou23)hou=0;, /,把时间变量分离成要显示的各位,disbuf0=hou/10; disbuf1=hou%10;,disbuf2=min/10;disbuf3=min%10;,disbuf4=sec/10;disbuf5=sec%10;,6.4,定时器应用举例,void main()/,主函数,TMOD=0x01;/,设置,T0,以模式,1,定时,TL0=55536%256; /,设置,T0,定时,10ms,初值,TH0=55536/256;,ET0=1;,/,开,T0,中断,EA=1;,/,开总中断,TR0=1;,/,定时器,0,开运行,hou=9;min=25;,/,时间初始化,sec=30;num=0;,while(1),/,循环,并随时处理中断,display();,/,调用数码管进行扫描显示,6.4,定时器应用举例,例,6-7,某,89C52,单片机应用系统的晶振频率为,12MHz,,通过编程实现以下和频率计的功能:,(,1,)从,T1,输入脉冲计数,实现计数器功能;,(,2,)用,T0,定时,1s,,计算脉冲信号的频率,实现频率计的功能。,通过接在引脚的按钮选择计数器和频率计功能。,6.4,定时器应用举例,分析:,用,T0,定时,10ms,,中断,100,次为,1s,。,对计数功能,,每中断一次读一次,T1,的计数值,计数值不累加,计数溢出后再从,0,开始计,则最大数是,65535,。,对频率计功能,,则,1s,读一次,T1,计数值,其值就是频率,理论上最大频率值是,500000,。其值都在数码管上显示出来。,在,Proteus,画的电路图如图,6-18,所示,所截的图为计数器功能,最高位,C,表示计数。,6.4,定时器应用举例,6.4,定时器应用举例,C,语言程序清单,#include ,#define codport P0/,显示段码输出口,#define sitport P2/,显示位码输出口,unsigned,char code,ledcode=/,*,0,9,的显示代码*,/,0x3f,6,0x5b,0x4f,0x66,0x6d,0x7d,7,0x7f,0x6f,0,0x39;,unsigned char disbuf6; /,显示数组,,,0,元素为高位数,unsigned char data int0=0, int1=0;/T0,、,T1,中断次数,unsigned long data freq;/,存放读取的计数值,6.4,定时器应用举例,void display(),/,显示函数,unsigned long data j;/j,用于循环延时,unsigned char data i,scan;/scan,为扫描码,scan=0x01;,for(i=0;i6;i+),codport=0;/,清屏,防止显示混乱,codport=ledcodedisbufi;/,送显示段码,sitport=scan;/,送位码,scan=(scan1); /,指向下一数位,for(j=0;j500;j+);/,延时,3ms,6.4,定时器应用举例,void calculat(),/,将,freq,各
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业管理 > 商业计划


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

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


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