|
DS1302時(shí)鐘走時(shí)不準(zhǔn)的原因:1,電容原因,晶振和電容不匹配,有6P和12P電容,此項(xiàng)比較簡(jiǎn)單,用幾天發(fā)現(xiàn)快慢,更換合適的電容即可
2,輕微的不準(zhǔn),更換電容就難以掌握了,這里我用一個(gè)方法,每天DS1302固定時(shí)間點(diǎn)校準(zhǔn)秒。
我是這樣做到的,每天01:01:30為時(shí)間點(diǎn),到點(diǎn)進(jìn)行加秒或者減秒,然后自動(dòng)存入DS1302中,設(shè)立校準(zhǔn)標(biāo)志位,02分鐘后允許校準(zhǔn)標(biāo),在01分鐘時(shí)只能校準(zhǔn)一次,防止30秒附近反復(fù)校準(zhǔn)。
這是以前的1302版本,現(xiàn)在時(shí)鐘芯片我用DS3231和RX8025T,主要是用RX8025T,畢竟便宜嘛!,RX8025A沒(méi)使用過(guò),資料上說(shuō)有晶振微調(diào)寄存器,估計(jì)更準(zhǔn)吧。
DS3231和RX8025T也需要校準(zhǔn),只是校準(zhǔn)間隔更長(zhǎng),一個(gè)月啟動(dòng)校準(zhǔn)。這樣年誤差更低了
;============時(shí)間校準(zhǔn)===每天01:01:30才啟動(dòng)校準(zhǔn)程序=====================
;1FH校準(zhǔn)標(biāo)志,01:01標(biāo)志位置0(允許校準(zhǔn)),校準(zhǔn)后標(biāo)志位置1(禁止)
;==========================================================
JZ_TIME:
MOV A,#01H
CJNE A,HOUR,TIME_EN ;是否01小時(shí),不是退出
CJNE A,MINUTE,JZ_TIME_AA ;是否01分鐘,不是退出
MOV A,1FH ;調(diào)用校準(zhǔn)標(biāo)志,標(biāo)志為0允許校準(zhǔn)
CJNE A,#00,JZ_TIME_AA
MOV A,#30H
CJNE A,SECOND,TIME_EN ;秒=30開(kāi)始校準(zhǔn)
MOV 1FH,#1 ;防止反復(fù)校準(zhǔn)
MOV A,JIAOZHENG ;校正寄存器
JZ TIME_EN ;校準(zhǔn)=0,退出校準(zhǔn)程序
ANL A,#11000000B
JZ JZ_TIME01;為0, 轉(zhuǎn)到+(不為0取反然后-)
MOV A,JIAOZHENG;不為0取反然
CPL A
INC A ;取反加1
MOV R4,A
JMP JZ_TIME11;-校正時(shí)間
JZ_TIME_AA:
MOV A,MINUTE
CJNE A,#02,JZ_TIME00 ;分鐘為02清
MOV 1FH,#0 ;清零校準(zhǔn)標(biāo)志
JZ_TIME00:
JMP TIME_EN
JZ_TIME01: ;+校正時(shí)間
MOV R4,JIAOZHENG
JZ_TIME02:
MOV A,SECOND
ADD A,#01H
DA A
MOV SECOND,A
DJNZ R4,JZ_TIME02
JMP JZ_TIME_15 ;寫(xiě)入1302時(shí)間
JZ_TIME11: ;-校正時(shí)間
MOV A,SECOND
CJNE A,#0,JZ_TIME_12 ;不等轉(zhuǎn)移
MOV SECOND,#59H ;分鐘賦值(是0,直接賦值59,不用減一語(yǔ)句)
LJMP JZ_TIME_14
JZ_TIME_12:
MOV A,SECOND
ANL A,#0FH ;低位為零轉(zhuǎn)移
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 ;調(diào)用寫(xiě)入1302時(shí)間程序
MOV 1FH,#1 ;校準(zhǔn)標(biāo)志置位
TIME_EN:
RET
|
評(píng)分
-
查看全部評(píng)分
|