基于51单片机(STC89C52)如何定时10ms
大家好,今天给大家介绍51单片机(STC89C52)如何定时10ms,下方附有本文涉及的全部资料和源代码的获取方式,可进群免费领取。
1.定时器如何定时
首先大致描述一下定时器的定时原理,其实本质就一句话:每经过一个机器周期,寄存器就加1。
这里就又要解释什么是时钟周期,什么是机械周期。我们的51单片机无论是开发板还是最小系统板上,都会有一个电子元件叫做“ 晶振 ”,这个晶振就是单片机的“心脏”。通常为了使串口波特率稳定传输数据,大部分的51单片机上的晶振频率为11.05922MHz。时钟周期 的计算方法就是晶振频率的倒数,也就是11.0592分之一秒。时钟周期是计算机中最基本的、最小的时间单位。在一个时钟周期内,CPU仅完成一个最基本的动作。时钟周期是一个时间的量。更小的时钟周期就意味着更高的工作频率。有了时钟周期我们就可以进而计算出机械周期,一个机械周期 = 12 x 时钟周期 =12 x (1/时钟频率) 秒 = 12 / 时钟频率 秒 = 12 / 11059200 秒 = 12 000 000 / 11059200 微秒 = 1.085 微秒。总结一下,定时器定时的过程就相当于数有几个机械周期,数完了机械周期后定时器会溢出从而结束定时
2.如何定时10ms
使用51单片机定时不得不了解TCON寄存器,TR0:控制开始计时,TF0:判断定时器是否溢出(溢出时该位置1),TL0定时器初值低八位,TH0定时器初值高八位(不配置初值默认从0开始计数)。也就是说定时器模式在16位自动重装载值的情况下,从0开始计数,数完65536个机械周期也就是71ms的时候定时器会溢出。那么如果我们想定时10ms只需要从61ms的时候开始数,数到71ms的时候定时器刚好会溢出。这个时候只需要配置定时器初值的高八位和低八位即可。
配置高八位低八位的过程:
配置的过程也并不复杂,首先确定10ms包含了几个机械周期:
10ms➗1.085us=9216(这里注意单位换算)
若从0开始计数到溢出一共是65536个机械周期,那么如果从61ms开始定时也是就是从65536-9216=56320开始计数,换算成16进制就如下图:
因此高位为DC, 低位为0。完美散花!!!
当然现在有的软件输入定时时间后可以自动生成C代码,例如ISP。但是我想接触单片机初期这些“捷径”尽量少走,多搞清楚点底层的东西对单片机的学习是很有帮助的。
完整代码可进群免费领取!!!
嵌入式物联网的学习之路非常漫长,不少人因为学习路线不对或者学习内容不够专业而错失高薪offer。不过别担心,我为大家整理了一份150多G的学习资源,基本上涵盖了嵌入式物联网学习的所有内容。点击下方链接,0元领取学习资源,让你的学习之路更加顺畅!记得点赞、关注、收藏、转发哦!
点击这里找小助理0元领取:扫码进群领资料
单片机中各种周期的关系与定时器原理
时钟周期:
时钟周期也叫振荡周期或晶振周期,即晶振的单位时间发出的脉冲数,一般有外部的振晶产生,比如12MHZ=12×10的6次方,即每秒发出12000000个脉冲信号,那么发出一个脉冲的时间就是时钟周期,也就是1/12微秒。通常也叫做系统时钟周期。是计算机中最基本的、最小的时间单位。
在8051单片机中把一个时钟周期定义为一个节拍(用P表示),二个节拍定义为一个状态周期(用S表示)。
机器周期:
在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段,每一阶段完成一项工作。例如,取指令、存储器读、存储器写等,这每一项工作称为一个基本操作。完成一个基本操作所需要的时间称为机器周期。一般情况下,一个机器周期由若干个S周期(状态周期)组成。8051系列单片机的一个机器周期同6个S周期(状态周期)组成。前面已说过一个时钟周期定义为一个节拍(用P表示),二个节拍定义为一个状态周期(用S表示),8051单片机的机器周期由6个状态周期组成,也就是说一个机器周期=6个状态周期=12个时钟周期。
在标准的51单片机中,一般情况下,一个机器周期等于12个时钟周期,也就是机器周期=12*时钟周期,(上面讲到的原因)如果是12MHZ,那么机器周期=1微秒。单片机工作时,是一条一条地从RoM中取指令,然后一步一步地执行。单片机访问一次存储器的时间,称之为一个机器周期,这是一个时间基准。
机器周期不仅对于指令执行有着重要的意义,而且机器周期也是单片机定时器和计数器的时间基准。例如一个单片机选择了12MHZ晶振,那么当定时器的数值加1时,实际经过的时间就是1us,这就是单片机的定时原理。
但是在8051F310中,CIP-51 微控制器内核采用流水线结构,与标准的 8051 结构相比指令执行速度有很大的提高。在一个标准的 8051 中,除 MUL和 DIV以外所有指令都需要 12 或 24 个系统时钟周期,最大系统时钟频率为 12-24MHz。而对于 CIP-51 内核,70%的指令的执行时间为 1或2个系统时钟周期,只有 4 条指令的执行时间大于 4 个系统时钟周期。 所以在计算定时器的值时要注意这里的变化。
指令周期:
指令周期是执行一条指令所需要的时间,一般由若干个机器周期组成。指令不同,所需的机器周期数也不同。对于一些简单的的单字节指令,在取指令周期中,指令取出到指令寄存器后,立即译码执行,不再需要其它的机器周期。对于一些比较复杂的指令,例如转移指令、乘法指令,则需要两个或者两个以上的机器周期。
系统时钟:
系统时钟:系统时钟就是CPU指令运行的频率,这个才是CPU真正的频率。
单片机内部所有工作,都是基于由晶振产生的同一个触发信号源,由这个信号来同步协调工作步骤,我们把这个信号称为系统时钟,系统时钟一般由晶振产生,但在单片机内部系统时钟不一定等于晶振频率,有可能小于晶振频率,也有可能大于晶振频率,具体是多少由单片机内部结构决定,正常情况和晶振频率会存在一个整数倍关系。系统时种是整个单片机工作节奏的基准,它每振荡一次,单片机就被触发执行一次操作。
一般来说,单片机只有一个时钟源.用了外部晶振,就不用内部RC,用了内部RC,就不用外部晶振.振荡器振荡,产生周期波.单片机在这样的周期波的作用一下有规律的一拍一拍的工作,波的频率越高,单片工作得就越快,波的频率越低,单片机工作得就越慢。
有了以上的概念以后,就可以正确的理解定时器的工作原理了,在8051F310单片机中,有3个定时器,如果定时器1工作在模式1下,如工作模式1下,是16位的计时器,最大数值是65535,当再加1时(=65536),就会发生溢出,产生中断,所以如果我们要它计1000个数, 那么定时初值就是65536-1000,结果就是64536,这个值送给TH、TL,因为是16进制的,所以高位是64536/256取商,低位是64536%6取余。
再者,就是每一计数的时间是多久?一般我们取12M晶振时,一个周期刚好是1us,计数1000个就是1ms,这是因为标准的51单片机是12时钟周期的(STC有6时钟和1时钟方式)。那么,如果我们晶振是12M,就比较好算,如果是其它的,就用12去除好了。比如是6M的,那么就是12/6=2,每个计数是2us,那么你要定时1ms就只要计数500个即可以。
定时器的初值跟定时器的工作方式,跟晶振频率都有关系。一个机器周期Tcy=晶振频率X12,计数次数N=定时时间t/机器周期Tcy,那么初值就X=65536-N,得出的数化成十六进制就行了。这里是用定时器O工作方式1做例子,如果是其它工作方式,就不能是65535了。工作方式0是8192,方式2,3是256。这里有一个公式:
TH=(65536-time/(12/ft))/256
其中,time就是要延时的100ms(要取100000us),ft是晶振频率。这个式子又可以简化成TH=(65536-time*ft/12)/256
TL=(65536-time*ft/12)%6
在一本书上还看到了这样计算定时初值的:
TH0=-(50235/256); //重装100ms定时初值
TL0=-(50235%6); ///这里使用的6M晶体,
这里是6M晶体,延时100ms,那么按上面讲的原理,6M是每个计数为2us,100ms定时就是计数50000个。
那么,定时器初值要 65536-50000=15536,转成16进是3CB0。这就是要送给TH(=3C) 和TL(=B0)的值。
程序中写 TH0=-(50235/256);其实它是这样的TH0=0x100-(50235/256); 在51中,取负数,其结果就是它的值取反+1,也可以用0x100(十进制的256)去减,结果是多少呢?结果就是3C
相关问答
单片机定时器 可以定时几次?单片机定时器可以定时多次,具体次数取决于定时器的配置和使用方式。定时器可以设置定时周期和计数值,当计数值达到设定值时,定时器会触发中断或产生特定的输出...
设计程序?例1利用 定时器 输出周期为2ms的方波,设 单片机 晶振...[最佳回答]如果把6MHZ改成12MHZ程序应该怎么改?可以使用方式1.X=M-N=65536-1000=64536=FC18H需要修改的指令为如下三条.MOVTH0,#0FCH;...
单片机 常用的三种 定时 方法 - 懂得程序延时,定时中断,定时查询.
在PLC的编程中怎样用 两个定时器 实现振荡电路?...宏观上画的是圆,微观上画的是折线。一个至少有两路脉冲输出的plc控制x,y方向上的两台伺服电机。一会儿控制x,一会儿控制y,但是每台执行的脉冲很少,切换很...
51 单片机 用2个 定时器 怎么算频率?你好,可以使用一个定时器作为计数器,另一个定时器作为计时器,通过测量一定时间内计数器的计数次数来计算频率。具体步骤如下:1.设置一个计数器,每次触发计...
51 单片机 T0 定时器 4种方式的 定时 时长分别是多少 - 懂得51单片机最大硬件定时时间,就是定时器能定时的时间,最长时间=65536*TcTc=fosc/12,fosc是单片机的晶振频率。以频率=12M为例吧,Tc=1us最大定时时间=6...
【设振荡频率为12MHz,如果用 定时 /计数器T0产生周期为100ms的...[最佳回答]查询方式和中断方式都可以实现!解释如下:由于振荡频率为12MHz,如果按常规标准的12分频的51系列单片机算的话,一个机器周期就是1uS.定时器/计数器数...
基于 单片机 控制的专用 定时器 定时 时间1、1s~99s可调,2、1mi...[最佳回答]属于基本问题定器初始化设定count变量选择定器工作于式1装初值装65ms左右设置50ms引起断断20概1s写显示程序断计满1s秒变量加1秒计满60.钟变量++类...
如何用 单片机 的 定时器 精确定时?用单片机本身的定时来做电子表,我个人认为,这种方法不可取,现在有很多时钟芯片,与单片机接口也很简单,它有专门的外部晶振,而且在时间精确是,是绝对准确的...
多通道温度 定时 控制器的操作?目前所使用的温度定时控制器输出通道普遍只有一个,且实现温度控制的物理参量单一,在对多个设备进行控温操作时一次只能完成一个,不能同时进行,工作效率较低,...