5683|0

114

帖子

3383

TA的资源

五彩晶圆(初级)

楼主
 

将DS1302时钟走时更准确的方法 [复制链接]

本帖最后由 paulhyde 于 2014-9-15 02:56 编辑

用DS1302制作电子时钟,由于32678K的晶振误差原因造成时钟走时不准确,大家使用的晶振精度都不高,每天误差都差6到10秒,如果购买高精度的晶振价格又非常高,不如用单片机的计时器编程走时更准确,可以进行误差调整,本人作了几个用DS1302时钟,由于32678K晶振的原因,每天都快6-9秒之间,原来用的方法是每天自动校一次,由于每天的误差不是整数,比如每天快7.6秒,这样每天就得自动校8秒,又造成每天慢0.4秒,每月误差又是12秒,走时还是不准确,本人改成了每差1秒校正一次的方法,原理是:比如每天快7.6秒,24*60/7.6=189,也就是189分钟快1秒,每189分钟就自动校一次时钟,这样校时理论上每年的误差最大不到6秒,本人的时钟4个月误差不到1秒,属于相当准确喽,现在提供给大家分享。 设计原理是: 由于程序的大小和原理不同,每分钟读取DS1302的次数也不同,这样先设置二个变量,一个是分钟比较变量,用于判断分钟不等相等时计数器变量加1,另一个是校时计数变量,用于校时时间计数,当计数器变量等于189时,DS1302自动修正一次,程序如下:
  1. 变量设置
  2. BJBL DATA 20H ;分钟比较变量,用于判断分钟不等相等时计数器加1
  3. JSBL DATA 21H ;校时计数变量,用于校时时间计数
  4. MOV BJBL,#00H
  5. MOV JSBL,#00H
  6. 自动校时子程序
  7. AUTOXS:
  8. MOV A,MIN
  9. CJNE A,BJBL,AS1
  10. JMP AS2
  11. AS1: MOV BJBL,A
  12. MOV A,JSBL
  13. INC A
  14. MOV JSBL,A
  15. AS2: MOV A,JSBL
  16. CJNE A,#0D3H,AS5
  17. MOV A,SEC
  18. CJNE A,#01H,AS5 ;秒等于1时校回到0秒
  19. MOV R1,#8EH ;写保护寄存器
  20. MOV R0,#00H ;允许写入
  21. LCALL WRITE ;调用写DS1302程序
  22. MOV R1,#80H ;写秒寄存器
  23. MOV R0,#00H ;启动振荡器工作
  24. LCALL WRITE ;调用写DS1302程序
  25. MOV R1,#8EH ;写保护寄存器
  26. MOV R0,#80H ;禁止写入
  27. LCALL WRITE ;调用写DS1302程序
  28. MOV JSBL,#00H
  29. AS5: RET
复制代码
将此子程序在每次读取DS1302时调用

 

此帖出自电子竞赛论坛
点赞 关注
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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