www.ysbm.net > 51单片机定时器计算

51单片机定时器计算

单片机的定时时间的计算公式=计数值(定时值)* 机器周期= 计数值(定时值)* 12 / 晶振频率.上面的两个等号是等价的,因为,单片机的机器周期=12秒/晶振频率,因此两个公式通用.完成一个基本操作所需要的时间称为机器周期.一般,

51但单片机的定时,要先计算,然后根据要求编写程序,计算会用到公式:t=Tc*(2L-TC)=12/f*(2L-TC) t是定时时间 Tc是机器周期 fs是晶振频率 L是计数器的长度 对于T0,T1有下面三种方式: 方式0:L=13 方式1:L=16 方式2:L=8 对于T2:L=16 然后剩下的就是按照算出的常数编写程序了,就靠你自己了.

呵呵 正确为你解答:1 可以按定时时间的计算公式, 计算出定时器的时间常数X: 定时时间T=(2的N次方-X)12/单片机晶振频率2 N为定时器的工作方式: 方式0时,N=13 方式1时,N=16 方式2时,N=83 根据定时时间和工作方式,计算出时间常数X 把X转换成二进制数,高8位送给TH1,低8位送给TL1,就可以启动定时器开始定时了. 例如: 工作在方式1,定时时间为1000微秒 晶振频率=12MHZ 则 定时时间T=(2的16次方-X)12/12MHZ=1000 解出 X=64536=FC18H 呵呵 如满意 请选择满意回答

晶振12MHz 时, 定时器计数1 就是1us , 1000就是1ms, 2000就是2ms 因为定时器是计数是往上加的, 所以65536-2000 就是2ms

初值计算就是要算出一个数字,让加上这个数字后,和为65536的时候,触发定时中断.所以一般的计算方法是【65536-定时时长/时钟周期(12M主频时候,频率是1M的,周期1us)】,你这个方法不是单片机的定时方法,是微机原理中的定时赋初值方法.顶下,为人民服务才有热情.

这个其实很简单的,你只需要知道一个条件即可:晶振频率.因为51单片机的机器周期计算公式是12/晶振频率MHz,若晶振为12MHz,则机器周期就是12/(12*10^6)=1us,也就是说计数器没1us计数一次.那么有了这个条件就好办多了,一般来说,12MHz晶振下,16位定时器满计数是65536次,每次1us,最大就能计时65.536ms,则65536减去多少就是定时多少,如(65536-X)/256,就是定时X微秒.那么如果晶振不是12MHz,就要把上述的X乘以12/晶振,得到的值就是定时时长.原理相同.有不懂的地方随时回复我.希望我的回答能帮助到你.

假设单片机的晶振为12M那么时钟周期为1/12M,12个时钟周期为一个机器周期,即时钟周期乘以12,则机器周期为1us,定时器每个机器周期自动加一.那么我们用定时器0的工作方式1.void init_timer0() { TMOD=0x01;//定义定时器的的工作方

定时时间=(2^N-初值)*机器周期;N=定时器位数,如果把初值换成当前计数值,也可以知道后面定时还剩多少时间.不过要取出当前计数值不太容易,而且误差很大.

用延时函数就可以实现; 首先,设置定时器工作方式,也就是TMOD,在设置TH0/1,TL0/1的初值,也就是定时时间的设置,然后设置中断允许,并开中断就可以; 参考例子如下: #include<reg51.h> void main() { TMOD=0X01; TH0=0X3C; TL0=0XB0; EA=1; ET0=1; TR0=1; while(1); } void timer0() interrupt 1 { TH0=0X3F; TL0=0XB0; }

在定时器模式下,计数器的计数脉冲来自于晶振脉冲的12分频信号,即对机器周期进行计数.若选择12M晶振,则定时器的计数频率为1MHZ.假设定时时间为T,机器周期为T1,即12/晶振频率.X为定时器初值.则 X=2^n-T/T1.方式0,n=13,方式1时,n=16,方式2和方式3,n=8

网站地图

All rights reserved Powered by www.ysbm.net

copyright ©right 2010-2021。
www.ysbm.net内容来自网络,如有侵犯请联系客服。zhit325@qq.com