時鐘晶片DS1302異常
阿新 • • 發佈:2018-12-01
異常現象:DS1302時間不走時,秒位是一個大於60的錯誤數字。
分析原因:DS1302受到干擾,軟體模擬發現DS1302的秒暫存器最高位被置為1(為時鐘停止位)。
解決方法:軟體中增加判斷機制,當讀出的時間大於60秒。就立即重新設定時間,這樣發生故障時,最多相差1秒就可以糾正回來。
if(sysrealtime.tm_sec > 60) { settime[0]= INT_BCD(sysrealtime_old.tm_sec); //miao settime[1]= INT_BCD(sysrealtime_old.tm_min); //fen settime[2]= INT_BCD(sysrealtime_old.tm_hour); settime[3]= INT_BCD(sysrealtime_old.tm_mday); settime[4]= INT_BCD(sysrealtime_old.tm_mon); settime[6]= INT_BCD(sysrealtime_old.tm_year-2000); DS1302_setT(settime); } else memcpy(&sysrealtime_old,&sysrealtime,sizeof(sysrealtime_old));