13312|56

69

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

####51单片机 4M晶振,如何实现1秒钟的精确定时?##### [复制链接]

初看,很简单,越研究越深入,发觉越麻烦。若换成12M 或者 6M的晶振,不叫问题,but,目前要求用89C51,晶振4M,实现1s的精确定时。

我们知道 对51单片机而言,一个机器周期等于12个晶振周期,故:
若晶振为12M,1个机器周期=12*(1/12M)=1us
若晶振为 4M,1个机器周期=12*(1/4M)=3us

用Timer0,设 TMOD = 1,使之工作于16-bit timer/counter.  
一个时钟周期为3us的话<对应晶振是4M>,如何实现1s的定时呢?
最大计时为65536*3us=196.608ms  ,无论这个值取何值,例如150ms,定时多少次,例如6次<0.9s>或者7次<1.05s>,怎么得到1s呢?凑不出这个整数,,< 1s/3us=1000000/3=333333.3333333333333333333333333333 >

请大家指教一二,该如何实现?



最新回复

楼主好像被套住了!!!  详情 回复 发表于 2010-3-5 16:35
点赞 关注

回复
举报

73

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
自己顶一下,,希望大家知道的不吝赐教啊 :)
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
肯定是得有一个累积误差的

只要这个误差在你的系统允许范围内即可

绝对的精确,就是做航天飞机的也达不到

非要苛求做什么呢?
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

4
 
晕!
在中断里面计数就可以了。
假如你中断周期是100ms,如果你需要1000ms(1s)的定时,那么在中断中软件计数10次就可以了。
具体的楼主可以算算。
 
 
 

回复

88

帖子

0

TA的资源

一粒金砂(初级)

5
 
引用 3 楼 zyzhang365 的回复:
晕!
在中断里面计数就可以了。
假如你中断周期是100ms,如果你需要1000ms(1s)的定时,那么在中断中软件计数10次就可以了。
具体的楼主可以算算。


我再1楼都算了,就是因为出不来  100ms这样的 中断周期 的 整数,,所以才要发帖问啊 》》》》》

我也晕一下吧 ,,呵呵:)
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

6
 
引用 2 楼 lbing7 的回复:
肯定是得有一个累积误差的

只要这个误差在你的系统允许范围内即可

绝对的精确,就是做航天飞机的也达不到

非要苛求做什么呢?


要测输入脉冲的频率,若在0.9s(150ms ,6次)中,计数得到100个脉冲,那么按照公式算频率的话为 100/0.9=111.1111    这样可靠吗?
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

7
 
再顶,,顶到有人来。。。
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

8
 
引用 5 楼 9smile 的回复:
引用 2 楼 lbing7 的回复:
肯定是得有一个累积误差的

只要这个误差在你的系统允许范围内即可

绝对的精确,就是做航天飞机的也达不到

非要苛求做什么呢?


要测输入脉冲的频率,若在0.9s(150ms ,6次)中,计数得到100个脉冲,那么按照公式算频率的话为 100/0.9=111.1111? ? 这样可靠吗?


可不可靠这个与你使用这个时钟的模块决定

比如说,你用它来做一个闹钟,这个误差根本就不算什么,

一翻身就过去了

如果你用在通信协议定时上,可能误差就大些,也许会导致通信错误影响到通信效果

不知道你这个定时器是用来干啥的?
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

9
 
引用 7 楼 lbing7 的回复:
引用 5 楼 9smile 的回复:
引用 2 楼 lbing7 的回复:
肯定是得有一个累积误差的

只要这个误差在你的系统允许范围内即可

绝对的精确,就是做航天飞机的也达不到

非要苛求做什么呢?


要测输入脉冲的频率,若在0.9s(150ms ,6次)中,计数得到100个脉冲,那么按照公式算频率的话为 100/0.9=111.1111? ? 这样可靠吗?


可不可靠这个与你使用这个时钟的模块决定

比如说,你用它来做一个闹钟,这个误差根本就不算什么,

一翻身就过去了

如果你用在通信协议定时上,可能误差就大些,也许会导致通信错误影响到通信效果

不知道你这个定时器是用来干啥的?



测输入脉冲的频率。我想在1s 的时间内,,计脉冲的个数,进而得到频率。若在0.9s或者1.05s的时间内计脉冲个数,再折合成1s中的脉冲个数,不知道是否恰当??
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

10
 
钻牛角了吧

你要精确到什么程度,ms级够么,想用普通晶振做到非常精确那是不可能的
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

11
 
引用 9 楼 arnold9009 的回复:
钻牛角了吧

你要精确到什么程度,ms级够么,想用普通晶振做到非常精确那是不可能的



呵呵,,可能是吧。

但是 用 4M的晶振,,不能定时  1s 吗?
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

12
 
引用 8 楼 9smile 的回复:

测输入脉冲的频率。我想在1s 的时间内,,计脉冲的个数,进而得到频率。若在0.9s或者1.05s的时间内计脉冲个数,再折合成1s中的脉冲个数,不知道是否恰当??


不就测频嘛...

为了方便计算,用1S按说是很方便

可是也不一定的嘛,

你先确定,你要测的频率大概的范围,然后再确定你定时的长度

然后,在这个时间里,建一个次数表(手工计算好次数与频率对比)

计得次数,查表就得频率

如果有必要,多建几个这样的表,然后,动态地依据需要更改定时时间和表

就能"智能"地测频了

呵呵
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

13
 
照楼主的算法。理论上可以达到3×3×11111=99999us,这样跟1s差1us,这样不可以接受吗。
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

14
 
学习了,原来没人关注的时候可以自己顶。
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

15
 
1s/3us=333333
333333/65536=5.XXXXXX
那么可以用8次计数实现1秒计时
333333/8=41666.XXX,取41666
65536-41666=23870
把你的TIMER初值置成23870,计8次就是1秒
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

16
 
如果你的晶振是20ppm误差(20ppm是相当高的性能了),则4M的实际频率范围在3999920-4000080之间,我们在计算时取近似值,并不会超过它的误差范围
 
 
 

回复

58

帖子

0

TA的资源

一粒金砂(初级)

17
 
使用高精度的方案确定1ms或者什么,小基数(加上计算中断进入和退出的偏差)

然后对这个高精度的进行累加。如果使用大计时模块,比如你说的6次或者什么,误差太大
 
 
 

回复

90

帖子

0

TA的资源

一粒金砂(初级)

18
 
这个问题,典型学生问题。

因为现在基本都是单脉冲,单周期的。

而且你想要高精度,换晶振
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

19
 
引用 13 楼 xiashuidaobazhu 的回复:
学习了,原来没人关注的时候可以自己顶。


难道不是99.99%的论坛都这样吗?O(∩_∩)O
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

20
 
引用 16 楼 cstt60777 的回复:
使用高精度的方案确定1ms或者什么,小基数(加上计算中断进入和退出的偏差)

然后对这个高精度的进行累加。如果使用大计时模块,比如你说的6次或者什么,误差太大


值得研究一下,,谢谢 ~~
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表