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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > STC單片機EEPROM功能模塊

          STC單片機EEPROM功能模塊

          作者: 時間:2016-11-23 來源:網絡 收藏
          // STC單片機EEPROM功能模塊

          #include
          #include

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

          // 聲明與IAP相關的SFR
          sfr IAP_DATA = 0xE2;
          sfr IAP_ADDRH = 0xE3;
          sfr IAP_ADDRL = 0xE4;
          sfr IAP_CMD = 0xE5;
          sfr IAP_TRIG = 0xE6;
          sfr IAP_CONTR = 0xE7;

          // 定義ISP/IAP/EEPROM命令
          #define CMD_IDLE 0
          #define CMD_READ 1
          #define CMD_PROGRAM 2
          #define CMD_ERASE 3

          // 定義IAP_CONTR的值ENABLE_IAP,根據時鐘頻率有所不同
          //#define ENABLE_IAP 0x80 // 時鐘頻率<30MHz
          //#define ENABLE_IAP 0x81 // 時鐘頻率<24MHz
          //#define ENABLE_IAP 0x82 // 時鐘頻率<20MHz
          #define ENABLE_IAP 0x83 // 時鐘頻率<12MHz
          //#define ENABLE_IAP 0x84 // 時鐘頻率<6MHz
          //#define ENABLE_IAP 0x85 // 時鐘頻率<3MHz
          //#define ENABLE_IAP 0x86 // 時鐘頻率<2MHz
          //#define ENABLE_IAP 0x87 // 時鐘頻率<1MHz

          // EEPROM數(shù)據保存的首地址
          #define IAP_ADDRESS 0x0800 // 應跳過程序所占空間的位置

          // 禁止ISP/IAP/EEPROM功能
          void IapIdle()
          {
          IAP_CONTR = 0;
          IAP_CMD = 0;
          IAP_TRIG = 0;
          IAP_ADDRH = 0;
          IAP_ADDRL = 0;
          }

          // 從EEPROM中讀一個字節(jié)
          BYTE IapReadByte(WORD addr)
          {
          BYTE dat;

          IAP_CONTR = ENABLE_IAP;
          IAP_CMD = CMD_READ;
          IAP_ADDRL = addr;
          IAP_ADDRH = addr >> 8;
          // 注意對于STC12C2052(AD)單片機,應先寫入0x46,再寫入0xb9
          // 而對于STC12C5A60S2單片機,應先寫入0x5a,再寫入0xa5
          IAP_TRIG = 0x46;
          IAP_TRIG = 0xb9;
          _nop_();

          dat = IAP_DATA;
          IapIdle();

          return (dat);
          }

          // 寫一個字節(jié)到EEPROM
          void IapProgramByte(WORD addr, BYTE dat)
          {
          IAP_CONTR = ENABLE_IAP;
          IAP_CMD = CMD_PROGRAM;
          IAP_ADDRL = addr;
          IAP_ADDRH = addr >> 8;
          IAP_DATA = dat;
          IAP_TRIG = 0x46;
          IAP_TRIG = 0xb9;
          _nop_();

          IapIdle();
          }

          // 擦除EEPROM中的一個扇區(qū)
          void IapEraseSector(WORD addr)
          {
          IAP_CONTR = ENABLE_IAP;
          IAP_CMD = CMD_ERASE;
          IAP_ADDRL = addr;
          IAP_ADDRH = addr >> 8;
          IAP_TRIG = 0x46;
          IAP_TRIG = 0xb9;
          _nop_();

          IapIdle();
          }




          評論


          技術專區(qū)

          關閉
          看屁屁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); })();