ATMega16內部EEPROM存儲器的應用
位2-EEMWE:EEPROM主機寫(xiě)入允許。該位決定是否允許對EEPROM進(jìn)行寫(xiě)入操作。當EEMWE被置位時(shí),在EEWE為1的4個(gè)時(shí)鐘周期內,將寫(xiě)數據到指定的地址;當EEMWE為0,設置EEWE為1不能觸發(fā)寫(xiě)EEPROM操作。
位1-EEWE:EEPROM寫(xiě)允許。 該位作為EEPROM的寫(xiě)入觸發(fā)。當地址和數據被正確設置以后,且EEMWE為1,則置位EEWE,將觸發(fā)數據寫(xiě)入EEPROM。如果EEMWE不為1,EEWE不能觸發(fā)寫(xiě)EEPROM的操作。寫(xiě)EEPROM應該遵循以下步驟:
(1)等待EEWE為0,即EEPROM為空閑狀態(tài);
(2)等待SPMCR寄存器中的SPMEN位為0;
(3)寫(xiě)新的EEPROM地址到寄存器EEAR(視具體情況可選);
(4)寫(xiě)新的EEPROM數據到寄存器EEDR(視具體情況可選);
(5)寫(xiě)1到EEMWE,并同時(shí)寫(xiě)0到EEWE;
(6)在寫(xiě)1到EEMWE后的4個(gè)時(shí)鐘周期內,寫(xiě)1到EEWE位。
步驟(2)一般情況下可以省略,還需要注意的是,在步驟(5)和步驟(6)之間發(fā)生中斷將使寫(xiě)入過(guò)程失敗,因此建議在對EEPROM進(jìn)行寫(xiě)操作時(shí)清零全局中斷允許標志位以屏蔽所有中斷。
位0-EERE:EEPROM讀允許。該標志作為讀取EEPROM操作的觸發(fā)。當EEAR寄存器被設置了正確的地址后,向EERE位寫(xiě)入1,將觸發(fā)EEPROM的讀取操作。
簡(jiǎn)單的讀寫(xiě)EEPROM的C代碼見(jiàn)本期配刊光盤(pán)的本文目錄。
有了上述內容,實(shí)現“密碼保管箱”實(shí)例的程序流程就比較簡(jiǎn)單了。先完成ATMega16單片機的初始化,其初始化代碼可以通過(guò)ICC AVR軟件自動(dòng)生成。之后,程序開(kāi)始檢測4×4小鍵盤(pán)上的輸入,如果小鍵盤(pán)的輸入與程序中設定的密碼管理箱密碼相同,則將存儲在EEPROM中的密碼送到串口中通過(guò)電腦或液晶顯示模塊進(jìn)行顯示。當然,我們還需要考慮一些編程細節,比如如何比較設定的密碼與用戶(hù)輸入的密碼等。關(guān)于小鍵盤(pán)的操作我們在今年第5期第39頁(yè)的文章中已經(jīng)用匯編語(yǔ)言實(shí)現過(guò),本期配刊光盤(pán)中給出了采用C語(yǔ)言編寫(xiě)的程序,代碼看起來(lái)更清晰易懂。
設計好程序后,我們可以用上期介紹的ICC AVR軟件進(jìn)行程序的編譯。打開(kāi)ICC AVR,建立一個(gè)工程psmanager,并在工程選項里設定芯片為ATMega16,然后選擇Tools→Application Builder,或者點(diǎn)擊菜單欄上的快捷圖標,進(jìn)入應用程序生成器,可以幫助用戶(hù)快速生成初始化等相關(guān)代碼。
如次啊圖所示,Target CPU選擇M16,Xtal speed根據實(shí)際使用情況選擇。在Ports項里面是端口初始狀態(tài)的設置。Timer0、Timer1、Timer2中分別是ATMega16的3個(gè)定時(shí)器的設置。UART中是串口的設置。根據實(shí)際需要選擇合適的設置,然后點(diǎn)擊OK,ICC AVR會(huì )按照所設置的選項產(chǎn)生初始化代碼,用戶(hù)也可以自行編寫(xiě)初始化代碼。
將Application Builder。產(chǎn)生的代碼保存為main.c,并且加入工程。接下來(lái)將需要寫(xiě)入EEPROM的密碼生成*.eep文件,假設有兩組密碼需要存儲,分別是建設銀行卡密碼(為123456)和EMAIL ABC@163.COM密碼(為ABCDEFG),并設定密碼保管箱的密碼為“567890”。
ICC AVR用以下方法產(chǎn)生用于寫(xiě)入EEPROM的eep文件:
#pragma data:eeprom
?。O置數據區到EEPROM
char key[]={‘5’,‘6’,‘7’,
‘8’,‘9’,‘O’}
char password[]={“CBC:
123456%ABC@163.COM:
ABCDEFG$")
?。僭O我們用“%”作為密碼之
間的分割;“$”為密碼結束標志
#pragma data:data
?。O置數據區回到數據存儲器
將以上代碼添加在main.c中,注意必須緊跟著(zhù)頭文件之后。這樣ICC AVR編譯完成后,除了生成單片機執行文件}.hex,同時(shí)還將產(chǎn)生一個(gè)eep文件,可以通過(guò)Ponyprog軟件寫(xiě)入ATMega16的EEPROM存儲器中。由于某種原因,在A(yíng)TMega16的O~511共512個(gè)字節的EEPROM中,在地址O處的字節是不能使用的,所以上面的密碼將從EEPROM的地址1處依次存儲,即ATMega16可用的EEPROM為511個(gè)字節。
本例程中將功能相關(guān)的函數放在一起構成一個(gè)C文件,因此在一個(gè)工程中會(huì )有多個(gè)C源文件,這樣做的好處是使得結構清晰,修改和擴充都很方便。但是要注意文件包含問(wèn)題,可以查閱相關(guān)的C語(yǔ)言書(shū)籍。
在完成所有的代碼后進(jìn)行編譯,將編譯后生成的hex文件和eep文件一起寫(xiě)入ATMega16。步驟如下:打開(kāi)Ponyprog軟件,選擇File→OpenProgram(FLASH)File,選中生成的hex文件;再選擇File→Open Data(EEPROM)File,將文件類(lèi)型更改為*.eep,然后選中eep文件。連接好硬件后,點(diǎn)擊Command→Write All,即可寫(xiě)入。
工作中的系統如上圖所示。 因為本文介紹的“密碼保管箱”要借助于電腦進(jìn)行顯示,還不夠獨立,筆者將在下期介紹如何使用ATMega16控制液晶顯示屏,讓密碼保管箱可以獨立使用。
存儲器相關(guān)文章:存儲器原理
評論