一个单片机 定时器 计算 问题
你的初值是对的,而你计算的时候 错了。
TH0 = (65536-45872)/256
你要知道,它的定时总周期数是45872 ,因为定时器要从 65536-45872=19664 开始计时,要从19664计到65536 会溢出,这个间隔是45872。要弄清楚啊。
所以,45872*12/11.0592*10(-6)约= 50 MS
计算定时器,最原始的公式是(65536-初值)*12/晶振值=定时的时间,由此式子推出:初值=65536-(晶振值*定时时间/12)。则TH0=初值/256,TL0=初值%256,最终结果就是
TH0 = 255-CLOCK/TIME_PER_SEC/12/256;
TL0 = 255-CLOCK/TIME_PER_SEC/12%256;
其中除以TIME_PER_SEC,是因为TIME_PER_SEC表示要定时的时间的倒数。
11.0592M的晶振每秒可产生0.9216M个机器周期,50ms就需要46080个机器周期,定时器在方式1工作,是16位计数器,最大值为65536,所以需设置初值19456,即4C00H,所以TH0=0x4c,TL0=0x00。
我来告诉你:定时器是当总数达到ffffh后产生中断吧!那你要让它计数10000,是不是用ffff(16进制)减去10000(十进制)的数当计数初值啊?th0=-(10000/256);
tl0=-(10000%256)跟ffff(16进制)减去10000(十进制)的数是一样的。从th0=-(10000/256);
tl0=-(10000%256)开始计数,计数到10000刚好满。跟用ffff(16进制)减去10000(十进制)的数一样!!!写起来更简单,不用算!!!
看看原码、补码就知道。正数的补码是对应的二进制数,符号位为零,负数的补码是它的绝对值对应的二进制数按位取反再加一,符号位为一。无符号数不考虑符号,那么这个结果就跟用ffff减去它的绝对值一样。
其实很简单,不管你使用多大的晶振,使用51单片机,一般都是12分频出来,也就可以得出一个机器周期
机器周期=12/n(n指晶振频率),假设你要定时的时间为M
那么定时的初值为:
M/机器周期=初值;
TH0=(65536-初值)%256;
TL0=(65536-初值)/256;
将(65536-初值)所得的值化成16进制,其高位就是TH0的值,低位为TL0的值
例如用12M晶振做1ms定时计算如下:
机器周期=12/12*10^6=1us(微秒)
定时初值=(1*10^-3)/(1*10^-6)=1000;
所以:TH0=(65536-1000)%256;
TL0=(65536-1000)/256;
将65536-1000=64536化为16进制为:0xFC18
TH0=0xFC;
TL0=0X18;
如果你选的单片机的晶振一定,比如12MHZ来说吧,机器周期是1us,就是说每1us产生一次计数,就拿50ms来说,这是你想要的计时,意思是,对机器周期进行50000计数就可以得到我想要的,可T0是一个可以对机器周期能进行65536次计数,也就是说我想要的50MS不能让T0溢出,怎么办,那么先给这个定时器里面放些数,放多少,就是我们想要的50MS在加上一个多少就能等于65536,也就是65536和50000的差值,这个值就是我们说的初值。
为什么除以256,因为我们的计时器是两个8位组成的,那么要把那些差值装进这两个8位,那么低8位最多能装256个机器周期,那么256计满了就用高8位的,就是说低8位满一次高8位加1,那么高8位装多少,低8位就满了几次,算法就是用差值除一下256取其整数,剩下的,就是还剩了小于256次数的就放在低8位,就是差值 的余数。赞同23| 评论
一个单片机 定时器 计算 问题
12M的晶振每秒可产生1M个机器周期,50ms就需要50000个机器周期,定时器在方式1工作,是16位计数器,最大值为65536,所以需设置初值15536,即3CB0H,所以TH0=0x3c,TL0=0xb0。11.0592M的晶振每秒可产生0.9216M个机器周期,50ms就需要46080个机器周期,定时器在方式1工作,是16位计数器,最大值为65...
51单片机的定时器怎样计算?
1. 51单片机的定时器工作原理是基于加一计数,直到达到65536(即2^16)时溢出。2. 定时时间由设置的初值决定,如果每个脉冲为1微秒,要实现50毫秒的延时,需要50,000个脉冲。3. 初值分为高8位和低8位,高8位代表的是256的倍数,因为1的十六进制表示为0001H,等于256。4. 低8位的初值最大为255...
单片机定时器初值计算方法
单片机定时器的初值计算方法是基于定时时间的计算公式。具体而言,首先通过公式计算出定时器的时间常数X:定时时间T=(2的N次方-X)12\/单片机晶振频率。N代表定时器的工作方式,方式0时N=13,方式1时N=16,方式2时N=8。根据定时时间和工作方式,可以进一步计算出时间常数X。然后将X转换成二进制数,其中...
单片机:定时器工作方式0、1、2下的计时时间计算方法?
首先明确三种方式的计数范围:方式0是13位的定时\/计数器,记满值为2^13=8192;方式1是16位的定时\/计数器,计满为2^16=65536;方式2是8位的定时\/计数器,计满为2^8=256。我以方式1来举例说明(12M晶振):如果我想计数1S,但是计数方式1的计数最大计数65536us即65ms,为了方便计数,选取50ms,...
单片机定时器计算?
计算定时器,最原始的公式是(65536-初值)*12\/晶振值=定时的时间,由此式子推出:初值=65536-(晶振值*定时时间\/12)。则TH0=初值\/256,TL0=初值%256,最终结果就是 TH0 = 255-CLOCK\/TIME_PER_SEC\/12\/256;TL0 = 255-CLOCK\/TIME_PER_SEC\/12%256;其中除以TIME_PER_SEC,是因为TIME_PER_SEC...
关于单片机定时器的求算,怎么算出来的
51单片机定时器是“溢出”计时的,所以计算方法是:(假设定时X毫秒(这里设定在溢出范围内),晶振频率是F兆赫兹),那么计算公式是:初值=65536-(X*1000)*(F\/12)
怎样用单片机计算定时时间?
1、“T计数=12\/12=1μs”,分子是机器周期,分母是12M。所以才是1μs。2、得看定时器是加还是减,还有是多少位的(即确定定时范围)比如:定时器是加的,范围是000000-FFFFFE,这个只要FFFFFE-7D0=FFF82E(H)定时器是减的,范围是000000-FFFFFE,这个只要000000+7D0=0007D0(H)7D0(2000...
单片机时钟频率为12MHz,分别求定时0.1ms时在工作方式0、1下的定时器的...
在讨论单片机时钟频率为12MHz时,对于定时0.1ms的情况,我们可以详细探讨一下在工作方式0和方式1下的定时器初值计算。以常见的51单片机为例,其定时器0和定时器1的配置有所不同。当定时器0工作于方式0时,其为13位定时器,其中低5位赋值给TL0,而高8位赋值给TH0。要实现0.1ms的定时,首先需要确定...
单片机定时器计算?
计算定时器,最原始的公式是(65536-初值)*12\/晶振值=定时的时间,由此式子推出:初值=65536-(晶振值*定时时间\/12)。则TH0=初值\/256,TL0=初值%256,最终结果就是 TH0 = 255-CLOCK\/TIME_PER_SEC\/12\/256;TL0 = 255-CLOCK\/TIME_PER_SEC\/12%256;其中除以TIME_PER_SEC,是因为TIME_PER_SEC...
单片机中 定时器\/计数器 的计数初值是怎么计算得出的?(计数和定时计算...
因为MCS-51 的两个定时器均为加1计数器,当初值到最大值( 00H或0000H )时产生溢出,将TF位置1,可发出溢出中断,因此计数器初值X的计算式为: X=M- 计数值。式中的M由操作模式确定,不同的操作模式计数器的长不相同,故M值也不相同。而式中的计数值与定时器的工作方式有关。1、计数工作方式...