欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 13151|回復: 5
打印 上一主題 下一主題
收起左側

DS1302走時精度問題已經完美解決

[復制鏈接]
跳轉到指定樓層
樓主
ID:72088 發表于 2019-12-24 15:07 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
最近閑來無事給自己的時鐘校準時間,每過一段時間表就會快,自己的程序沒問題,DS1302晶振精度問題,
網上很多資料和問題反映都是說1302不準,或快或慢,快的居多。下面是我給的解決方案:
1.利用1302內部閑置的RAM單元的一個單元存儲校正秒數(稱作校準寄存器)
2.規定每到00:00:30秒開始校準程序
3.校準時,RAM校準寄存器內容為0,不進行校準
4.校準寄存器為正值,進行+秒程序,數值多少加多少秒(負值我規定的是校準寄存器200以上為負值,)
5.另設置一個寄存器,校準后,2分鐘內不再讀取校準寄存器(防止減秒后,反復在30秒附近校準造成程序死循環)
這樣校準后,很久不用調整時間,達到實用目的,校準寄存器可以像調整時間那樣修正數值大小,用幾個月感覺慢了快了就修改校準寄存器,
精度會越來越高,
下列程序中有按鍵減程序,是很多程序中沒有的減時間按鍵,BCD碼自動修正哦!
很多DS1302程序要么沒按鍵程序,要么只有加鍵,我加減按鍵都完美解決了,你會看到減鍵程序長很多,呵呵!
;=========時間校準======00:00:30才啟動校準==============
JZ_TIME:
        MOV A,#00H
        CJNE A,HOUR,TIME_EN
        CJNE A,MINUTE,TIME_EN
        MOV A,1FH;防止短時間多次調用校準(比如減10秒,會出現反復減,死循環)
        CJNE A,#00,JZ_TIME_AA

        MOV A,#30H
        CJNE A,SECOND,TIME_EN
        MOV A,JIAOZHENG;校正寄存器
        JZ TIME_EN        ;校正值為0,退出
        ANL A,#10000000B
        JZ JZ_TIME01;為0,轉到+(不為0取反然后-)

        MOV A,JIAOZHENG;不為0取反然
        CPL A
        JZ TIME_EN;(255取反后也為0,防止255出現)
        MOV R4,A
        JMP JZ_TIME11;-校正時間

JZ_TIME_AA:;一定時間內不準調用校準程序(大約一分鐘到兩分鐘)
        DEC 1FH
        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
        ACALL SETDS1302                ;調用寫入時間程序
        MOV 1FH,#255;        防止死循環,一定時間內不準調用校準程序
        JMP TIME_EN

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
        ACALL SETDS1302                ;調用寫入時間程序
        MOV 1FH,#255;        防止死循環,一定時間內不準調用校準程序
TIME_EN:RET

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:584814 發表于 2019-12-26 22:39 | 只看該作者
不看不知道世界真奇妙,說明書上DS1302居然有30個字的RAM,是掉電不掉數據的么 ?
回復

使用道具 舉報

板凳
ID:343102 發表于 2019-12-27 23:16 | 只看該作者
很好的辦法。
我也想過利用程序自動校秒,但是考慮的是用單片機中的E2ROM來存儲修正值,而且還考慮過日修正、月修正、年修正。不過修正次數多了會不會減少DS1302壽命?
回復

使用道具 舉報

地板
ID:307020 發表于 2020-1-1 14:23 | 只看該作者
仁者見仁,智者見智,DS1302DataSheet內明確注明了應在晶振兩側各加一幾十p的負載電容,市售模塊出于成本的考慮,不加的多(只靠分布電容),是造成偏快的原因,最便捷的方法是加上這二件負載電容,如果希望可調的話改成瓷片可調更妥,應用例就是80年代數字液晶手表的調整方法。
回復

使用道具 舉報

5#
ID:72088 發表于 2020-1-9 12:27 | 只看該作者
man1234567 發表于 2019-12-26 22:39
不看不知道世界真奇妙,說明書上DS1302居然有30個字的RAM,是掉電不掉數據的么 ?

掉電肯定掉數據的,備用電池在,RAM就不會掉數據
回復

使用道具 舉報

6#
ID:72088 發表于 2020-1-9 12:29 | 只看該作者
風158 發表于 2019-12-27 23:16
很好的辦法。
我也想過利用程序自動校秒,但是考慮的是用單片機中的E2ROM來存儲修正值,而且還考慮過日修 ...

利用DS1302內的RAM就行,掉電有備用電池保存數據,相當于EEPROM
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表