历史上的今天
今天是:2025年06月03日(星期二)
2019年06月03日 | C51 定时器 TL0=(65536-50000)%256是怎么推导出来的?
2019-06-03 来源:eefocus
文章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秒时执行花括号里面的语句
{ }
}
(Fromhttp://bbs.ednchina.com/BLOG_ARTICLE_3012623.HTM)
文章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;
(Fromhttp://blog.sina.com.cn/s/blog_5134d7020100ey3i.html)
上一篇:单片机中进制转换知识
史海拾趣
|
最近使用wince机器进行开发,开发过程中发现,我每次保存大概800字节的数据到文件,大概保存了100个左右速度就变慢,而增加到200个左右速度又变快了,不知道这是什么原因,每次都是整个文件读出来验证一下再全部写入… 查看全部问答> |
|
请大家帮忙,下面红框的组件怎么删除的,例如密码设置组件 ———————————————————————————————————— 我刚开始以为是下面这个,可惜不是。删除后密码组件还在 麻烦大家指点一下。… 查看全部问答> |
|
美国MICROCHIP-DV164006-MPLAB? ICD 2仿真器+电源+演示版 美国MICROCHIP-DV164006-MPLAB? ICD 2仿真器+电源+演示版 MPLAB? ICD 2模块是一款连接PC 和设计目标板的低成本开发工具,可以让设计人员对目标PIC?单片机或dsPIC? DSC直接进行在线调试。使用该模块可以实时或单步地执行程序,建立观察变量、设置断 ...… 查看全部问答> |
|
噪声及仪器列表——《使用2790型数字源表开关系统测试双安全气囊充气机模块》 在生产环境中,测量可能会受到机械、电机甚至荧光灯产生的外部噪声的影响。这在进行长导线连接的高阻抗待测器件的低电平测试中是严重的问题。共模噪声是指同时出现在仪器HI和LO输入端的噪声信号。适当的屏蔽可以减少共模噪音。使用双绞线可以减少 ...… 查看全部问答> |
|
本帖最后由 lzwml 于 2015-8-15 19:58 编辑 平台:TQ2440,外设UDA1341 用ttplayer将mp3转换成wav格式,电脑播放有双声道 用下载到板子里后只有左声道,音乐清晰,右声道一直是沙沙的电流声(和左声道一样大声) 做过如下测试,请熟悉的朋友判 ...… 查看全部问答> |




