第46節(jié):利用AT24C02進(jìn)行掉電后的數(shù)據(jù)保存
從業(yè)近十年!手把手教你單片機(jī)程序框架 第46講
開場白:
一個AT24C02可以存儲256個字節(jié),地址范圍是(0至255)。利用AT24C02存儲數(shù)據(jù)時(shí),要教會大家六個知識點(diǎn):
第一個:單片機(jī)操作AT24C02的通訊過程也就是IIC的通訊過程, IIC通訊過程是一個要求一氣呵成的通訊過程,中間不能被其它中斷影響時(shí)序出錯,因此在整個通訊過程中應(yīng)該先關(guān)閉總中斷,完成之后再開中斷。
第二個:在寫入或者讀取完一個字節(jié)之后,一定要加上一段延時(shí)時(shí)間。在11.0592M晶振的系統(tǒng)中,寫入數(shù)據(jù)時(shí)經(jīng)驗(yàn)值用delay_short(2000),讀取數(shù)據(jù)時(shí)經(jīng)驗(yàn)值用delay_short(800)。否則在連續(xù)寫入或者讀取一串?dāng)?shù)據(jù)時(shí)容易丟失數(shù)據(jù)。如果一旦發(fā)現(xiàn)丟失數(shù)據(jù),應(yīng)該適當(dāng)繼續(xù)把這個時(shí)間延長,尤其是在寫入數(shù)據(jù)時(shí)。
第三個:如何初始化EEPROM數(shù)據(jù)的方法。系統(tǒng)第一次上電時(shí),我們從EEPROM讀取出來的數(shù)據(jù)有可能超出了范圍,可能是ff。這個時(shí)候我們應(yīng)該給它填入一個初始化的數(shù)據(jù),這一步千萬別漏了。
第四個:在時(shí)序中,發(fā)送ACK確認(rèn)信號時(shí),要記得把數(shù)據(jù)線eeprom_sda_dr_s設(shè)置為輸入的狀態(tài)。對于51單片機(jī)來說,只要把eeprom_sda_dr_s=1就可以。而對于PIC或者AVR單片機(jī)來說,它們都是帶方向寄存器的,就不能直接eeprom_sda_dr_s=1,而要直接修改方向寄存器,把它設(shè)置為輸入狀態(tài)。在本驅(qū)動程序中,我沒有對ACK信號進(jìn)行出錯判斷,因?yàn)槲疫@么多年一直都是這樣用也沒出現(xiàn)過什么問題。
第五個: 提醒各位讀者在硬件上應(yīng)該注意的問題,單片機(jī)跟AT24C02通訊的2根IO口都要加上一個4.7K左右的上拉電阻。凡是在IIC通訊場合,都要加上拉電阻。AT24C02的WP引腳一定要接地,否則存不進(jìn)數(shù)據(jù)。
第六個:舊版的朱兆祺51學(xué)習(xí)板在硬件上有一個bug,AT24C02的第8個引腳VCC懸空了!!!,讀者記得把它飛線連接到5V電源處。新版的朱兆祺51學(xué)習(xí)板已經(jīng)改過來了。
具體內(nèi)容,請看源代碼講解。
(1)硬件平臺:
基于朱兆祺51單片機(jī)學(xué)習(xí)板。
(2)實(shí)現(xiàn)功能:
4個被更改后的參數(shù)斷電后不丟失,數(shù)據(jù)可以保存,斷電再上電后還是上一次最新被修改的數(shù)據(jù)。
顯示和獨(dú)立按鍵部分根據(jù)第29節(jié)的程序來改編,用朱兆祺51單片機(jī)學(xué)習(xí)板中的S1,S5,S9作為獨(dú)立按鍵。
一共有4個窗口。每個窗口顯示一個參數(shù)。
第8,7,6,5位數(shù)碼管顯示當(dāng)前窗口,P-1代表第1個窗口,P-2代表第2個窗口,P-3代表第3個窗口,P-4代表第1個窗口。
第4,3,2,1位數(shù)碼管顯示當(dāng)前窗口被設(shè)置的參數(shù)。范圍是從0到9999。S1是加按鍵,按下此按鍵會依次增加當(dāng)前窗口的參數(shù)。S5是減按鍵,按下此按鍵會依次減少當(dāng)前窗口的參數(shù)。S9是切換窗口按鍵,按下此按鍵會依次循環(huán)切換不同的窗口。
(3)源代碼講解如下:
總結(jié)陳詞:
IIC通訊過程是一個要求一氣呵成的通訊過程,中間不能被其它中斷影響時(shí)序出錯,因此,在整個通訊過程中應(yīng)該先關(guān)閉總中斷,完成之后再開中斷。但是,這樣就會引起另外一個新問題,如果關(guān)閉總中斷的時(shí)間太長,會導(dǎo)致動態(tài)數(shù)碼管不能及時(shí)均勻的掃描,在按鍵更改參數(shù),內(nèi)部操作EEPROM時(shí),數(shù)碼管就會出現(xiàn)短暫明顯的閃爍現(xiàn)象,解決這個問題最好的辦法就是在做項(xiàng)目中盡量不要用動態(tài)掃描數(shù)碼管的方案,應(yīng)該用靜態(tài)顯示的方案。那么在程序上還有沒有改善這種現(xiàn)象的方法?當(dāng)然有。欲知詳情,請聽下回分解-----操作AT24C02時(shí),利用“一氣呵成的定時(shí)器方式”改善數(shù)碼管的閃爍現(xiàn)象。