1. 程式人生 > >時鐘晶片DS1302異常

時鐘晶片DS1302異常

異常現象: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));