新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 單片機STC89C52RC內部EEPROM

        單片機STC89C52RC內部EEPROM

        作者: 時間:2016-11-26 來源:網絡 收藏
        單片機運行時的數據都存在于RAM(隨機存儲器)中,在掉電后RAM 中的數據是無法保留的,那么怎

        樣使數據在掉電后不丟失呢?這就需要使用EEPROM 或FLASHROM 等存儲器來實現。

        本文引用地址:http://www.104case.com/article/201611/321811.htm

        在傳統(tǒng)的單片機系統(tǒng)中,一般是在片外擴展存儲器,單片機與存儲器之間通過IIC 或SPI 等接口來進行數據通信。

        這樣不光會增加開發(fā)成本,同時在程序開發(fā)上也要花更多的心思。在STC 單片機中內置了EEPROM(其實是采用
        ISP/IAP 技術讀寫內部FLASH 來實現EEPROM),這樣就節(jié)省了片外資源,使用起來也更加方便。下面
        就詳細介紹STC 單片機內置EEPROM 及其使用方法

        STC 各型號單片機內置的EEPROM 的容量最小有2K,最大有16K,基本上很好地滿足項目的需要,更
        方便之處就是節(jié)省了周邊的EEPROM 器件,達到節(jié)省成本的目的,而且內部EEPROM 的速度比外部的
        EEPROM 的速度快很多。
        STC 各型號單片機內置的EEPROM 是以512 字節(jié)為一個扇區(qū),EEPROM 的起始地址=FALSH 容量值+1,
        那么STC89C52RC 的起始地址為0x2000,第一扇區(qū)的起始地址和結束地址0x2000~0x21FF,第二扇區(qū)
        的起始地址和結束地址0x2200~0x23FF,其他扇區(qū)如此類推。
        深入重點:
        ?傳統(tǒng)的EEPROM 是電可擦可編程只讀存儲一種掉電后數據不丟失的存儲芯片。
        ? STC89C52RC 的EEPROM 是通過ISP/IAP 技術讀寫內部FLASH 來實現EEPROM。
        ? STC89C52RC 的EEPROM 起始地址為0x2000,以512 字節(jié)為一個扇區(qū),EERPOM 的大小為2K 字節(jié)。


        STC89C52RC 與EEPORM 實現的寄存器有6 個,分別是ISP_DATA、ISP_ADDRH、ISP_ADDRL
        ISP_TRIG、ISP_CMD、ISP_CONTR。

        1. ISP_DATA 寄存器
        ISP_DATA 寄存器:ISP/IAP 操作時的數據寄存器。
        ISP/IAP 從Flash 的數據在此處,向Flash 寫的數據也須放在此處。
        示例1:讀單個字節(jié)
        UINT8 EEPROMRead(UINT16 addr)
        {
        ……
        return ISP_DATA;
        }
        示例2:寫單個字節(jié)
        void EEPROMWrite(UINT8 byte)
        {
        ……
        ISP_DATA=byte;
        }

        2.ISP_ADDRH、ISP_ADDRL 寄存器
        ISP_ADDRH: ISP/IAP 操作時的地址寄存器高八位
        ISP_ADDRL: ISP/IAP 操作時的地址寄存器低八位
        示例1:設置地址
        void EEPROMSetAddress(UINT16 Addr)
        {
        ……
        ISP_ADDRH=(UINT8)(Addr>>8);
        ISP_ADDRL=(UINT8) Addr;
        }

        3.ISP_CMD 寄存器
        ISP_CMD: ISP/IAP 操作時的命令模式寄存器,需要通過ISP_TRIG 命令觸發(fā)寄存器才能生效。

        4.ISP_TRIG 寄存器
        ISP/IAP 命令要生效即ISP_CMD 設置的命令要生效,必須通過ISP_TRIG 命令觸發(fā)寄存器進行觸發(fā)。
        觸發(fā)過程很特別,只需要連續(xù)二次對ISP_TRIG 寄存器賦值就可以的了,對ISP_TRIG 寄存器先寫入
        0x46,再寫入0xB9 就完成命令觸發(fā)的過程。
        示例1:命令觸發(fā)
        void EEPROMCmdTrig(void)
        {
        ……
        ISP_TRIG=0x46;
        ISP_TRIG=0xB9;
        }
        5.ISP_CONTR 寄存器
        ISP_CONTR:ISP/IAP 控制寄存器
        ISPEN:ISP/IAP 功能允許位。0:禁止ISP/IAP 編程改變Flash。
        SWBS: 0:軟件選擇從用戶主程序區(qū)啟動1:ISP 程序區(qū)啟動
        SWRST: 0:不操作1:產生軟件系統(tǒng)復位,硬件自動清零
        WT2、WT1、WT0:設置等待時間

        假如STC89C52RC 的工作頻率為12MHz,那么機器周期為1us,參照表12-,EEPROM 的讀單個字
        節(jié)、寫單個字節(jié)、扇區(qū)擦除的所需要的時間大致如下:
        讀單字節(jié): 11*1us=11us
        寫單字節(jié): 60*1us=60us
        扇區(qū)擦除: 10942*1us=10.942ms
        無論單片機運行在什么工作頻率下,EEPROM 的讀、寫、擦除操作的所需要的時間分別約為10us、60us、
        10ms。


        深入重點:
        ? STC89C52RC 與EEPORM 實現的寄存器有6 個,分別是ISP_DATA、ISP_ADDRH、
        ISP_ADDRL ISP_TRIG、ISP_CMD、ISP_CONTR。
        ? EEPROM 的命令觸發(fā)必須對ISP_TRIG 寄存器先寫入0x46,再寫入0xB9。
        ? 無論單片機運行在什么工作頻率下,EEPROM 的讀、寫、擦除操作的所需要的時間分別約
        為10us、60us、10ms,因而要對ISP_CONTR 設置好等待時間,否則數據容易出現問題。


        評論


        技術專區(qū)

        關閉
        主站蜘蛛池模板: 卢湾区| 明溪县| 贵南县| 柘城县| 卢湾区| 宜宾市| 平陆县| 自治县| 昌宁县| 甘谷县| 大兴区| 甘孜| 灵石县| 黑河市| 故城县| 红桥区| 天水市| 武鸣县| 荆州市| 淮北市| 依安县| 罗甸县| 安远县| 加查县| 金坛市| 青铜峡市| 邵阳市| 望都县| 平潭县| 汕头市| 泗阳县| 钟祥市| 玛曲县| 农安县| 泰宁县| 兴业县| 饶平县| 洛南县| 呈贡县| 错那县| 平昌县|