你的15天快120秒,算一起來一天也有8秒的誤差,你這種情況在實(shí)際應(yīng)用中是很常見的,解決方法:
用DS1302制作電子時(shí)鐘,由于32678K的晶振誤差原因造成時(shí)鐘走時(shí)不準(zhǔn)確,在國內(nèi)能買到的晶振精度都不高,每天誤差都差6到10秒,如果購買國外的高精度的晶振價(jià)格又非常高,不如用單片機(jī)的計(jì)時(shí)器編程走時(shí)更準(zhǔn)確,可以進(jìn)行誤差調(diào)整,本人作了幾個(gè)用DS1302時(shí)鐘,由于32678K晶振的原因,每天都快6-9秒之間,原來用的方法是每天自動(dòng)校一次,由于每天的誤差不是整數(shù),比如每天快7.6秒,這樣每天就得自動(dòng)校8秒,又造成每天慢0.4秒,每月誤差又是12秒,走時(shí)還是不準(zhǔn)確,本人改成了每差1秒校正一次的方法,原理是:比如每天快7.6秒,24*60/7.6=189,也就是189分鐘快1秒,每189分鐘就自動(dòng)校一次時(shí)鐘,這樣校時(shí)理論上每年的誤差最大不到6秒,本人的時(shí)鐘4個(gè)月誤差不到1秒,屬于相當(dāng)準(zhǔn)確嘍,現(xiàn)在提供給大家分享。
設(shè)計(jì)原理是:
由于程序的大小和原理不同,每分鐘讀取DS1302的次數(shù)也不同,這樣先設(shè)置二個(gè)變量,一個(gè)是分鐘比較變量,用于判斷分鐘不等相等時(shí)計(jì)數(shù)器變量加1,另一個(gè)是校時(shí)計(jì)數(shù)變量,用于校時(shí)時(shí)間計(jì)數(shù),當(dāng)計(jì)數(shù)器變量等于189時(shí),DS1302自動(dòng)修正一次,程序如下: 代碼:
變量設(shè)置
BJBL DATA 20H ;分鐘比較變量,用于判斷分鐘不等相等時(shí)計(jì)數(shù)器加1
JSBL DATA 21H ;校時(shí)計(jì)數(shù)變量,用于校時(shí)時(shí)間計(jì)數(shù)
MOV BJBL,#00H
MOV JSBL,#00H
自動(dòng)校時(shí)子程序
AUTOXS:
MOV A,MIN
CJNE A,BJBL,AS1
JMP AS2
AS1: MOV BJBL,A
MOV A,JSBL
INC A
MOV JSBL,A
AS2: MOV A,JSBL
CJNE A,#0D3H,AS5
MOV A,SEC
CJNE A,#01H,AS5 ;秒等于1時(shí)校回到0秒
MOV R1,#8EH ;寫保護(hù)寄存器
MOV R0,#00H ;允許寫入
LCALL WRITE ;調(diào)用寫DS1302程序
MOV R1,#80H ;寫秒寄存器
MOV R0,#00H ;啟動(dòng)振蕩器工作
LCALL WRITE ;調(diào)用寫DS1302程序
MOV R1,#8EH ;寫保護(hù)寄存器
MOV R0,#80H ;禁止寫入
LCALL WRITE ;調(diào)用寫DS1302程序
MOV JSBL,#00H
AS5: RET
將此子程序在每次讀取DS1302時(shí)調(diào)用
|