新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ATMega16內部EEPROM存儲器的應用

        ATMega16內部EEPROM存儲器的應用

        作者: 時間:2012-10-09 來源:網絡 收藏

          位2-EEMWE:主機寫入允許。該位決定是否允許對進行寫入操作。當EEMWE被置位時,在EEWE為1的4個時鐘周期內,將寫數據到指定的地址;當EEMWE為0,設置EEWE為1不能觸發寫操作。

          位1-EEWE:EEPROM寫允許。 該位作為EEPROM的寫入觸發。當地址和數據被正確設置以后,且EEMWE為1,則置位EEWE,將觸發數據寫入EEPROM。如果EEMWE不為1,EEWE不能觸發寫EEPROM的操作。寫EEPROM應該遵循以下步驟:

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

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

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

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

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

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

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

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

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

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

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

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

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

          ICC AVR用以下方法產生用于寫入EEPROM的eep文件:

          #pragma data:eeprom

          //設置數據區到EEPROM

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

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

          char password[]={“CBC:

          123456%ABC@163.COM:

          ABCDEFG$")

          //假設我們用“%”作為密碼之

          間的分割;“$”為密碼結束標志

          #pragma data:data

          //設置數據區回到數據

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

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

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

          工作中的系統如上圖所示。 因為本文介紹的“密碼保管箱”要借助于電腦進行顯示,還不夠獨立,筆者將在下期介紹如何使用ATMega16控制液晶顯示屏,讓密碼保管箱可以獨立使用。

        存儲器相關文章:存儲器原理



        上一頁 1 2 下一頁

        關鍵詞: ATMega16 EEPROM 存儲器

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 隆昌县| 光山县| 萨嘎县| 潢川县| 盐源县| 蓝山县| 沙河市| 孟州市| 工布江达县| 瑞昌市| 桐梓县| 建湖县| 辰溪县| 晋宁县| 民勤县| 松原市| 安阳市| 烟台市| 孝感市| 望奎县| 依兰县| 赞皇县| 麻栗坡县| 滦南县| 台山市| 平陆县| 福海县| 延津县| 大名县| 临颍县| 亳州市| 大理市| 宜丰县| 长岭县| 潼南县| 榆社县| 庆元县| 遂昌县| 武穴市| 焦作市| 清新县|