单片机定时器计数器-第二版.ppt
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 定时器 计数器 第二
- 资源描述:
-
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第五章 定时器,/,计数器原理与应用,在单片机应用技术中,往往需要定时检测某个参数,按一定的时间间隔或依据对某种事件的计数结果来进行某种控制。通过一个可编程的计数器来实现定时和计数,不影响,CPU,的效率。因此,几乎所有单片机内部都提供了这样的定时器计数器。,80C51,有两个,16,位定时器,/,计数器,T0,和,T1,,,80C52,等单片机还有第三个定时器,T2,,,它们都可以编程设定为内部定时器或外部事件计数器。,若是对内部时钟计数,是作为定时器使用;若是对从外部输入的脉冲信号计数,则是作为计数器使用。不管是工作在定时器方式还是计数器方式,,80C51,定时器,/,计数器在对内部时钟或外部事件计数时,不占用,CPU,时间,除非定时器,/,计数器溢出,才可能中断,CPU,当前操作,。,5.1 80C51,定时器,/,计数器的结构组成,定时器,/,计数器,T0,由两个特殊功能寄存器,TH0,和,TL0,构成,,T1,由,THl,和,TLl,构成。定时器,/,计数器方式寄存器,TMOD,用于设置定时器,/,计数器的工作方式,定时器,/,计数器控制寄存器,TCON,用于启动和停止定时器,/,计数器的计数,并控制定时器,/,计数器的状态。每一个定时器,/,计数器内部结构实质上是一个可程控的加法计数器,由编程来设置它工作在定时状态或计数状态,。,5.2,定时器,/,计数器的工作原理,定时器,/,计数器的工作状态由,SFR,中,TMOD,和,TCON,控制,.,由,TMOD,中的定时,/,计数选择位 选择工作于定时或计数工作状态。,定时的时间范围或计数范围由两个,8,位加计数器,TL,、,TH,组成。定时器,/,计数器的控制逻辑由,TMOD,和,TCON,中的,GATEi,、,TRi,及外部中断输入信号,/,INTi,组成,控制定时器,/,计数器的启动和停止,.,计数器,Ti,在计满回,0,时能自动使,TCON,中的,TFi,置位,以表示计数器,Ti,产生了溢出中断请求,若此时中断是开放的,(,即:,EA,1,和,ETi,1),,,计数器,Ti,的溢出中断请求便可为,CPU,响应。中断响应后,TFi,自动清零。,定时器,/,计数器用作定时器时,对机器周期进行计数,每过一个机器周期计数器加,1,,直到计数器计满溢出。由于一个机器周期由,12,个时钟周期组成,所以计数频率为时钟频率的,1,12,。显然定时器的定时时间不仅与计数器的初值即计数长度有关,而且还与系统的时钟频率有关。,5.2.1,方式寄存器,TMOD,定时器,/,计数器的工作方式及控制模式由方式寄存器,TMOD,设定。,TMOD,的,SFR,地址为,89H,,,不可位寻址,M1 M0,工作方式,功能说明,0 0,方式,0,13,位计数器,0 1,方式,1,16,位计数器,1 0,方式,2,自动重装,8,位计数器,1 1,方式,3,定时器,0,:分成两个,8,位计数器,定时器,1,:停止计数,表,5-1,方式选择位意义,由图中可见,,Ti,是否工作还和,TRi,、,GATE,和 有关。,GATE,是门控位,用于确定 是否需要参与对,Ti,的控制:,若,GATE,0,,,则,Ti,只受,TRi,控制,只要通过软件使,TRi,置,1,,就启动定时器,/,计数器;,若,GATE,1,,,则 作,Ti,的辅助控制线,不再用作中断请求输入线,此时由,TRi,和外部引脚 控制启,/,停,若,TRi,1,,则外部电平信号通过 引脚直接开启或关断,Ti,,当 ,1,时允许计数,否则停止计数,可测脉冲宽度。,5.2.2,控制寄存器,TCON,TCON,占用了,SFR,的,88H,字节。这里只利用了其高,4,位,其低,4,位为中断控制位。,TCON,除可字节寻址外,各位还可位寻址。,TCON,用于控制定时器,/,计数器的启停和计数溢出标志设置。,TCON.7TF1,:计数器,l,的溢出标志。,TR1,:计数器,l,运行控制位。由软件置,1,或置,0,来启动或关闭,T1,。,IE1,:外部触发中断,1,请求标志。,IT1,:外中断,1,触发方式选择位。,5.3,工作方式及应用,80C51,的定时器,/,计数器是加,1,计数的,有,4,种工作方式:,方式,0,:,13,位计数方式。,方式,1,:,16,位计数方式。,方式,2,:计数常数可自动重装的,8,位计数方式。,方式,3,:两个,8,位计数器与波特率发生器的工作方式。,定时器,/,计数器的方式设定通过对,TMOD,的设定来完成。由于,TMOD,不可位寻址,对,TMOD,的设定需通过直接寻址的字节操作来实现。例如,设定,T0,按方式,1,进行计数操作,并由内部,TR0,位来进行启停控制,此时,GATE0,应置,0,,所以控制字应为,0101B=05H,,设,T1,为复位状态,可用这样的指令完成设定:,MOV89H,,,#05H,或,MOV TMOD,,,#05H,5.3.1,方式,0,计数器结构保留了,MCS-48,单片机,32,分频的,8,位计数方式。在这种方式下,,16,位寄存器,(,THi,和,TLi,),只用,13,位,由,THi,的,8,位和,TLi,的低,5,位构成,。,当,TLi,的低,5,位计数溢出时即向,THi,进位,而,THi,计数溢出时向中断标志位,TFi,进位,(,称硬件置位,TFi,),,,并请求中断。因此,可通过查询,TFi,是否置位或查看中断是否发生,(,通过,CPU,响应,),来判断定时器,/,计数器,Ti,的计数操作溢出与否。,(C,),0,时,对机器周期计数,是定时器工作方式。其定时时间为,:(,计数初值,),时钟周期,12,当,(C,)=1,时,计数器对来自外部引脚,Ti,的输入脉冲计数,即实现计数功能。当外部信号发生负跳变时,计数器加,1,。,5.3.2,方式,1,工作状态,方式,1,为,16,位计数方式,其结构与操作同方式,0,基本一样,唯一的区别在于方式,1,寄存器,THi,、,TLi,以全,16,位计数。,用于定时工作方式时,定时时间为:,T=(-,计数初值,)12/fosc,用于计数方式时,计数的最大长度为,65536,个外部脉冲,。,5.3.3,方式,2,工作状态,方式,2,为可自动重装计数初值的,8,位计数方式,如图,5-7,所示。方式,0,和方式,1,若用于循环重复定时或计数时,在每次计数满、溢出后,计数器回,0,,要进行新一轮的计数就得重新装入计数初值。这样一来编程麻烦,而且影响定时的精确度。,在方式,2,中,,16,位计数器被拆成两个部分:,TLi,用作,8,位计数器,,THi,用来保存计数初值。当,8,位计数器,TLi,计数溢出后,会自动启动,THi,重新向,TLi,装入计数初值,从而进入新一轮的计数。这种工作方式可以避免在程序中因重新装入初值而对定时精度的影响,适用于需要产生相当精度的定时时间的应用场合。特别适于作串行口波特率发生器。,用于定时器工作方式时,其定时时间(,TF,溢出周期)为,:T=(-TH,的初值,),12/fosc,用于计数器工作方式时,最大计数长度为,=256,个外部脉冲。,在程序初始化时,对,TLi,、,THi,赋予相同的初值。,5.3.4,方式,3,工作状态,若将,T0,设置为方式,3,,,TL0,和,TH0,被分为,2,个独立的,8,位计数器:,TL0,用原,T0,的各控制位、引脚和中断源,可工作于定时器或计数器方式,功能和操作与方式,0,或方式,1,相同。,TH0,占用了原,T1,的控制位,TR1,和中断标志位,TF1,,,它被固定为定时器工作方式,只用作简单的内部定时,其启动和关闭仅受,TR1,控制。,在,T0,工作于方式,3,时,,T1,仍可设置为方式,0,2,,但由于,TR1,、,TF1,已被定时器,TH0,占用,其计数开关一直处于导通状态,此时仅由,T1,的控制位,C,切换使其处于定时器或计数器工作方式。寄存器溢出时,只能将输出送入串行口或用于不需要中断的场合。若要停止计数操作,可送入一个设置,T1,为方式,3,的方式字,其效果与置,TR1,0,相同,即关闭定时器,T1,。,方式,3,的作用比较特殊,只适用于定时器,T0,。,在一般情况下,当,T1,用作串行口波特率发生器时,,T0,才设置为工作方式,3,,以便多获得一路,8,位定时器。此时,常把,T1,设置为方式,2,。,5.3.5,应用指导及实例,一应用指导,1,定时器,/,计数器的复位状态,TMOD,、,TCON,复位后的有效位均为零,故复位后,两个定时器,/,计数器均处于方式,0,的定时器工作状态,由内部,TRi,执行启、停控制,溢出中断标志为,0,。若需要定时器,/,计数器工作于其他方式,须在上电复位后的初始化程序中进行设定。,2,初始化设定,在利用定时器,/,计数器进行定时或计数之前,首先要通过软件对它进行初始化。初始化步骤如下:,1,),定工作方式,对,TMOD,赋值;,2),定时器,/,计数器,TH0,、,TL0,或,TL1,、,TH1,写入初值;,计数器采用加法计数,并在溢出时请求中断,因此不能直接输入所需的计数模值,而是要从计数最大值倒回去一个计数模值才是应置入的初值。算法如下:,设置入的初值为,x,,,计数最大值为,M=2,n,(n=13,16,8),计数方式时,,x=M-,计数模值,定时方式时,因为,(M,x)T,定时值,所以,x,M,(,定时值,T),,,T,为机器周期,是时钟周期的,12,倍。,3,)根据需要开放定时器,/,计数器的中断,直接对中断允许控制寄存器,IE,的位赋值;,4,)启动定时器,/,计数器工作,若用软件启动(,GATE=0,),,则对,TR0,或,TR1,置,1,;若由外部中断引脚电平启动(,GATE=1,),,则需给 或 加高电平才能启动。,3,定时器,/,计数器的信号源,选择定时器工作方式时,计数输入信号是内部时钟脉冲,每个机器周期使寄存器的值加,1,。计数速率为振荡器频率的,1/12,。,选择计数器工作方式时,计数脉冲来自相应的外部输入引脚,T0,或,T1,。由于确认一次下跳变要用,2,个机器周期,即,24,个时钟振荡周期,因此外部输入的计数脉冲的最高频率为时钟频率的,1/24,。对外部输入信号的占空比并没有什么限制,但为了确保某一给定的电平在变化之前至少被采样一次,则这一电平至少要保持一个机器周期。,4,方式,0,的计数器特点,80C51,定时器,/,计数器的方式,0,沿袭了,MCS-48,中的计数器结构,其,13,位计数器是按,5,位预分频定标器、,8,位计数器设置的。,THi,、,TLi,两个,8,位计数器构成的,13,位计数器中,低,5,位为,TLi,,,高,8,位为,THi,,,这使得其计数初值并不是按,13,位减法直接得到的数据值。例如,要实现,m,的定时要求,系统时钟为,fosc,,,定时器计数脉冲周期为,T=12/fosc,,,设计数初值为,x,,,则,。,设,m=1ms,fosc=12MHz,则,上述,x,是按,13,位计数(高,5,位,低,8,位)的减法求得的计数器初值,而,80C51,定时器方式,0,的,13,位计数器是按高,8,位、低,5,位安排的,即要把,x,按高,8,位、低,5,位组合成计数初值,,1C18H=,11100000,11000,B=E018H,实际装入,THi,、,TLi,的计数初值应为,E018H,。,5,当定时器,T0,用于模式,3,时,定时器,T1,的启停控制,当定时器,T0,设为模式,3,时,,T1,将在计数初值写入指令之后自动启动。,T1,本无模式,3,,但若故意将,T1,设为模式,3,时,那就表示关闭,T1,,所以可借用,ORL TMOD,,,#00110000B,指令,作为,T1,的关闭命令。,6.,计数器的“飞读”,80C51,计数器不具有捕获功能,不能在计数器计数瞬间捕捉住,THi,、,TLi,的计数值。,在计数器计数期间,如果读第一个,8,位计数器,第二个计数器还在计数,恰逢溢出,再读第二个,8,位计数器时,就会呈现很大的计数误差。这就要通过计数器的“飞读”来解决。即先读,THi,值,后读,TLi,值,然后再重复读取,THi,值。若两次,THi,值相同,读得的内容正确;若不相同,则再重复上述过程。下面是对,T0,计数器的“飞读”子程序,RDT0,。,读取的计数值存入,R0,、,R1,。,RDT0,:,MOV A,,,TH0,;,读,TH0,入,A,MOV R1,,,TL0,;,读,TL0,入,R1,CJNE A,,,TH0,,,RDT0,;比较两次读的,TH0,,,;不同再读,MOV R0,,,A,RET,二应用举例,定时器,/,计数器,T0,和,T1,不仅可以使单片机方便地用于定时控制,而且可作为分频器和事件记录来用。,例,5-1,设晶振,fosc,=12M,,利用,T0,产生周期为,400us,的方波,由,p1.0,输出。,解:根据题意,只要使,P1.0,每隔,0.2ms,取一次反,即可得到,0.4ms,的方波。定时时间为,0.2ms,(,时间不长),选方式,2;M1M0=10,;定时方式,,=0,;在此用软件启动,T0,工作,,GATE=0,。,T1,不用,可任意。故,TMOD=02H,。,下面计算定时值为,0.2ms,,,T0,的初值。,机器周期,T=12/fosc=1s,则,T0,的初值为,x=2,8,-200=56=38H,因为做,8,位计数器使用,自动重装,则:(,TH0,),=38H,,(,TL0,),=38H,程序编写如下:,#include,#include,sbit,p10=P10;/,定义,p00,为,p0.0,口,main()/,演示程序,TMOD=0 x02;/,设置定时器,0,工作方式,2,TH0=0 x38;/,给,TH0,赋初值,TL0=0 x38;/,给,TL0,赋初值,ET0=1;/,定时器,0,中断允许,EA=1;/CPU,开中断,TF0=0;/,计数器,0,溢出标志置零,TR0=1;/,启动计数器,0,while(1);,void Timer0()interrupt 1 using 0/,定时器,0,溢出中断函数,P10=p10;/,取反,产生方波,例,5-2,设晶振,fosc,=12M,,利用,T0,定时使,p0.0,端电平每隔,10s,取反一次,由,p0.0,输出。,解:在方式,1,下,最大的计数值为,M=2,16,=65536,,,而晶振为,12MHz,的机器周期为,1s,,,所以最大定时时间,Tmax,=65536s=65.36ms,,,不能满足本题定时要求,需另设软件计数器。设,T0,的定时时间为,50ms,,,则初始值,x,为:,x=65536-50000=15536=3CB0H,则(,TL0,),=0B0H,,(,TH0,),=3CH,#include,#include,sbit,p00=P00;/,定义,p00,为,p0.0,口,int,nCounter,;,main()/,演示程序,TMOD=0 x01;/,置定时器,0,为方式,1,TH0=0 x3c;/,定时,50ms,TL0=0 xb0;,ET0=1;/,定时器,0,中断允许,EA=1;/CPU,开中断,TF0=0;/,计数器,0,溢出标志置零,TR0=1;/,启动计数器,0,p00=1;/,产生方波高电平,while(1);,void Timer0()interrupt 1 using 0 /,计数器,0,溢出中断函数,TH0=0 x3c;/,重装计数初值,TL0=0 xb0;,nCounter,+;/,计数次数加,1,if(nCounter,=200)/10s,定时完成,循环变量,nCounter,清零,电平取反,nCounter,=0;,p00=p00;,例,5-3,当,GATE=1,、,TR0=1,时,只有 引脚上出现高电平时,,T0,才能允许计数。试利用这一功能测试 引脚上正脉冲的宽度(机器周期数)。,解:设外部待测脉冲由 (,P3.2,),输入,,T0,为工作方式,1,,设置为定时状态,,GATE,置为“,1”,,测试时,在 端为“,0”,时置,TR0,为“,1”,,当 端变为,1,时启动计数,端再次变为“,0”,时停止计数。此时的计数值就是被测正脉冲的宽度。,#include,#include,sbit,p00=P00;,int,nvar1,nvar2;,main(),TMOD=0 x09;/,设置,T0,工作方式,1,,启停与,INT0,有关,TH0=0 x00;/T0,计数器清零,TL0=0 x00;,ET0=1;/,定时器,0,中断允许,EA=1;/CPU,开中断,TF0=0;/,计数器,0,溢出标志置零,while(INT0=1),;,/,等待,p3.2,变低,TR0=1;/,由,INT0,启动计数器,while,(,INT0=0,);,/,等待,p3.2,变高,while,(,INT0=1,);,/,等待,p3.2,再变低,TR0=0,;,/T0,停止计数,nvar1=TH0;/,存放计数值,nvar2=TL0;,while(1);,展开阅读全文

咨信网声明:本文档由用户上传并分享,仅供学习交流、研究之用,未经授权,严禁复制、发行、汇编、翻译或网络传播等,侵权必究。
咨信网小贴示:
1、浏览或下载可查看了解,请点击【咨信网告知】。
2、下载文件中如有侵权或不适当内容,将立即纠正。
3、如果因为网速或其他原因下载失败请重新下载,重复下载[60天内]不扣币。
4、开具发票登录电脑端申请,请点击【索取发票】。
咨信网客服组:【微信客服】
1、浏览或下载可查看了解,请点击【咨信网告知】。
2、下载文件中如有侵权或不适当内容,将立即纠正。
3、如果因为网速或其他原因下载失败请重新下载,重复下载[60天内]不扣币。
4、开具发票登录电脑端申请,请点击【索取发票】。
咨信网客服组:【微信客服】


单片机定时器计数器-第二版.ppt
















自信AI助手














微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/14753193.html