找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2543|回复: 8
打印 上一主题 下一主题
收起左侧

初学者关于单片机定时器初值计算没有懂,请教一下大家,谢谢!

[复制链接]
跳转到指定楼层
楼主
ID:404479 发表于 2018-11-6 11:34 来自手机 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
我看的普中科技的教程,首先按照普中科技讲解的办法,我的理解是:
①首先,确认晶振的振荡频率,由晶振的振荡频率除以机器的周期12,即,比如我晶振频率,12MHZ,那么12MHZ÷12=1,也就是1us微秒,我的这个理解方法是否正确?
②然后,赋值,我是这样理解的,拿T0定时计数器来说,当TH0和TL0满了后,也就是16个1,也就是65535,然后我要定时1ms,也就是1000us,于是初始值=65535-1000+1=64536,然后我把64536化成16进制=FC18,也就是高位TH0=0xFC  低位TL0=0x18,请问大家这种方法有没用错?除了这种方法,还有没有其他赋值方法?下图有一个时郭天祥的方法。我看不懂他为什么要这样赋值,他和65535-x+1这种公式赋值方法有什么不一样么,为何非要去搞得那么的复杂,又是除法运算,又是模运算的!
提问完毕,谢谢大家!!

Screenshot_20181106-110550.png (189.26 KB, 下载次数: 44)

Screenshot_20181106-110550.png

Screenshot_20181106-110658.png (109.32 KB, 下载次数: 31)

Screenshot_20181106-110658.png

Screenshot_20181106-110252.png (134.37 KB, 下载次数: 32)

Screenshot_20181106-110252.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:277550 发表于 2018-11-6 13:01 | 只看该作者
單片機的類型,很有關係,看看STC下載工具中的時鐘初始化代碼

回复

使用道具 举报

板凳
ID:89515 发表于 2018-11-6 13:25 | 只看该作者
都没错,都可以,你自己能看懂就行
回复

使用道具 举报

地板
ID:421675 发表于 2018-11-6 14:10 | 只看该作者
郭天祥的方法其实和你说的一样只不过你的是自己算 他的赋值是你想计多少个数只需改变65536减的哪个数就可以,很方便,高八位赋值时/256的意思就是将低八位去掉只剩高八位赋值给高八位,低八位赋值时,%256就是将高八位去掉只剩低八位赋值给低八位,无需你自己计算赋值。
回复

使用道具 举报

5#
ID:387733 发表于 2018-11-6 14:13 | 只看该作者
一样的呀,你说的 65535-1000+1时1mS的,这个65536-50000是50mS的。使用 /256 和 %256是为了分别得到高8位与低8位,不要再人工化解了
回复

使用道具 举报

6#
ID:411811 发表于 2018-11-6 15:10 | 只看该作者
哪位大佬和我说说(0xffff - 50000)/ 0xff 这种算法法和郭天祥的算法是不是一样的
回复

使用道具 举报

7#
ID:404479 发表于 2018-11-6 16:53 来自手机 | 只看该作者
1657329982 发表于 2018-11-6 14:10
郭天祥的方法其实和你说的一样只不过你的是自己算 他的赋值是你想计多少个数只需改变65536减的哪个数就可以 ...

请问我根据郭天祥的办法,我定时1毫秒,那么TH0=(65536-1000)/256=252.09375,那么我把得到的252化成16进制数=FC,这我能理解,但是他给TL0赋值时我就不能理解了,同样的(65536-1000)%256=?这个大数字的取模这么算,65536-1000=64536,那么用64536%256=?  我算了一下首先64536÷256=252.09375这么多得余数,怎么取?
回复

使用道具 举报

8#
ID:404479 发表于 2018-11-6 16:54 来自手机 | 只看该作者
sxhwdz 发表于 2018-11-6 14:13
一样的呀,你说的 65535-1000+1时1mS的,这个65536-50000是50mS的。使用 /256 和 %256是为了分别得到高8位 ...

请问我根据郭天祥的办法,我定时1毫秒,那么TH0=(65536-1000)/256=252.09375,那么我把得到的252化成16进制数=FC,这我能理解,但是他给TL0赋值时我就不能理解了,同样的(65536-1000)%256=?这个大数字的取模这么算,65536-1000=64536,那么用64536%256=?  我算了一下首先64536÷256=252.09375这么多得余数,怎么取?
回复

使用道具 举报

9#
ID:401564 发表于 2018-11-6 20:37 | 只看该作者
专业级入门的我告诉你:
郭天祥的方法是对的,你的也是对的,结果是一样的,还有,那+1要不要都不重要的,无源晶振你就别想着它能达到理想的12.00MHZ,有时候是11.88有时候是12.22.
虽然郭天祥的方法是对,但那也是不对的,他忘记了他是教别人,你用一个新手没有学过的东西去教新手,却不告诉新手这是个什么原理,我看过网上对他书的评论,真不咋的.
8位机是没有浮点这个说法的,是不可能在机器内部计算出一个小数点给你的
在8051或者大多的单片机机中,除以256是以不带进位标志右移8次来完成的,而FC18=11111100 00011000="FC"高位加上 "18"低位.右移8个位,你看一下结果是不是FC?取模运算是一样的右移,然后只取之前的低8位的值.
如果你学过汇编你就会明白我说的了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表