完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
9个回答
|
|
基于2楼讲的太官方了,我采用人民语言讲一下这个递减计算的方法。
这个是采用递减计数的方式计数。首先12M晶振的51单片机指令周期为1US,你要计算50US就是要计数50次。那意思就是要递减50次。16bit的寄存器最大值为65536。用65536-50=65486,65486转换为16进制就是ffce,其中ff放高位,ce放低位。应该你已经明白什么意思了哦
最佳答案
|
|
|
|
本帖最后由 dabing89 于 2016-8-10 18:19 编辑
好吧,看来你的基础还比较弱,我先告诉你,以后我会讲这个知识点的,假设你用的是12MHz晶振,一个机器周期也就是1US的时间,那么如果你想1MS溢出一次,我是习惯去这样写的TH0 = (65536 - 1000) / 256;TL0 = (65536 - 1000) %256;也有人这么写TH0 = (65536 - 1000 》》 8;TL0 = (65536 - 1000)& 0xff;更有甚者这么去写TH0 = - 1000 / 256;TL0 = - 1000%256;还有人这么去写 //设置定时器模式TH0 = 0xFC; TL0 = 0x18 //设置定时初值,50MS自然就是把1000改成50000啊呵呵,系统的时钟是1US计数一次,所有的定时都是根据时钟来的,以上是几种写法,都一个意思,呵呵 |
|
|
|
既然一个机器周期是1US,那么需要多少个机器周期才能达到1MS的溢出呢?X*12/12000000 = 0.001S;X = 1000;又因为16位的定时器溢出值是65536,那么65536 - 1000 = 64536;把这个数据算成16进制,自然就是0XFC18了,呵呵,挺繁琐的
|
|
|
|
dabing89 发表于 2016-8-10 18:18 谢谢,大概意思我懂了,但是这个算出来的64536不除64536吗?ff换成十进制不是255吗? |
|
|
|
大概懂了?懂个毛啊,呵呵,为什么除以64536呢?这是计数值啊,他的意思是经过1000次溢出之后就可以达到你想要定时的值,(65536 - 1000),FF换成十进制是255啊,没错,人家不是从0计数的嘛,你懂的 |
|
|
|
dabing89 发表于 2016-8-10 19:21 你问的这个问题虽然简单,却包含了很多知识点,而初学者往往不拿着当回事,知识一定要学深学透 |
|
|
|
或者可以使用TH0=(65535-XX)/256;TL0==(65535-XX)%256;
|
|
|
|
这种我也会,我就是想知道你写的这种和我上面写的那种之间是怎么转换的 |
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1975 浏览 0 评论
【每周推荐】采用11代Intel CPU,基于youyeetoo X1开发板搭建少儿AI智能STEAM积木平台
993 浏览 0 评论
3182 浏览 2 评论
【youyeetoo X1 windows 开发板体验】+ 影音处理和AI模型移植
2821 浏览 5 评论
I.MX6ULL-飞凌 ElfBoard ELF1板卡- 移植zbar的方法
1852 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
6689 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-5-14 18:47 , Processed in 0.698765 second(s), Total 92, Slave 74 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号