找回密码
 立即注册

QQ登录

只需一步,快速开始

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

校准DS1302不准的问题解决了

[复制链接]
跳转到指定楼层
楼主
ID:72088 发表于 2025-2-17 10:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
DS1302时钟走时不准的原因:1,电容原因,晶振和电容不匹配,有6P和12P电容,此项比较简单,用几天发现快慢,更换合适的电容即可
2,轻微的不准,更换电容就难以掌握了,这里我用一个方法,每天DS1302固定时间点校准秒。
我是这样做到的,每天01:01:30为时间点,到点进行加秒或者减秒,然后自动存入DS1302中,设立校准标志位,02分钟后允许校准标,在01分钟时只能校准一次,防止30秒附近反复校准。
这是以前的1302版本,现在时钟芯片我用DS3231和RX8025T,主要是用RX8025T,毕竟便宜嘛!,RX8025A没使用过,资料上说有晶振微调寄存器,估计更准吧。
DS3231和RX8025T也需要校准,只是校准间隔更长,一个月启动校准。这样年误差更低了

;============时间校准===每天01:01:30才启动校准程序=====================
;1FH校准标志,01:01标志位置0(允许校准),校准后标志位置1(禁止)
;==========================================================
JZ_TIME:
        MOV  A,#01H
        CJNE A,HOUR,TIME_EN         ;是否01小时,不是退出
        CJNE A,MINUTE,JZ_TIME_AA         ;是否01分钟,不是退出

        MOV A,1FH          ;调用校准标志,标志为0允许校准
        CJNE A,#00,JZ_TIME_AA

        MOV A,#30H
        CJNE A,SECOND,TIME_EN        ;秒=30开始校准
        MOV 1FH,#1   ;防止反复校准
        MOV A,JIAOZHENG   ;校正寄存器
        JZ TIME_EN           ;校准=0,退出校准程序
        ANL A,#11000000B
        JZ JZ_TIME01;为0, 转到+(不为0取反然后-)
        MOV A,JIAOZHENG;不为0取反然
        CPL A
        INC A        ;取反加1
        MOV R4,A
        JMP JZ_TIME11;-校正时间

JZ_TIME_AA:       
        MOV A,MINUTE
        CJNE A,#02,JZ_TIME00       ;分钟为02清
        MOV 1FH,#0            ;清零校准标志
JZ_TIME00:
        JMP TIME_EN

JZ_TIME01:       ;+校正时间
        MOV R4,JIAOZHENG
JZ_TIME02:
        MOV A,SECOND
        ADD A,#01H
        DA A
        MOV SECOND,A
        DJNZ R4,JZ_TIME02
        JMP JZ_TIME_15 ;写入1302时间

JZ_TIME11:       ;-校正时间
        MOV A,SECOND
        CJNE A,#0,JZ_TIME_12        ;不等转移
        MOV SECOND,#59H        ;分钟赋值(是0,直接赋值59,不用减一语句)
        LJMP JZ_TIME_14
JZ_TIME_12:
        MOV A,SECOND
        ANL A,#0FH        ;低位为零转移
        JZ JZ_TIME_13
        DEC SECOND
        LJMP JZ_TIME_14
JZ_TIME_13:
        MOV A,SECOND
        SUBB A,#07H       
        MOV SECOND,A
        LJMP JZ_TIME_14
JZ_TIME_14:
        DJNZ R4,JZ_TIME11
JZ_TIME_15:
        ACALL SETDS1302                ;调用写入1302时间程序
        MOV 1FH,#1        ;校准标志置位
TIME_EN:
        RET

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:446156 发表于 2025-2-18 07:55 | 只看该作者
时钟芯片还得买内置晶振的
回复

使用道具 举报

板凳
ID:16255 发表于 2025-2-18 09:55 | 只看该作者
我用的是DS3231,基本上是装上去不用怎么校准直接使用。至今也运行一段时间了,没有发现太明显的误差。
回复

使用道具 举报

地板
ID:97181 发表于 2025-2-19 18:31 | 只看该作者
我用DS1302,但是校准用的网络时间,每天一次,一般也不用调整时间
回复

使用道具 举报

5#
ID:72088 发表于 2025-2-19 20:12 | 只看该作者
qinlu123 发表于 2025-2-18 07:55
时钟芯片还得买内置晶振的

我用的TX8025T有一个芯片,一天快1秒,一月就是快30秒,看来校准程序是有必要的,可以修改程序一月校准一次,
回复

使用道具 举报

6#
ID:72088 发表于 2025-2-19 20:13 | 只看该作者
mengsiu 发表于 2025-2-18 09:55
我用的是DS3231,基本上是装上去不用怎么校准直接使用。至今也运行一段时间了,没有发现太明显的误差。

别用8脚的3231,大封装的芯片还是很准的,8脚DS32331我用的也不准.
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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