提問者:blissfulpuppy2013-06-09 00:00
系統(tǒng)上電對(duì)DS1302進(jìn)行初始化一般都是先禁用write-protect,然后寫入初始數(shù)據(jù),但是這樣的話每次斷電重新上電,都寫入這個(gè)數(shù)據(jù),那不就失去了RTC的意義了?怎樣才能讓DS1302能一直運(yùn)行下去,而不用每次系統(tǒng)上電都會(huì)把初始值重新寫入?DS1302配有電池
void Set_RTC(void) //設(shè)定 日歷 { 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次寫入 秒分時(shí)日月周年 { Write_Ds1302(*p,l_tmpdate[i]); p++; } Write_Ds1302(0xc0,0xf0); //判斷是否初始化一次標(biāo)識(shí)寫入 Write_Ds1302(0x8E,0x80); //寫保護(hù)設(shè)置 } } 我是這樣子做的,在C0寄存器寫0xf0,每次上電都會(huì)讀0xc1這個(gè)位,如果不是0xf0,就設(shè)置時(shí)間,最后寫這個(gè)位,如果是0xc0,就不用設(shè)置了,這樣就不會(huì)每次上電都初始化了,
回答者:lfxi5107n2016-06-09 00:00
BCD碼(16進(jìn)制數(shù))。參考下面的程序(取數(shù)后送1602顯示) //向LCM中填寫 年 數(shù)據(jù) void lcm_w_yy(void){ //if(read_clock(0x8d) != yy){ yy =
提問者:sbgauge2013-05-01
如果確認(rèn)晶振損壞,建議更換。
提問者:gujian75382013-07-02
檢查晶振,I2C驅(qū)動(dòng)代碼,芯片手冊(cè)查看讀寫順序,注意12進(jìn)制和24進(jìn)制轉(zhuǎn)換,還有顯示部分。如果都OK還能出問題,要么是芯片壞了,要么是很初級(jí)的問題,找個(gè)會(huì)的人幫你調(diào)下吧。
提問者:q2894842852016-02-07
實(shí)際上左右的 i2c都是通的 你可以看一下電路圖就明白
提問者:qwfoy2016-02-17
小時(shí)寄存器(85h、84h)的位7用于定義 DS1302是運(yùn)行于12小時(shí) 模式還是24小時(shí)模式。當(dāng)為高時(shí),選擇12小時(shí)模式。在12小時(shí)模式時(shí), 位5是 ,當(dāng)為1時(shí),表示 PM。在24小時(shí)模式時(shí),位5是第二個(gè)10小時(shí) 位。
提問者:linda880882014-09-18
這個(gè)簡(jiǎn)單啊,DS1302不是有31字節(jié)的RAM嗎?你選擇任意一個(gè)或幾個(gè)空閑的字節(jié)單元,在初始設(shè)置時(shí)間的程序里加個(gè)判斷,如果RAM中的內(nèi)容與你預(yù)設(shè)的特定標(biāo)識(shí)內(nèi)容相同,就直接退出不要設(shè)置時(shí)間,否則才進(jìn)入設(shè)置時(shí)間程序。在設(shè)置時(shí)
提問者:pouslaugj2013-11-02