提問者:blissfulpuppy2013-06-09 00:00
系統上電對DS1302進行初始化一般都是先禁用write-protect,然后寫入初始數據,但是這樣的話每次斷電重新上電,都寫入這個數據,那不就失去了RTC的意義了?怎樣才能讓DS1302能一直運行下去,而不用每次系統上電都會把初始值重新寫入?DS1302配有電池
void Set_RTC(void) //設定 日歷 { unsigned char i,*p,tmp,flag=0; flag = Read_Ds1302(0xc1); if(flag != 0xf0) { for(i=0;i<7;i++) //BCD處理 { tmp=l_tmpdate[i]/10; l_tmpdate[i]=l_tmpdate[i]%10; l_tmpdate[i]=l_tmpdate[i]+tmp*16; } Write_Ds1302(0x8E,0x00); p=write_rtc_address; //傳地址 for(i=0;i<7;i++) //7次寫入 秒分時日月周年 { Write_Ds1302(*p,l_tmpdate[i]); p++; } Write_Ds1302(0xc0,0xf0); //判斷是否初始化一次標識寫入 Write_Ds1302(0x8E,0x80); //寫保護設置 } } 我是這樣子做的,在C0寄存器寫0xf0,每次上電都會讀0xc1這個位,如果不是0xf0,就設置時間,最后寫這個位,如果是0xc0,就不用設置了,這樣就不會每次上電都初始化了,
回答者:lfxi5107n2016-06-09 00:00
BCD碼(16進制數)。參考下面的程序(取數后送1602顯示) //向LCM中填寫 年 數據 void lcm_w_yy(void){ //if(read_clock(0x8d) != yy){ yy =
提問者:sbgauge2013-05-01
這個簡單啊,DS1302不是有31字節的RAM嗎?你選擇任意一個或幾個空閑的字節單元,在初始設置時間的程序里加個判斷,如果RAM中的內容與你預設的特定標識內容相同,就直接退出不要設置時間,否則才進入設置時間程序。在設置時
提問者:pouslaugj2013-11-02
如果確認晶振損壞,建議更換。
提問者:gujian75382013-07-02
我給你個1302的吧,你參考下,1302初始化和讀寫部分都沒采用循環的,還是容易明白的
#include
提問者:mldir2013-08-18
檢查晶振,I2C驅動代碼,芯片手冊查看讀寫順序,注意12進制和24進制轉換,還有顯示部分。如果都OK還能出問題,要么是芯片壞了,要么是很初級的問題,找個會的人幫你調下吧。
提問者:q2894842852016-02-07
小時寄存器(85h、84h)的位7用于定義 DS1302是運行于12小時 模式還是24小時模式。當為高時,選擇12小時模式。在12小時模式時, 位5是 ,當為1時,表示 PM。在24小時模式時,位5是第二個10小時 位。
提問者:linda880882014-09-18