新聞中心

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

        STC單片機EEPROM功能模塊

        作者: 時間:2016-11-23 來源:網(wǎng)絡(luò) 收藏
        // STC單片機EEPROM功能模塊

        #include
        #include

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

        // 聲明與IAP相關(guān)的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,根據(jù)時鐘頻率有所不同
        //#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ù)據(jù)保存的首地址
        #define IAP_ADDRESS 0x0800 // 應(yīng)跳過程序所占空間的位置

        // 禁止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)單片機,應(yīng)先寫入0x46,再寫入0xb9
        // 而對于STC12C5A60S2單片機,應(yīng)先寫入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();
        }




        關(guān)鍵詞: STC單片機EEPROM功能模

        評論


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

        關(guān)閉
        主站蜘蛛池模板: 涟水县| 贡觉县| 苏尼特左旗| 根河市| 清丰县| 图们市| 肇源县| 云霄县| 晋宁县| 龙里县| 四会市| 兴宁市| 蕲春县| 阿勒泰市| 霍城县| 黄骅市| 秦安县| 亚东县| 普安县| 武陟县| 长兴县| 清苑县| 自贡市| 泰兴市| 甘肃省| 襄樊市| 东乡| 呈贡县| 固安县| 阳山县| 乌什县| 亳州市| 湾仔区| 朝阳市| 黄山市| 澎湖县| 屯留县| 响水县| 太谷县| 阜平县| 叶城县|