新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > ATMega16內(nèi)部EEPROM存儲器的應(yīng)用

ATMega16內(nèi)部EEPROM存儲器的應(yīng)用

作者: 時間:2012-10-09 來源:網(wǎng)絡(luò) 收藏

  位2-EEMWE:主機(jī)寫入允許。該位決定是否允許對進(jìn)行寫入操作。當(dāng)EEMWE被置位時,在EEWE為1的4個時鐘周期內(nèi),將寫數(shù)據(jù)到指定的地址;當(dāng)EEMWE為0,設(shè)置EEWE為1不能觸發(fā)寫操作。

  位1-EEWE:EEPROM寫允許。 該位作為EEPROM的寫入觸發(fā)。當(dāng)?shù)刂泛蛿?shù)據(jù)被正確設(shè)置以后,且EEMWE為1,則置位EEWE,將觸發(fā)數(shù)據(jù)寫入EEPROM。如果EEMWE不為1,EEWE不能觸發(fā)寫EEPROM的操作。寫EEPROM應(yīng)該遵循以下步驟:

  (1)等待EEWE為0,即EEPROM為空閑狀態(tài);

  (2)等待SPMCR寄存器中的SPMEN位為0;

  (3)寫新的EEPROM地址到寄存器EEAR(視具體情況可選);

  (4)寫新的EEPROM數(shù)據(jù)到寄存器EEDR(視具體情況可選);

  (5)寫1到EEMWE,并同時寫0到EEWE;

  (6)在寫1到EEMWE后的4個時鐘周期內(nèi),寫1到EEWE位。

  步驟(2)一般情況下可以省略,還需要注意的是,在步驟(5)和步驟(6)之間發(fā)生中斷將使寫入過程失敗,因此建議在對EEPROM進(jìn)行寫操作時清零全局中斷允許標(biāo)志位以屏蔽所有中斷。

  位0-EERE:EEPROM讀允許。該標(biāo)志作為讀取EEPROM操作的觸發(fā)。當(dāng)EEAR寄存器被設(shè)置了正確的地址后,向EERE位寫入1,將觸發(fā)EEPROM的讀取操作。

  簡單的讀寫EEPROM的C代碼見本期配刊光盤的本文目錄。

  有了上述內(nèi)容,實(shí)現(xiàn)“密碼保管箱”實(shí)例的程序流程就比較簡單了。先完成單片機(jī)的初始化,其初始化代碼可以通過ICC AVR軟件自動生成。之后,程序開始檢測4×4小鍵盤上的輸入,如果小鍵盤的輸入與程序中設(shè)定的密碼管理箱密碼相同,則將存儲在EEPROM中的密碼送到串口中通過電腦或液晶顯示模塊進(jìn)行顯示。當(dāng)然,我們還需要考慮一些編程細(xì)節(jié),比如如何比較設(shè)定的密碼與用戶輸入的密碼等。關(guān)于小鍵盤的操作我們在今年第5期第39頁的文章中已經(jīng)用匯編語言實(shí)現(xiàn)過,本期配刊光盤中給出了采用C語言編寫的程序,代碼看起來更清晰易懂。

  設(shè)計(jì)好程序后,我們可以用上期介紹的ICC AVR軟件進(jìn)行程序的編譯。打開ICC AVR,建立一個工程psmanager,并在工程選項(xiàng)里設(shè)定芯片為,然后選擇Tools→Application Builder,或者點(diǎn)擊菜單欄上的快捷圖標(biāo),進(jìn)入應(yīng)用程序生成器,可以幫助用戶快速生成初始化等相關(guān)代碼。

  如次啊圖所示,Target CPU選擇M16,Xtal speed根據(jù)實(shí)際使用情況選擇。在Ports項(xiàng)里面是端口初始狀態(tài)的設(shè)置。Timer0、Timer1、Timer2中分別是的3個定時器的設(shè)置。UART中是串口的設(shè)置。根據(jù)實(shí)際需要選擇合適的設(shè)置,然后點(diǎn)擊OK,ICC AVR會按照所設(shè)置的選項(xiàng)產(chǎn)生初始化代碼,用戶也可以自行編寫初始化代碼。

  將Application Builder。產(chǎn)生的代碼保存為main.c,并且加入工程。接下來將需要寫入EEPROM的密碼生成*.eep文件,假設(shè)有兩組密碼需要存儲,分別是建設(shè)銀行卡密碼(為123456)和EMAIL ABC@163.COM密碼(為ABCDEFG),并設(shè)定密碼保管箱的密碼為“567890”。

  ICC AVR用以下方法產(chǎn)生用于寫入EEPROM的eep文件:

  #pragma data:eeprom

 ?。O(shè)置數(shù)據(jù)區(qū)到EEPROM

  char key[]={‘5’,‘6’,‘7’,

  ‘8’,‘9’,‘O’}

  char password[]={“CBC:

  123456%ABC@163.COM:

  ABCDEFG$")

  //假設(shè)我們用“%”作為密碼之

  間的分割;“$”為密碼結(jié)束標(biāo)志

  #pragma data:data

 ?。O(shè)置數(shù)據(jù)區(qū)回到數(shù)據(jù)

  將以上代碼添加在main.c中,注意必須緊跟著頭文件之后。這樣ICC AVR編譯完成后,除了生成單片機(jī)執(zhí)行文件}.hex,同時還將產(chǎn)生一個eep文件,可以通過Ponyprog軟件寫入ATMega16的EEPROM中。由于某種原因,在ATMega16的O~511共512個字節(jié)的EEPROM中,在地址O處的字節(jié)是不能使用的,所以上面的密碼將從EEPROM的地址1處依次存儲,即ATMega16可用的EEPROM為511個字節(jié)。

  本例程中將功能相關(guān)的函數(shù)放在一起構(gòu)成一個C文件,因此在一個工程中會有多個C源文件,這樣做的好處是使得結(jié)構(gòu)清晰,修改和擴(kuò)充都很方便。但是要注意文件包含問題,可以查閱相關(guān)的C語言書籍。

  在完成所有的代碼后進(jìn)行編譯,將編譯后生成的hex文件和eep文件一起寫入ATMega16。步驟如下:打開Ponyprog軟件,選擇File→OpenProgram(FLASH)File,選中生成的hex文件;再選擇File→Open Data(EEPROM)File,將文件類型更改為*.eep,然后選中eep文件。連接好硬件后,點(diǎn)擊Command→Write All,即可寫入。

  工作中的系統(tǒng)如上圖所示。 因?yàn)楸疚慕榻B的“密碼保管箱”要借助于電腦進(jìn)行顯示,還不夠獨(dú)立,筆者將在下期介紹如何使用ATMega16控制液晶顯示屏,讓密碼保管箱可以獨(dú)立使用。

存儲器相關(guān)文章:存儲器原理



上一頁 1 2 下一頁

關(guān)鍵詞: ATMega16 EEPROM 存儲器

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉