标题: 52单片机小白求助关于定时器初值求模和取余 [打印本页]

作者: SHANWAZI    时间: 2021-1-4 10:42
标题: 52单片机小白求助关于定时器初值求模和取余
想问问坛友们单片机定时器工作方式1  设定为16位计数
TH0和TL0装初值
例如定时50MS:
TH0=(65536-50000=15536)/256;  
TL0=(65536-50000=15536)%256;
结果查质料得知是对TH0初值进行求模和对TL0初值进行求余可是始终不得解
这过程是怎么计算啊?知道的坛友能不能告知一下呢?
比如以实例举个例子呢!!!   跪谢了!!!


作者: suncat0504    时间: 2021-1-4 11:31
定时器的额工作过程是这样的:在设定初始值的基础上,每个计数周期,计数自动加一。当计数值达到0xFFFF时,下一个脉冲到来的时候,数据达到65536,就会溢出,从而产生中断。所以说这个初始值决定了产生中断所需要花费的时间。
对16位计数器模式,TH0和TL0两个存储器构成一个16位,TH0存储高八位,TL0存储低八位。也就是说,初始值=TH0 * 256 + TL0
如果设置某个初始值,使定时器再接收到50000个计数脉冲后(对12M晶振,时钟周期为1微秒,50000个时钟周期,就是50ms),产生溢出并中断的话,因为中断溢出的数值是65536(对无符号数据,两字节数据的最大值是65536),那么初始值就应该是65536-50000=15536这个数据,也就是15536=TH0 * 256 + TL0,那么以下计算方式就是确定TH0和TL0应该设置的初始数据。
TH0=15536/256=60;  
TL0=15536%256=176;
验算方式很简单:TH0*256+TL0=60*256+176=15536
作者: robinsonlin    时间: 2021-1-4 11:40
知道计算原理就好了。 没必要纠结如何计算出来的。  就想现在很多时候,你在计算百位*百位运算的时候,都会掏出手机计算来按几下一样,而不是再用笔列个竖式去验算。  51单片机定时器的取值,也有专门的计算工具的。 目前我一直是用 stc-isp ,设好晶振频率,设好工作模式,代码都直接出来了。也不容易把高低位搞反。网上一搜就找到了。
作者: SHANWAZI    时间: 2021-1-4 11:46
suncat0504 发表于 2021-1-4 11:31
定时器的额工作过程是这样的:在设定初始值的基础上,每个计数周期,计数自动加一。当计数值达到0xFFFF时, ...

真的是太感谢楼主一语道破困惑我好几天的问题终于解决!!!!!
作者: SHANWAZI    时间: 2021-1-4 11:47
robinsonlin 发表于 2021-1-4 11:40
知道计算原理就好了。 没必要纠结如何计算出来的。  就想现在很多时候,你在计算百位*百位运算的时候,都会 ...

您说的是单片机烧写软件吧!!!!
作者: 人人学会单片机    时间: 2021-1-4 12:07

这个就是定时器的工作原理图。看图操作
欢迎你们去观看《人人学会单片机》视频教程。B站和原子哥网站,我们都有播放的。


作者: SHANWAZI    时间: 2021-1-4 16:34
人人学会单片机 发表于 2021-1-4 12:07
这个就是定时器的工作原理图。看图操作
欢迎你们去观看《人人学会单片机》视频教程。B站和原子哥网站, ...

有点听不太懂有点深奥
作者: zwf33    时间: 2021-1-5 17:23
例如定时50MS(晶振用11.0592MHZ),初值计算方法:

12*(1÷11.0592)=1.085us


50ms=50000us
50000÷1.085=46083


TH0=(65536-46083)/256;  
TL0=(65536-46083)%256;
作者: SHANWAZI    时间: 2021-1-9 09:56
zwf33 发表于 2021-1-5 17:23
例如定时50MS(晶振用11.0592MHZ),初值计算方法:

12*(1÷11.0592)=1.085us

非常感谢!
作者: SHANWAZI    时间: 2021-1-9 09:57
问题已解决




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1