C51 定时器 TL0=(65536-50000)256是怎么推导出来的?

来源:本站
导读:目前正在解读《C51 定时器 TL0=(65536-50000)256是怎么推导出来的?》的相关信息,《C51 定时器 TL0=(65536-50000)256是怎么推导出来的?》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《C51 定时器 TL0=(65536-50000)256是怎么推导出来的?》的详细说明。
简介:为什么除以256,因为我们的计时器是两个8位组成的,那么要把那些差值装进这两个8位,那么低8位最多能装256个机器周期,那么256计满了就用高8位的,就是说低8位满一次高8位加1,那么高8位装多少......

文章1:如果你选的单片机的晶振一定,比如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中放不下的部分放在TH0中,再把剩下的部分放在TH0中。

void timer0() interrupt 1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

flag++;

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

{ }

}

文章2:其实很简单,不管你使用多大的晶振,使用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;(求余运算,因为低八位最大能装255)

将65536-1000=64536化为16进制为:0xFC18

TH0=0xFC;

TL0=0X18;

提醒:《C51 定时器 TL0=(65536-50000)256是怎么推导出来的?》最后刷新时间 2024-03-14 00:54:20,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《C51 定时器 TL0=(65536-50000)256是怎么推导出来的?》该内容的真实性请自行鉴别。