单片机TH0=(65536-50000)⼀256;是什么意思

2025-01-02 04:33:57
推荐回答(5个)
回答1:

(65536-50000)=15536,换算成16进制就是3CB0H\x0d\x0a(65536-50000)/256的结果是3CH,即一个字的高位字节。\x0d\x0a而(65536-50000)%256的结果是B0H,即一个字的低字节。\x0d\x0a单片机TH0=(65536-50000)/256;就是将定时器0(TH0)高位字节付值3CH。

回答2:

如果你选的单片机的晶振一定,比如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位,就是差值的余数。如果我要放一个超过256的数,肯定是超过先放高八位,把剩下的部分放在低八位中了,TH0=(65536-50000)/256就是把TL0中放不下的部分放在THO中,再把剩下的部分放在THO中。

void timer(0) interrupt 1

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

flag++;

if(flag==20)//当定时到1秒时执行花括号里面的语句

{}

}

回答3:

这是16位的定时器,最大计数2的16次方即65536。
式中的5000表示需要定时器定时一次需要计数的个数。
那么定时器的初始值就是(65536-50000)。
需要把这个初值分别赋给 TH0(高字节)TL0(低字节)
高字节就是这个数除以256,即TH0=(65536-50000)/256。
具体的结果编译器就给你计算了,这是一个省劲的写法。

回答4:

16位的定时器,最大计数2的16次方即65536。
式中的5000表示需要定时器定时一次需要计数的个数。
那么定时器的初始值就是(65536-50000)。
需要把这个初值分别赋给 TH0(高8位)
高字节就是这个数除以低字节256,即TH0=(65536-50000)/256。
低字节就是2的8次方256,2是因为每个位须要经过1和0两次变化;8就是低8位,每位变化2次后向上进一位,最后等于变化256次
晶振为12M时程序在这里大约延时50毫秒

回答5:

(65536-50000)=15536,换算成16进制就是3CB0H
(65536-50000)/256的结果是3CH,即一个字的高位字节。
而(65536-50000)%256的结果是B0H,即一个字的低字节。
单片机TH0=(65536-50000)/256;就是将定时器0(TH0)高位字节付值3CH。