<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 單片機(jī)STC89C52RC內(nèi)部EEPROM

          單片機(jī)STC89C52RC內(nèi)部EEPROM

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

          樣使數(shù)據(jù)在掉電后不丟失呢?這就需要使用EEPROM 或FLASHROM 等存儲器來實(shí)現(xiàn)。

          本文引用地址:http://www.ex-cimer.com/article/201611/321811.htm

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

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

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


          STC89C52RC 與EEPORM 實(shí)現(xiàn)的寄存器有6 個,分別是ISP_DATA、ISP_ADDRH、ISP_ADDRL
          ISP_TRIG、ISP_CMD、ISP_CONTR。

          1. ISP_DATA 寄存器
          ISP_DATA 寄存器:ISP/IAP 操作時的數(shù)據(jù)寄存器。
          ISP/IAP 從Flash 的數(shù)據(jù)在此處,向Flash 寫的數(shù)據(jù)也須放在此處。
          示例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:設(shè)置地址
          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 設(shè)置的命令要生效,必須通過ISP_TRIG 命令觸發(fā)寄存器進(jìn)行觸發(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:產(chǎn)生軟件系統(tǒng)復(fù)位,硬件自動清零
          WT2、WT1、WT0:設(shè)置等待時間

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


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


          評論


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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();