提問者:blissfulpuppy2013-06-09 00:00
系統(tǒng)上電對DS1302進行初始化一般都是先禁用write-protect,然后寫入初始數(shù)據(jù),但是這樣的話每次斷電重新上電,都寫入這個數(shù)據(jù),那不就失去了RTC的意義了?怎樣才能讓DS1302能一直運行下去,而不用每次系統(tǒng)上電都會把初始值重新寫入?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
這個簡單啊,DS1302不是有31字節(jié)的RAM嗎?你選擇任意一個或幾個空閑的字節(jié)單元,在初始設置時間的程序里加個判斷,如果RAM中的內(nèi)容與你預設的特定標識內(nèi)容相同,就直接退出不要設置時間,否則才進入設置時間程序。在設置時
提問者:pouslaugj2013-11-02
實際上左右的 i2c都是通的 你可以看一下電路圖就明白
提問者:qwfoy2016-02-17
小時寄存器(85h、84h)的位7用于定義 DS1302是運行于12小時 模式還是24小時模式。當為高時,選擇12小時模式。在12小時模式時, 位5是 ,當為1時,表示 PM。在24小時模式時,位5是第二個10小時 位。
提問者:linda880882014-09-18
如果確認晶振損壞,建議更換。
提問者:gujian75382013-07-02
BCD碼(16進制數(shù))。參考下面的程序(取數(shù)后送1602顯示) //向LCM中填寫 年 數(shù)據(jù) void lcm_w_yy(void){ //if(read_clock(0x8d) != yy){ yy =
提問者:sbgauge2013-05-01
我給你個1302的吧,你參考下,1302初始化和讀寫部分都沒采用循環(huán)的,還是容易明白的
#include
提問者:mldir2013-08-18