单片机C语言编程(定时器计数器)

上传人:小** 文档编号:243641406 上传时间:2024-09-27 格式:PPT 页数:101 大小:1.07MB
返回 下载 相关 举报
单片机C语言编程(定时器计数器)_第1页
第1页 / 共101页
单片机C语言编程(定时器计数器)_第2页
第2页 / 共101页
单片机C语言编程(定时器计数器)_第3页
第3页 / 共101页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,6,章,MCS-51,单片机定时器,/,计数器,本章,制作:,刘晓霞,第,6,章,MCS-51,单片机定时器,/,计数器,目 录,6.1 MCS-51,定时器,/,计数器的结构及原理,6.2,定时器,T0,、,T1,6.3,定时器,T2,6.4,定时器应用举例,本章主要讨论,MCS-51,单片机定时器,/,计数器的逻辑结构和工作原理。内容主要有,MCS-51,单片机定时器,T0,、,T1,、,T2,的逻辑结构,工作方式的选择和应用。,本章为单片机的主要内容,也是第七章串行口的学习的基础。,第,6,章,MCS-51,单片机的定时器,/,计数器,6.1 MCS-51,单片机定时器,/,计数器的结构及原理,主要内容,6.1.1 MCS-51,单片机定时器的结构,6.1.2 MCS-51,单片机定时器的工作原理,6.1.3,定时器,/,计数器的控制寄存器,6.1.1 MCS-51,单片机定时器的结构,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,特殊功能寄存器,T2MOD,和,T2CON,,主要对,T2,进行控制。,特殊功能寄存器,TMOD,和,TCON,,主要对,T0,和,T1,进行控制。,6.1.1 MCS-51,单片机定时器的结构,引脚,P3.5,、,P3.4,、,P1.0,,输入计数脉冲。,定时器,T0,、,T1,和,T2,是,3,个中断源,可以向,CPU,发出中断请求。,定时器,/,计数器,T2,增加了两个,8,位的寄存器:,RCAP2H,和,RCAP2L,。,特殊功能寄存器之间通过内部总线和控制逻辑电路连接起来。,6.1.2 MCS-51,单片机定时器的工作原理,定时器,/,计数器,T0,、,T1,、,T2,的内部结构简图如下图所示。,C,/,T=0,中断请求,振荡器,T,L,x,(,8,位,),THx,(,8,位,),Tx,12,分频,TFx,C,/,T=1,控制,TRx,6.1.2 MCS-51,单片机定时器,/,计数器的工作原理,从上图可以看出:,定时器的实质是一个加,1,计数器,。,C/T =0,,为定时器方式。,计数信号由片内振荡电路提供,振荡脉冲,12,分频送给计数器,每个机器周期计数器值增,1,。,例如,:如果晶振频率为,12MHz,,则最高计数频率为,0.5MHz,6.1.2 MCS-51,单片机定时器,/,计数器的工作原理,C/T =1,,为计数方式,。,计数信号由,Tx,引脚,(P3.4,、,P3.5,和,P1.0),输入,每输入一有效信号,相应的计数器中的内容进行加,1,。,控制信号,TRx,=1,时,定时器启动,。,当定时器由全,1,加到全,0,时计满溢出,从,0,开始继续计数,,TFx,=1,,向,CPU,申请中断。,6.1.3,定时器,/,计数器的方式和控制寄存器,1,、,T0,、,T1,工作模式寄存器,TMOD,功能:确定定时器的工作模式。,其格式如图,6-3,所示:,TMOD,(89H),D7,D6,D5,D4,D3,D2,D1,D0,GATE,C/T,M1,M0,GATE,C/T,M1,M0,图,6-3,定时器方式寄存器,TMOD,GATE,外部门控制位。,GATE,1,,使用外部控制门。,TRx,=1,,,P3.2,(,P3.3,),=1,时,启动定时器。,6.1.3,定时器,/,计数器的方式和控制寄存器,GATE,0,,,不使用外部门控制计数器,C/T,定时或计数方式选择位,。,C/T,0,时,为定时器,C/T,1,时,为计数器,采样过程:,CPU,在每机器周期,S5P2,期间,输入信号进行采样,。若前一机器周期采样值为,1,,下一机器周期采样值为,0,,则计数器增,1,,随后的机器周期,S3P1,期间,新的计数值装入计数器。,6.1.3,定时器,/,计数器的方式和控制寄存器,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.1.3,定时器,/,计数器的方式和控制寄存器,2,、,T0,、,T1,的控制寄存器,TCON,TCON,(88H),D7,D6,D5,D4,D3,D2,D1,D0,TF1,TR1,TF0,TR0,IE1,IT1,IE0,IT0,图,6-4,定时器的控制寄存器,TF1,、,TF0,:,T1,、,T0,的溢出标志位,计数溢出,,TFx,=1,。,中断方式:,自动清零;,查询方式:,软件清零。,6.1.3,定时器,/,计数器的方式和控制寄存器,TR1,、,TR0,:,T1,、,T0,启停控制位,。,置,1,,启动定时器;,清,0,,关闭定时器。,IE1,、,IE0,:外部中断,1,、,0,请求标志位,IT1,、,IT0,:外部中断,1,、,0,触发方式选择位,注意:,GATE=1,,,TRx,与,P3.2,(,P3.3,) 的配合。,6.2,定时器,T0,、,T1,的工作模式及应用,主要内容,6.2.1,模式,0,的逻辑结构及应用,6.2.2,模式,1,的逻辑结构及应用,6.2.3,模式,2,的逻辑结构及应用,6.2.4,模式,3,的逻辑结构及应用,6.2.1,模式,0,的逻辑结构及应用,M1M0,00,,选择模式,0,。,逻辑结构如,图,6-5,所示。(以,T0,为例),T0,的结构:,13,位定时器,/,计数器。,由,TH0,的,8,位、,TL0,的低,5,位构成,(,高,3,位未用,),工作过程:,TL0,溢出后向,TH0,进位,,TH0,溢出后将,TF0,置位,并向,CPU,申请中断,。,定时时间,=,(,2,13,-,定时初值),机器周期,最大定时时间,:,2,13,机器周期,6.2.1,模式,0,的逻辑结构及应用,C/T=1,,计数方式,。计数脉冲由,P3.4,引脚输入。,C/T=0,时,定时方式,。,图,6-5,模式,0,的逻辑结构图,6.2.2,模式,1,的逻辑结构及应用,M1M0,01,时,选择模式,1,。,逻辑结构如下页图所示。,T0,的结构:,16,位定时器,/,计数器。,TL0,:存放计数初值的低,8,位。,TH0,存放计数初值的高,8,位;,定时时间,=(2,16,-,定时初值,),机器周期,最大定时时间,:,2,16,机器周期,6.2.2,模式,1,的逻辑结构及应用,工作过程:,当,TL0,计满时,向,TH0,进,1,;当,TH0,计满时,溢出使,TF0=1,,向,CPU,申请中断。,MCS-51,单片机之所以设置几乎完全一 样 的方式,0,和方式,1,,是出于与,MCS-48,单片机兼容的。,6.2.3,模式,2,的逻辑结构及应用,M1 M0,10,时,选择模式,2,。逻辑结构如,图,6-7,所示。,T0,的结构,:,TL0,:,8,位的定时器,/,计数器;,TH0,:,8,位预置寄存器,用于保存初值。,工作过程:,当,TL0,计满溢出时,,TF0,置,1,,向,CPU,发出中断请求;同时引起,重装操作,(,TH0,的计数初值送到,TL0,),进行新一轮计数。,6.2.3,模式,2,的逻辑结构及应用,图,6-7,模式,2,的逻辑结构图,振荡器,12,分频,T,0,(,P,3,.,4,),TR,0,TF,0,中断,GATE,+,C,/,T,=,0,C,/,T,=,1,TL,0,(,8,位,),TH,0,(,8,位,),P,3,.,2,6.2.3,模式,2,的逻辑结构及应用,定时时间,=(2,8,-,初值,),机器周期,最大定时时间,=2,8,机器周期,优点:模式,2,能够进行自动重装载。,模式,0,和,1,计数溢出后,计数器为全,0,。循环定时或计数时,需要重新设置初值。,说明:,在模式,2,能够满足计数或定时要求时,尽可能使用模式,2,。,6.2.4,模式,3,的逻辑结构及应用,1,、,T0,模式,3,的结构特点,M1 M0,11,,选择模式,3,。,逻辑结构如图,6-8,和,6-9,所示:,结构,:,TL0,、,TH0,分为两个独立的,8,位计数器,TL0,:,8,位定时器,/,计数器,使用,T0,所有的资源和控制位,TH0,:,8,位定时器,使用,T1,所有的资源,(,中断向量、中断控制,ET1,、,PT1),和控制位(,TR1,、,TF1,),6.2.4,模式,3,的逻辑结构及应用,图,6-8,模式,3,下,T0,的逻辑结构图,6.2.4,模式,3,的逻辑结构及应用,2,、,T0,模式,3,时,T1,的工作模式,T1,可以模式,0,模式,2,工作。,T1,的结构如图,6-9,所示,由于,TF1,及中断矢量被,TH0,占用,所以,T1,仅用作波特率发生器或其它不用中断的地方。,T1,作波特率发生器,其计数溢出直接送至串行口。,设置好工作方式,串行口波特率发生器开始自动运行。,TMOD,中,T1,的,M1M0=11,,,T1,停止工作。,6.2.4,模式,3,的逻辑结构及应用,图,6-9,模式,3,下,,T1,的逻辑结构图,思考:,T0,工作在模式,3,,,T1,怎么进行方式设置?,串行口,重新装入,C,/,T,=,1,C,/,T,=,0,T,1,(,P,3,.,5,),振荡器,12,分频,TL,1,(,8,位,),TH,1,(,8,位,),6.2.4,模式,3,的逻辑结构及应用,1,、定时器,/,计数器工作模式的选择方法,(,1,)首先计算计数值,N,(,2,)确定工作模式,原则是尽可能地选择模式,2,若,N,256,选择模式,2,,否则选择模式,1,(,3,)如果需要增加一个定时器,/,计数器,选择模式,3,。,6.2.4,模式,3,的逻辑结构及应用,2,、定时器,/,计数器初值,X,的计算方法,因为,X + N = 2,8,或,2,16,所以,X = 2,8,或,2,16,-N,(,1,)对定时器,设定时时间为,tN = t/,机器周期,所以,X = 2,8,或,2,16,- t/,机器周期,(,2,)对计数器,X = 2,8,或,2,16,- N,6.2.4,模式,3,的逻辑结构及应用,例,6-1,设单片机的振荡频率为,12MHz,,用定时器,/,计数器,0,的模式,1,编程,在,P1.0,引脚产生一个周期为,1000s,的方波,定时器,T0,采用中断的处理方式。,定时器的分析过程。,工作方式选择,需要产生周期信号时,选择定时方式。定时时间到了对输出端进行周期性的输出即可。,工作模式选择,根据定时时间长短选择工作模式。,首选模式,2,,可以省略重装初值操作。,6.2.4,模式,3,的逻辑结构及应用,定时时间计算:,周期为,1000s,的方波要求定时器的定时时间为,500s,,每次溢出时,将,P1.0,引脚的输出取反,就可以在,P1.0,上产生所需要的方波。,定时初值计算:,振荡频率为,12MHz,,则机器周期为,1s,。 设定时初值为,X,,,(,65536-X,),1s=500s,X=65036=0FE0CH,定时器的初值为:,TH0=0FEH,,,TL0=0CH,6.2.4,模式,3,的逻辑结构及应用,C,语言程序,:,#include ,/,包含特殊功能寄存器库,sbit,P1_0=P10; /,进行位定义,void main( ), TMOD=0x01; /T0,做定时器,模式,1,TL0=0x0c;,TH0=0xfe;/,设置定时器的初值,ET0=1; /,允许,T0,中断,EA=1; /,允许,CPU,中断,TR0=1; /,启动定时器,while(1); /,等待中断,6.2.4,模式,3,的逻辑结构及应用,void time0_int(void) interrupt 1,/,中断服务程序,TL0=0x0c;,TH0=0xfe;/,定时器重赋初值,P1_0=P1_0;/P1.0,取反,输出方波,汇编语言程序,:,ORG0000H,SJMPMAIN,ORG000BH,LJMPTIME0,6.2.4,模式,3,的逻辑结构及应用,MAIN:,MOV TMOD,#01H,;,T0,定时,模式,1,MOVTL0,#0CH,;置定时初值,MOVTH0,#0FEH,SETBET0,;定时器,T0,开中断,SETBEA,;,CPU,开中断,SETBTR0,;启动定时器,T0,SJMP$,;等待定时器溢出,TIME0: ;,中断服务程序,MOV TL0,#0CH,MOVTH0,#0FEH,;重装定时初值,CPLP1.0,;,P1.0,取反,RETI,;中断返回,END,6.2.4,模式,3,的逻辑结构及应用,例,6-2,设单片机的振荡频率为,12MHz,,用定时器,/,计数器,0,编程实现从,P1.0,输出周期为,500s,的方波。,分析:方法同例,6-1,定时时间:,方波周期为,500s,,定时,250s,。,模式选择,:,定时器,0,可以选择模式,0,、,1,和,2,。模式,2,最大的定时时间为,256s,,满足,250s,的定时要求,选择模式,2,。,6.2.4,模式,3,的逻辑结构及应用,(,1,)初值计算,(,256-X,),1s=250s,X=6,;,则,TH0=TL0=6,(,2,)程序:,采用中断处理方式的程序,:,C,语言程序 :,# include /,包含特殊功能寄存器库,sbit,P1_0=P10;,6.2.4,模式,3,的逻辑结构及应用,voidmain( ),TMOD=0x02; /,选择工作模式,TL0=0x06;,TH0=0x06; /,为定时器赋初值,ET0=1; /,允许定时,0,中断,EA=1;,TR0=1;/,启动定时器,0,while(1);/,等待中断,void time0_int(void) interrupt 1,P1_0=P1_0;,6.2.4,模式,3,的逻辑结构及应用,汇编语言程序,:,ORG0000H,LJMPMAIN,ORG000BH,;中断处理程序,CPLP1.0,RETI,ORG 0030H,;主程序,MAIN:,MOV TMOD,,,#02H,MOV TL0,,,#06H,MOV TH0,,,#06H,SETB ET0,;允许定时器,0,中断,SETB EA,;允许,CPU,中断,SETB TR0,;启动定时器,0,SJMP $,;等待中断,END,6.2.4,模式,3,的逻辑结构及应用,采用查询方式处理的程序:,C,语言程序:,# include ,sbit,P1_0=P10;,void main(),TMOD=0x02;,TL0=0x06;,TH0=0x06;,TR0=1;,while (1),while(!TF0) ;/,查询计数溢出,TF0=0;,P1_0=P1_0;,6.2.4,模式,3,的逻辑结构及应用,汇编语言程序,:,MAIN:,MOV TMOD,#02H,;主程序,MOVTL0,#06H,MOVTH0,#06H,SETBTR0,LOOP:,JNBTF0,$,;查询计数溢出,CLRTF0,CPLP1.0,SJMPLOOP,END,6.3,定时器,/,计数器,T2,主要内容,6.3.1,定时器,T2,的特殊寄存器,6.3.2,定时器,T2,的工作方式及结构,6.3.1,定时器,/,计数器,T2,的特殊寄存器,89C52,中的,T2,是一个,16,位的、具有自动重装载和捕获能力的定时器,/,计数器。,T2,的结构,:除,TL2,、,TH2,和控制寄存器,T2CON,及,T2MOD,之外,还增加了捕获寄存器,RCAP2L,(,低字节)和,RCAP2H,(高字节)。,T2,的计数脉冲源有两个:,一个是内部机器周期,另一个是由,T2,(,P1,0,)端输入的外部计数脉冲。,6.3.1,定时器,/,计数器,T2,的特殊功能寄存器,T2,有,4,种工作方式自动重装、捕获和波特率发生器、可编程时钟输出,。,增加了两个引脚,:,T2,(,P1.0,),,T2EX,(,P1.1,)。,1,、定时器,/,计数器,2,的控制寄存器,T2CON,可位寻址和字节寻址。,功能:选择,T2,的工作方式和工作模式。,允许位寻址和字节寻址。其格式如下:,6.3.1,定时器,/,计数器,T2,的特殊功能寄存器,TF2,:,定时器,/,计数器,2,的溢出中断标志位,T2,溢出时置位,申请中断。软件清零。,波特率发生器方式,下,,RCLK,1,或,TCLK,1,时,定时器,溢出不对,TF2,进行置位,。,EXF2,(,T2CON.6,):,定时器,/,计数器,2,外部触发标志位,T2CON,(C8H),D7,D6,D5,D4,D3,D2,D1,D0,TF2,EXF2,RCLK,TCLK,EXEN2,TR2,C/T2,CP/RL2,图,6-10,定时器,T2,的控制寄存器,6.3.1,定时器,/,计数器,T2,的特殊功能寄存器,EXEN2,1,,且,T2EX,引脚上,有负跳变,将触发捕获或重装操作,,EXF2=1,,向,CPU,发出中断请求,。,软件复位。,RCLK,:,串行口接收时钟允许标志位,RCLK=1,时,,,T2,溢出信号分频后做串行口工作在模式,1,和,3,的接收波特率。,RCLK=0,时,,,T1,溢出信号分频信后做串行口接收波特率。,6.3.1,定时器,/,计数器,T2,的特殊功能寄存器,TCLK,:,串行口发送时钟允许标志位,TCLK=1,时,,,T2,溢出信号分频后做串行口工做在模式,1,和,3,的发送波特率。,TCLK=0,时,,,T1,溢出信号分频后做串行口的发送波特率。,6.3.1,定时器,/,计数器,T2,的特殊功能寄存器,EXEN2,(,T2CON,3,),:,定时器,/,计数器,2,外部允许标志位,EXEN2=1,,定时器,/,计数器,2,没有工作在波特率发生器方式,如,T2EX,(,P1.1,)引脚上产生负跳变时,将激活“捕获”或“重装”操作。,EXEN2=0,,,T2EX,引脚上的电平变化对定时器,/,计数器,2,不起作用。,6.3.1,定时器,/,计数器,T2,的特殊功能寄存器,TR2,:,定时器,/,计数器,2,启动控制位,TR2=1,,启动定时器,/,计数器,2,。,TR2=0,,停止定时器,/,计数器,2,。,C/T2,:,T2,的定时器或计数器方式选择位。,C/T2=1,,,T2,为计数器。,对,T2,(,P1.0,),引脚输入脉冲进行计数(,下降沿触发,);当,T2,(,P1.0,),产生负跳变时,计数器增,1,。,6.3.1,定时器,/,计数器,T2,的特殊功能寄存器,C/T2=0,,,T2,做定时器,。,每个机器周期,T2,加,1,。,CP/RL2,:,捕获和重装载方式选择控制位,捕获方式:,CP/RL2=1,,,EXEN2=1,,,T2EX,(,P1.1,)引脚负跳变将触发捕获操作。,重装载方式:,CP/RL2=0,,,EXEN2=1,,,T2EX,引脚有负跳变或,T2,计满溢出时,触发自动重装操作。,6.3.1,定时器,/,计数器,T2,的特殊功能寄存器,RCLK=1,或,TCLK=1,时,,定时器,/,计数器,2,做波特率发生器,。,CP/RL2,标志位不起作用,当,T2,溢出,时强制,自动装载,。,2,、数据寄存器,TH2,、,TL2,8,位的数据寄存器,,组成,16,位定时器,/,计数器。 字节寻址,地址分别为,CDH,和,CCH,。,复位,后,,TH2=00H,TL2=00H,。,3,、捕获寄存器,RCAP2H,和,RCAP2L,6.3.1,定时器,/,计数器,T2,的特殊功能寄存器,RCAP2H,:,高,8,位捕获寄存器,,字节地址为,CBH,。,RCAP2L,:,低,8,位捕获寄存器,,字节地址为,CAH,。,捕获方式,,保存当前捕获的计数值。,重装方式,,保存重装初值。,复位后均为,00H,。,6.3.1,定时器,/,计数器,T2,的特殊功能寄存器,功能:,对定时器的加,1,减,1,计数方式进行设置。,选择是否工作在可编程时钟输出方式。,复位后为,00B,。,T2MOD,(C9H),D7,D6,D5,D4,D3,D2,D1,D0,T2OE,DCEN,图,6-11,定时器,T2,的模式控制寄存器,4,、定时器,/,计数器,2,的模式控制寄存器,T2MOD,6.3.1,定时器,/,计数器,T2,的特殊功能寄存器,T2MOD,中标志,:保留位,未定义,为未来功能扩展用。,T2OE,:定时器,/,计数器,2,输出启动位。,T2OE,1,,工作在可编程时钟输出方式。,输出方波信号至,T2(P1.0),引脚。,DCEN,:定时器,/,计数器,2,向上,/,向下计数控制位。,当,DCEN,l,,,T2,自动向下(递减)计数,当,DCEN,0,,,T2,自动向上(递增)计数,6.3.2,定时器,/,计数器,T2,的工作方式,定时器,/,计数器,2,是一个,16,位的加,1,计数器,具有四种工作方式,。如表,6-2,所示:,方式选择寄存器:,T2CON,和,T2MOD,。,注意:无论,T2,做定时器还是计数器,都具有捕获和自动重装的功能。,6.3.2,定时器,/,计数器,T2,的工作方式,表,6-2,定时器,/,计数器,2,的工作方式,RCLK+TCLK,CP/RL2,TR2,T2OE,工作方式,0,0,1,0,16,位自动重装方式,0,1,1,0,捕获方式,1,1,0,波特率发生器方式,0,1,1,时钟输出方式,0,关闭,T2,6.3.2,定时器,/,计数器,T2,的工作方式,一、,16,位自动重装方式,CP,RL2,0,,,DCEN=0,时,选择,自动重装,方式。结构如下图所示:,T2,计满溢出时,,TF2,置,1,,申请中断。,打开重装载三态缓冲器,将,RCAP2H,和,RCAP2L,的内容自动装载到,TH2,和,TL2,中。,EXEN2,1,且,T2EX,(,P1,1,)端的信号有负跳变时,,EXF2,置,1,,申请中断,。引起重装载操作。,6.3.2,定时器,/,计数器,T2,的工作方式,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.3.2,定时器,/,计数器,T2,的工作方式,CP/RL2,0,,,DCEN=1,时,定时器,/,计数器,2,既可以,增量(加,1,)和,减量(,减,1,)计数。,T2EX,电平控制计数方向:,当,T2EX,(,P1.1,)引脚输入为高电平,1,时,,,T2,执行增量(加,1,)计数,。,增量计数过程:,计满溢出时,一方面置位,TF2,,向主机请求中断处理;另一方面将存放在寄存器,RCAP2L,和,RCAP2H,中的,16,位计数初值自动重装,TL2,和,TH2,中,进行新一轮加,1,计数。,6.3.2,定时器,/,计数器,T2,的工作方式,6.3.2,定时器,/,计数器,T2,的工作方式,T2EX,(,P1.1,)引脚为低电平,0,时,定时器,/,计数器,2,执行减量(减,1,)计数。,减量计数过程:,是用,FFH,分别初始化(预置),TL2,和,TH2,,用,0FFFFH,减去计数次数所求得的下限初始化,RCAP2L,和,RCAP2H,。计数器不断减,1,,直至计数器中的值等于寄存器,RCAP2L,和,RCAP2H,中预置的值时,计满溢出。,0FFH,重装,TL2,和,TH2,,进行新一轮的计数操作,6.3.2,定时器,/,计数器,T2,的工作方式,增量(加,1,)计数是以,65536,为模。,对计数次数求补得到计数初值,此初值初始化,TL2,、,TH2,和,RCAP2L,、,RCAP2H,陷阱寄存器。,在电平控制重装方式下,无论减量增量计数,溢出时,TF2,置,1,,,EXF2,状态翻转,相当于,17,位计数器的最高位。,6.3.2,定时器,/,计数器,T2,的工作方式,二、捕获方式,当,CP,RL2,l,,选择捕获方式。,存在以下两种情况。,T2,结构如下图所示,有两种情况:,EXEN=0,定时器,2,的计数溢出,置位,TF2,,申请中断。,EXEN2,1,T2EX,(,P1,1,)端的信号有负跳变时,触发捕获操作。,将,TH2,和,TL2,的内容自动捕获到寄存器,RCAP2H,和,RCAP2L,中同时,EXF2,置,1,,申请中断。,6.3.2,定时器,/,计数器,T2,的工作方式,图,6-14,捕获方式的逻辑结构图,6.3.2,定时器,/,计数器,T2,的工作方式,三、波特率发生器方式,RCLK=1,或,TCLK,1,时,,选择,波特率发生器方式,。结构如下图所示,从图可以看出:,RCLK=1,,,T2,为,接收波特率发生器。,TCLK=1,,,T2,为,发送波特率发生器,。,C/T2,0,,选用内部脉冲,。,C/T2,1,,选用外部脉冲,。,T2,(,P1.0,)输入负跳变时,计数值增,l,。,6.3.2,定时器,/,计数器,T2,的工作方式,6.3.2,定时器,/,计数器,T2,的工作方式,计数溢出时,触发自动装载操作。,RCAP2H,和,RCAP2L,的内容自动装载到,TH2,和,TL2,中。,T2,用做波特率发生器时,,TH2,的溢出不会将,TF2,置位,不产生中断请求,。,T2EX,还可以作为一个附加的外部中断源,。,T2,用做波特率发生器时,若,EXEN2=1,,当,T2EX,有负跳变时,,EXF2,置,1,,由于不发生重装载或捕获操作,此时,T2EX,引脚可外接一中断源。,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,工作于,时钟输出方式,。结构如下图所示:,工作过程:,当,T2,计满溢出时,,T2,(,P1.0,)引脚状态翻转,从而输出频率可调、精度很高的方波信号;同时使,RCAP2H,和,RCAP2L,寄存器内容装入,TH2,和,TL2,寄存器中,重新计数。,在时钟输出方式下,,T2,溢出时不置位,TF2,。,6.3.2,定时器,/,计数器,T2,的工作方式,当,EXEN2=1,,,T2EX,(,P1.1,),引脚有,负跳变,时,,EXF2,将置,1,。(,同波特率发生器方式,),从,P1.0,引脚输出的时钟信号频率为:,Fosc,/,(,4,(,65536-,(,RCAP2H,,,RCAP2L,),6.3.2,定时器,/,计数器,T2,的工作方式,图,6-16 T2,时钟输出方式下的逻辑结构图,6.4,定时器应用举例,主要内容,6.4.1,定时器的初始化,6.4.2,定时器应用举例,6.4.1,定时器的初始化,在使用定时器,/,计数器前,应首先对其进行初始化编程。,一、定时器的初始化步骤,1,、,选择工作模式和工作方式。,设置,TMOD,、,T2MOD,。,2,、设置定时器的计数初值,。,设置,THx,和,TLx,,,RCAP2H,和,RCAP2L,。,3,、中断设置:,设置,IE,。,4,、启动定时器,。,设置,TCON,或,T2CON,。,可以使用位操作指令。例如:,SETB,TRx,。,6.4.1,定时器的初始化,二、定时器,/,计数器初值计算,根据,定时器,/,计数器的模式和方式,计算计数初值,(注意,T2,),计数器的长度为,n,,则计数的最大值为,2,n,。,1,、工作于定时方式,计数脉冲由内部的时钟提供,每个机器周期进行加,1,。,设晶振频率为,fosc,,则计数脉冲的频率为,fosc/12,,计数脉冲周期,T=1/,(,fosc/12,)。,6.4.1,定时器的初始化,如果进行定时时间为,t,,计数初值为,X,,则:,t=,(,2,n,-X,),12/fosc,2,、工作于计数方式,当工作在计数方式时,对外部脉冲计数。利用计数器计数结束产生溢出的特性,来计算初值,X,。则有:,X=,2,n,计数次数,6.4.2,定时器的应用举例,例,6-3,利用定时器,T1,的模式,2,对外部信号进行计数,要求每计满,100,次,将,P1.0,端取反。,分析:,T1,工作在计数方式。脉冲数,100,。,模式,2,,模式字,TMOD=0110b,。,1,、初值计数:,在模式,2,下:,X=,2,8,-,100=156D=9CH,2,、,C,语言程序:,#include ,sbit,p1_0=p10;/,进行位定义,6.4.2,定时器的应用举例,void main ( ),TMOD=0x60;/T1,工作在模式,2,,计数,TL1=0x9c;/,装入计数(重装)初值,TH1=0x9c;,ET1=1;/,允许定时器,1,中断,EA=1;/,开中断,TR1=1 ;/,启动定时器,1,while(1);,6.4.2,定时器的应用举例,void time0_int(void) interrupt 3 /,中断服务程序,P1_0=P1_0;/,取反,产生方波,3,、汇编语言程序:,MAIN:,MOV TMOD,#60H;T1,工作在模式,2,,计数,MOVTL1,#9CH;,装入计数初值,MOVTH1,#9CH;,装入计数(重装)初值,6.4.2,定时器的应用举例,MOVIE,#88H;,允许定时器中断,SETBTR1;,启动定时器,HERE:SJMP HERE;,等待中断,中断服务程序,:,ORG 001BH;,中断服务程序入口地址,CPLP1.0;,对,P1.0,引脚信号取反,RETI;,中断返回,6.4.2,定时器的应用举例,例,6-4,某一应用系统需要对,INT0,引脚的正脉冲测试其脉冲宽度。,分析:,可以设置定时器,/,计数器,0,为定时方式,工作在模式,1,,且置位,GATE,位为,1,,将外部需测试的脉冲从,INT0,引脚输入,设机器周期为,1s,。,6.4.2,定时器的应用举例,C,语言程序:,计算脉宽和处理程序略。,#include ,sbit,P3_2=P32;,unsigned,int_test,( ),TMOD=0x09;,TL0=0x00;,TH0=0x00;,while(P3_2);,TR0=1;,6.4.2,定时器的应用举例,while(!P3_2);,while(P3_2);,TR0= 0;,return (TH0*256+TL0);,汇编语言程序,:,INT00:MOV TMOD,#09H,MOV TL0,#00H;,设置计数初值,MOV TH0,#00H,LOP1:JBP3.2,LOP1;,等待,P3.2,变低电平,6.4.2,定时器的应用举例,SETB TR0;,启动,T0,计数,LOP2:JNBP3.2,LOP2;,等待,P3.2,变成高电平,LOP3:JBP3.2,LOP3;,等待,P3.2,变成低电平,CLRTR0;,停止,T0,计数,MOV A,TL0;,计数器,TL0,中的内容送,AMOV B,TH0;,计数器,TH0,中的内容送,B,本题也可以使用,定时器,/,计数器,2,工作在,捕获方式下,进行脉宽测试。,注意:,T2,脉宽测试必须在定时器未溢出的情况下才有效。,6.4.2,定时器的应用举例,例,6-5,某应用系统要求通过,P1.0,和,P1.1,口分别输出脉冲周期为,200s,和,400s,的方波,,fosc,=6MHz,。,分析:,需要两个定时器,。可以选择使用定时器,/,计数器,0,,设置为定时模式,,工作模式,3,,分成两个,8,位的定时器。,1,、计算定时初值。,t=,(,256 -X,),12/fosc,初值分别为,0CEH,和,9CH,。,6.4.2,定时器的应用举例,2,、,C,语言程序:,# include ,sbit,P1_0=P10;/,进行位定义,sbit,P1_1=P11;,void main( ),TMOD=0x03;/,设置,T0,定时,工作在模式,3,TL0=0xce;/,设置,TL0,计数初值,产生,200s,方波,TH0=0x9c;/,设置,TH0,计数初值,产生,400s,方波,ET0=1;/,设置定时器,0,中断允许位,6.4.2,定时器的应用举例,ET1=1;/,设置定时器,/,计数,/,器,1,中断允许位,EA=1;/,设置总中断允许位,TR0=1;/,启动定时器,T0,TR1=1;/,启动定时器,T1,while(1); /,等待溢出,void time0L_int(void) interrupt 1,/T0,中断服务程序,TL0=0xce;/,定时器重赋初值,P1_0=P1_0;/,产生方波,6.4.2,定时器的应用举例,void time0H_int(void) interrupt 3, /T1,中断服务程序,TH0=0x9c;/,定时器重赋初值,P1_1=P1_1;/,产生方波,3,、汇编语言程序:,主程序:,ORG0000H,LJMPMAIN,6.4.2,定时器的应用举例,ORG000BH,LJMPT0S,ORG001BH,LJMPT1S,MAIN:,MOVTMOD,#03H;,设置,T0,定时,模式,3,MOVTL0,#0CEH;,设置,TL0,计数初值,产生,200s,方波,MOVTH0,#9CH;,设置,TH0,计数初值,产生,400s,方波,6.4.2,定时器的应用举例,SETBEA;,设置总中断允许位,SETBET0;,允许定时器,0,中断,SETBET1;,允许定时器,1,中断,SETBTR0;,启动定时器,T0,SETBTR1;,启动定时器,T1,T0,中断服务程序,:,T0S:,MOVTL0,#0CEH;,重新设置定时初值,CPLP1.0;P1.0,口的输出取反,RETI,6.4.2,定时器的应用举例,T1,中断服务程序,:,T1S:,MOVTH0,#9CH ;,重新设置定时初值,CPLP1.1 ;,对,P1.0,口输出信号取反,RETI ;,中断返回,例,6-6,利用定时器精确定时,1s,控制,LED,以秒为单位闪烁。已知,fosc,=12MHz,。,分析:,定时器,/,计数器在定时方式下,各个模式最大定时时间分别为:,6.4.2,定时器应用举例,定时器,0=,(,8192-0,),12/fosc=8.192ms,定时器,1=,(,65536-0,),12/fosc=65.536ms,定时器,2=,(,256-0,),12/fosc=0.256ms,选择模式,1,。定时时间为,10ms,,当,10ms,的定时时间到,,TF1=1,,连续定时,100,次,调用亮灯函数;再连续定时,100,次,调用灭灯函数。循环工作,即达到,1s,闪烁,1,次的效果。,1,、初值计算:,(,2,56,-X,),12/fosc=10ms,初值,X=55536=0D8F0H,6.4.2,定时器应用举例,2,、程序设计:,C,语言程序:,#,include ,sbit,LED=P10;,unsigned char i;,void main(),LED=0;/,定义灯的初始状态为灭,TMOD=0x10;/,设置定时器,1,工作在模式,1,TL1=0xf0;,TH1=0xd8;/,设置定时初值,TR1=1; /,启动定时器,1,6.4.2,定时器应用举例,ET1=1;/,允许定时器,1,中断,EA=1;,while(1); ,void timer1_int() interrupt 3,TL1=0xf0;/,定时器重装初值,TH1=0xd8;,if(+i,=100),LED=LED;,i=0;,6.4.2,定时器应用举例,汇编语言程序,:,选择硬件定时,10ms,,设置一计数单元,存放计数值,100,,循环定时,100,次。,ORG0000H,LJMPMAIN,ORG001BH,LJMPTIMER,MAIN:,MOVR0,#100 ;,存放计数值,100,MOVTMOD,#10H,6.4.2,定时器应用举例,MOVTL1,#0F0H,MOVTH1,#0D8H,SETBET1,SETBEA,SETBTR1,CLRP1.0,SJMP$,TIMER:MOVTL1,#0F0H,MOVTH1,#0D8H,DJNZR0,NEXT,MOVR0,#100,CPLP1.0,NEXT: RETI,END,6.4.2,定时器应用举例,例,6-7,用定时器,/,计数器,2,从,P1.0,产生一个,5000Hz,的方波,假设晶振频率,fosc,为,12MHz,。,分析:,当,T2MOD,的,T2OE=1,,,T2CON,的,C/T2=0,时,,T2,工作于时钟输出方式。,T2,溢出信号自动触发,T2(P1.0,)引脚状态翻转从,P1.0,引脚输出频率可调、精度高的方波信号。,6.4.2,定时器应用举例,溢出后,,RCAP2H,和,RCAP2L,寄存器内容装入,TH2,和,TL2,寄存器中,重新计数,以便获得准确的溢出信号。输出信号频率为:,fosc,/,(,4,(,65536-,(,RCAP2H,RCAP2L,),方波频率为,5000Hz,。,计数初值为,65536-600=64936,。,C,语言程序:,# include ,sfr16 RCAP2=0xca; /,特殊寄存器定义,6.4.2,定时器应用举例,sfr16 T2=0xcc;,sfr,T2MOD=0xc9;,void main(), RCAP2=64936;,T2=64936;,T2MOD=2;,TR2=1;,while(1);,汇编语言程序,:,ORG0000H,LJMPMAIN,6.4.2,定时器应用举例,MAIN:,MOVT2MOD,#02H;T2,工作在可编程时钟输出方式,SETBTR2;T2,定时且启动,T2,工作,MOVRCAP2L,#0A8H;,送计数初值的低,8,位,MOVRCAP2H,#0FDH;,送计数初值的高,8,位,MOVTL2,#0A8H,MOVTH2,#0FDH,HERE:,SJMPHERE;,等待溢出,END,本章小结,本章首先总体简单介绍了,MCS-51,单片机定时器,/,计数器的结构、工作原理和相关的寄存器。,然后重点研究了,MCS-51,增强型单片机定时器,/,计数器,T0,、,T1,、,T2,的不同工作方式的结构和工作原理。,最后应用实例,讨论了各个定时器,/,计数器不同工作方式的应用。,本章小结(续),MCS-51,单片机定时器,/,计数器是单片机中非常重要、应用非常多的部件,一个从事单片机应用开发的人员,单片机是否用得灵活、是否能够充分发挥单片机的功能与作用,与定时器,/,计数器是否掌握应用得好关系密切。,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


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

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


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