51单片机定时器使用经验总结
单片机定时器的使用可以说非常简单,只要掌握原理,有一点的C语言基础就行了。要点有以下几个:
1. 一定要知道英文缩写的原形,这样寄存器的名字就不用记了。
理解是最好的记忆方法。好的教材一定会给出所有英文缩写的原形。
2. 尽量用形像的方法记忆。
比如TCON和TMOD两个寄存器各位上的功能,教程一般有个图表,你就在学习中不断回忆那个图表的形像。
3. TMOD:定时器/计数器模式控制寄存器(TIMER/COUNTER MODE CONTROL REGISTER)
定时器/计数器模式控制寄存器TMOD是一个逐位定义的8位寄存器,但只能使用字节寻址,其字节地址为89H。其格式为:其中低四位定义定时器/计数器C/T0,高四位定义定时器/计数器C/T1,各位的说明:
(1)GATE——门控制。
GATE=1时,由外部中断引脚INT0、INT1来启动定时器T0、T1。
当INT0引脚为高电平时TR0置位,启动定时器T0;
当INT1引脚为高电平时TR1置位,启动定时器T1。
GATE=0时,仅由TR0,TR1置位分别启动定时器T0、T1。
(2)C/T——功能选择位
C/T=0时为定时功能,C/T=1时为计数功能。
置位时选择计数功能,清零时选择定时功能。
(3)M0、M1——方式选择功能
由于有2位,因此有4种工作方式:
M1M0 工作方式 计数器模式 TMOD(设置定时器模式)
0 0 方式0 13位计数器 TMOD=0x00
0 1 方式1 16位计数器 TMOD=0x01
1 0 方式2 自动重装8位计数器 TMOD=0x02
1 1 方式3 T0分为2个8位独立计数器,T1为无中断重装8位计数器 TMOD=0x03
单片机定时器0设置为工作方式1为TMOD=0x01
这里我们一定要知道,TMOD的T是TIMER/COUNTER的意思,MOD是MODE的意思。至于每位上的功能,你只要记住图表,并知道每个英文缩写的原型就可以了。
在程序中用到TMOD时,先立即回忆图表,并根据缩写的单词原形理出每位的意义,如果意义不是很清楚,就查下手册,几次下来,TMOD的图表就已经在脑子里了。
8位 GATE位,本身是门的意思。
7位 C/T Counter/Timer
6位 M1 Mode 1
5位 M0 Mode 0
4. TCON: 定时器/计数器控制寄存器(TIMER/COUNTER CONTROL REGISTER)
TMOD分成2段,TCON控制更加精细,分成四段,在本文中只要用到高四段。
TF0(TF1)——计数溢出标志位,当计数器计数溢出时,该位置1。
(1)TR0(TR1)——定时器运行控制位
当TR0(TR1)=0 停止定时器/计数器工作
当TR0(TR1)=1 启动定时器/计数器工作
(2)IE0(IE1)——外中断请求标志位
当CPU采样到P3.2(P3.3)出现有效中断请求时,此位由硬件置1。在中断响应完成后转向中断服务时,再由硬件自动清0。
(3)IT0(IT1)——外中断请求信号方式控制位
当IT0(IT1)=1 脉冲方式(后沿负跳有效)
当IT0(IT1)=0 电平方式(低电平有效)此位由软件置1或清0。
(4)TF0(TF1)——计数溢出标志位
当计数器产生计数溢出时,此位由硬件置1。当转向中断服务时,再有硬件自动清0。计数溢出的标志位的使用有两种情况:采用中断方式时,作中断请求标志位来使用;采用查询方式时,作查询状态位来使用。注意记忆方法,理解单词原形,就绝对不会把TF和TR搞混。TF的F也就是溢出Over Flow的F。TR的R就是运行Run。默认是0不运行,当然要置1才运行。
5. STC单片机STC89C52RC定时器延时时间的计算
延时时间要根据晶振频率计算,不同板子可能有所不同。
时钟周期:
1/时钟源,在我现在这块板子上,晶振频率是11.0592M,也就是时钟周期是 1/11059200秒
机器周期:
一般51单片机是12个时钟周期,我的板子也就是 12/11059200秒
单次定时最长时间:
如果是16位的计数器,16位最大值是65535,共可计数65536次。基本的常数一定要记住,还要记住8位最大值是255,共可计数256次,还要记住8位上每位代表的数值。
12 * 65536/11059200 = 0.0711 s,也就是,71 ms内的定时可以单次定时就完成。如果定时时间超过71 ms,就要循环了。
一次定时需要几次机器周期:
计算公式:定时秒数/机器周期
比如我要定时1秒, 1/(12/11059200)= 921600次,16位计数器最大可计数65536次,921600次早就益出了。我们可以每次定时10 ms,循环100次就可以定时1秒了,1 s缩小100百倍就是10 ms, 也就是每次需要计数9216次。
确实计数器初始值:
定时10 ms时,如果计数器从0开始计数,我们就不知道什么时候到了9216次。所以应该计数了9216次,16位计数器最多计数95536次,然后就溢出,一溢出TCON的TF位就会置1,我们只要经常检测TF位就可以知道什么时候完成10ms的定时了。
计算公式:计数器初始值=最大计数次数 - 需要计数次数
如果定时10 ms,计数器的初始值就是 65536 - 9216
计算计数器的高位和低位:
16位的计数器,也就是两个8位组成,8位的最大计数次数是256。所以:
计数器高位 = 初始值/256
计数器低位 = 初始值%6
6.STC89C52RC单片机定时器示例代码:
《51单片机基础》:定时器
咱们今天就聊一聊那些年单片机关于定时器与中断方面的事儿,其实定时器实质上就是一个加1计数器。它随着计数器的输入脉冲进行自加1,也就是说当每来一个脉冲,计数器就会自动加1,如果当加到计数器为全1时,再输入一个脉冲就使计数器回零,且计数器的溢出使相应的中断标志位置1,向CPU发出就会发出中断请求。
再讲讲中断吧,有不少单片机初学者对中断有些懵,不知道它的用法,讲个生活例子就是比如你在家里看电视,突然门铃响啦此时你的第一选择就是去开门,打断你做原来事情让你优先去做开门这件事,这就是所谓中断。
当你这件事情结束之后,你又可以继续去看电视。关于单片机中断优先级的问题,小伙伴一定要勤于动手,勤于动脑的查找资料。所以接下来写一个关于定时器与中断的实验,将数码管上电之后8位都显示6,然后定个时间就两秒后全显示2,因为一些原因只能给小伙伴们截两张图片,不过有兴趣的小伙伴可以验证代码的正确性,都这样说啦,代码都是作者亲自验证过的(哈哈哈),行,接下来直接给小伙伴们上图
主函数部分:
定时器主要代码:
实验现象:
哈哈,今天的实验就分享到这里,也希望小伙伴们能够喜欢、点赞。
相关问答
51单片机 中 定时器 的四种 工作方式 的各自定时范围?工作方式013位计数模式最大范围0-8191工作方式116位计数模式最大范围0-65535工作方式28位自动重装计数模式0-255工作模式3(只有T0)TL0和TH0将被分割...
51单片机 MCS-51,如果采用的晶振的频率为3MHz, 定时器 /计数器...[最佳回答]方式0:2^13/3M*12=0.032768s;方式1:2^16/3M*12=0.262144s;方式2:2^8/3M*12=0.001024s;方式0:2^13...
80c 51单片机定时器 如何选择 工作方式 ?51单片机的定时计数器可以配置成定时器模式或计数器状态,以及每个状态下的工作模式,这个配置是通过模式寄存器TMOD进行操作的。TMOD的C/T位等于0时,相应的定...
51单片机 的 定时器 怎么用?51单片机的定时器是一种用于产生定时或延时的功能模块。首先,需要选择合适的定时器模式和预分频系数,设置定时器的工作方式。然后,通过配置定时器的计数初值...
51单片机定时器 怎么调开关时间?.51单片机定时器这么调开关时间:设置定时器的工作模式,共4种工作方式,两种模式(计数器/定时器)。比如:MOVTMOD,#01;设置定时器0位定时器模式,工作方式1。2...
单片机 的 定时器 的四种 工作方式 都是什么?书上看不懂。能不能用容易理解的话解释一下?第一种工作方式0,是2的13次方(13位)定时器或计数器,就是最大能数8192个数的模式,数一个数就是1个机器周期。工作方式1就是2的16次方(16位)定时器或计数器...
51单片机 用C语言或者汇编程序如何实现定时1秒?如何设定初始值?如何计算?如何输出方波?如何对外部?使用定时器实现1秒定时;初始值要看单片机配置的晶振频率了,若12M晶振,初始值为TH0=0x3c;TL0=0xb0;这才是50ms,还要一个单元做计数器,计数20次才是1秒方波...
80C 51单片机 内部有几个定时/计数器?它们由哪些功能寄存器组成?怎样实现定时功能和计数功能?两个16位定时计数器,分别是Timer0Timer1.应用定时/计数器使用以下寄存器:1.中断启用寄存器IE2.中断优先级寄存器IP3.定时器/计数器模式寄存器TMOD4.定时器/计...
8052 单片机定时器 /计数器有哪几种 工作 模式?定时器0有四种工作方式:方式0:13位定时/计数器模式方式1:16位定时/计数器模式方式2:8位可重装载定时/计数器模式方式3:两个单独8位定时/计数器模式定...
如何使用 51单片机 的 定时器 写一个精确延时1ms的延时子函数。 ...给你一个例子#includevoidInitTimer0(void){TMOD=0x01;TH0=0x0FC;TL0=0x18;EA=1;ET0=1;TR0=1...