久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9636|回復: 0
打印 上一主題 下一主題
收起左側

EEPROM.H頭文件下載<51單片機使用Flash ROM模擬EEPROM 先擦除后編輯>

[復制鏈接]
跳轉到指定樓層
樓主
ID:80436 發表于 2015-5-19 01:47 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
EEPROM.H stc單片機片內存儲器的操作頭文件下載:

#ifndef
_EERPOM_H_
#define _EEPROM_H_

#include <reg51.h>
#include "intrins.h"

#define nop() _nop_()

#define uint8   unsigned char
#define uint16  unsigned int

/*Declare SFR associated with the IAP */
sfr IAP_DATA    =   0xC2;       //Flash data register
sfr IAP_ADDRH   =   0xC3;       //Flash address HIGH
sfr IAP_ADDRL   =   0xC4;       //Flash address LOW
sfr IAP_CMD     =   0xC5;       //Flash command register
sfr IAP_TRIG    =   0xC6;       //Flash command trigger
sfr IAP_CONTR   =   0xC7;       //Flash control register

/*Define ISP/IAP/EEPROM command*/
#define CMD_IDLE    0           //Stand-By
#define CMD_READ    1           //Byte-Read
#define CMD_PROGRAM 2           //Byte-Program
#define CMD_ERASE   3           //Sector-Erase

/*Define ISP/IAP/EEPROM operation const for IAP_CONTR*/
        //#define ENABLE_IAP 0x80       //if SYSCLK<30MHz
#define ENABLE_IAP 0x81       //if SYSCLK<24MHz
        //#define ENABLE_IAP 0x82       //if SYSCLK<20MHz
        //#define ENABLE_IAP 0x83       //if SYSCLK<12MHz
        //#define ENABLE_IAP 0x84       //if SYSCLK<6MHz
        //#define ENABLE_IAP 0x85       //if SYSCLK<3MHz
        //#define ENABLE_IAP 0x86       //if SYSCLK<2MHz
        //#define ENABLE_IAP 0x87       //if SYSCLK<1MHz

        //Start address for STC11/10xx EEPROM
        //#define IAP_ADDRESS 0x0400

        //Start address for STC12C5A60S2 EEPROM
#define IAP_ADDRESS 0x0000





void EEPROMDelay(uint8 n)
{
    uint16 x;

    while (n--)
    {
        x =125;
        while (x--);
    }
}

/*----------------------------
* 名稱 : IapIdle();
* 功能 : 關閉IAP EEPROM編輯功能,安全操作
----------------------------*/
void IapIdle()
{
    IAP_CONTR = 0;              //Close IAP function
    IAP_CMD = 0;                //Clear command to standby
    IAP_TRIG = 0;               //Clear trigger register
    IAP_ADDRH = 0x80;           //Data ptr point to non-EEPROM area
    IAP_ADDRL = 0;              //Clear IAP address to prevent misuse
}


/*----------------------------
* 名稱 : IapReadByte(0x0000);
* 功能 : 讀扇區
----------------------------*/
uint8 IapReadByte(uint16 addr)
{
    uint8 dat;                   //Data buffer

    IAP_CONTR = ENABLE_IAP;     //Open IAP function, and set wait time
    IAP_CMD = CMD_READ;         //Set ISP/IAP/EEPROM READ command
    IAP_ADDRL = addr;           //Set ISP/IAP/EEPROM address low
    IAP_ADDRH = addr >> 8;      //Set ISP/IAP/EEPROM address high
    IAP_TRIG = 0x5a;            //Send trigger command1 (0x5a)
    IAP_TRIG = 0xa5;            //Send trigger command2 (0xa5)
    nop();                    //MCU will hold here until ISP/IAP/EEPROM operation complete
    dat = IAP_DATA;             //Read ISP/IAP/EEPROM data
    IapIdle();                  //Close ISP/IAP/EEPROM function

    return dat;                 //Return Flash data
}

/*----------------------------
* 名稱 : IapEraseSector(0x0000);
* 功能 : 扇區擦除
----------------------------*/
void IapEraseSector(uint16 addr)
{
    IAP_CONTR = ENABLE_IAP;     //Open IAP function, and set wait time
    IAP_CMD = CMD_ERASE;        //Set ISP/IAP/EEPROM ERASE command
    IAP_ADDRL = addr;           //Set ISP/IAP/EEPROM address low
    IAP_ADDRH = addr >> 8;      //Set ISP/IAP/EEPROM address high
    IAP_TRIG = 0x5a;            //Send trigger command1 (0x5a)
    IAP_TRIG = 0xa5;            //Send trigger command2 (0xa5)
    nop();                    //MCU will hold here until ISP/IAP/EEPROM operation complete
    IapIdle();
}


/*----------------------------
* 名稱 : IapProgramByte(0x0000,data);
* 功能 : 扇區編輯
----------------------------*/
void IapProgramByte(uint16 addr, uint8 dat)
{   

    IAP_CONTR = ENABLE_IAP;     //Open IAP function, and set wait time
    IAP_CMD = CMD_PROGRAM;      //Set ISP/IAP/EEPROM PROGRAM command
    IAP_ADDRL = addr;           //Set ISP/IAP/EEPROM address low
    IAP_ADDRH = addr >> 8;      //Set ISP/IAP/EEPROM address high
    IAP_DATA = dat;             //Write ISP/IAP/EEPROM data
    IAP_TRIG = 0x5a;            //Send trigger command1 (0x5a)
    IAP_TRIG = 0xa5;            //Send trigger command2 (0xa5)
    nop();                      //MCU will hold here until ISP/IAP/EEPROM operation complete
    IapIdle();
}

/*----------------------------
* 名稱 : IapProgramWord(0x0000,data);
* 功能 : 十六位扇區編輯
----------------------------*/
void IapProgramWord(uint16 addr, uint16 dat)
{   
    uint8 dat_L,dat_H;
    dat_L=dat;
    dat_H=dat >> 8;

      IAP_CONTR = ENABLE_IAP;         
    IAP_CMD = CMD_PROGRAM;         
    IAP_ADDRL = addr+0x0001;               
    IAP_ADDRH = (addr+0x0001)>> 8;
    IAP_DATA = dat_H;
    IAP_TRIG = 0x5a;
    IAP_TRIG = 0xa5;
    nop();            
    IapIdle();

      IAP_CONTR = ENABLE_IAP;
    IAP_CMD = CMD_PROGRAM;
    IAP_ADDRL = addr;
    IAP_ADDRH = addr >> 8;
    IAP_DATA = dat_L;  
    IAP_TRIG = 0x5a;  
    IAP_TRIG = 0xa5;  
    nop();        
    IapIdle();

}

/*----------------------------
* 名稱 : IapReadWord(0x0000);
* 功能 : 讀十六位扇區
----------------------------*/
uint16 IapReadWord(uint16 addr)
{
    uint16 dat;                   //Data buffer
    uint8 dat_H,dat_L;

      IAP_CONTR = ENABLE_IAP;     //Open IAP function, and set wait time
    IAP_CMD = CMD_READ;           //Set ISP/IAP/EEPROM READ command
    IAP_ADDRL = (addr+0x0001);           //Set ISP/IAP/EEPROM address low
    IAP_ADDRH = (addr+0x0001) >> 8;      //Set ISP/IAP/EEPROM address high
    IAP_TRIG = 0x5a;              //Send trigger command1 (0x5a)
    IAP_TRIG = 0xa5;              //Send trigger command2 (0xa5)
    nop();                        //MCU will hold here until ISP/IAP/EEPROM operation complete
    dat_H = IAP_DATA;             //Read ISP/IAP/EEPROM data
    IapIdle();

    IAP_CONTR = ENABLE_IAP;     //Open IAP function, and set wait time
    IAP_CMD = CMD_READ;         //Set ISP/IAP/EEPROM READ command
    IAP_ADDRL = addr;           //Set ISP/IAP/EEPROM address low
    IAP_ADDRH = addr >> 8;      //Set ISP/IAP/EEPROM address high
    IAP_TRIG = 0x5a;            //Send trigger command1 (0x5a)
    IAP_TRIG = 0xa5;            //Send trigger command2 (0xa5)
    nop();                      //MCU will hold here until ISP/IAP/EEPROM operation complete
    dat_L= IAP_DATA;            //Read ISP/IAP/EEPROM data
    IapIdle();                  //Close ISP/IAP/EEPROM function

        dat=(dat_H << 8)+dat_L;

    return dat;                 //Return Flash data
}


#endif







分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本视频中文字幕 | 久久久久久久久91 | 一本一道久久a久久精品蜜桃 | 欧美视频二区 | 在线成人| 国产精品久久久久久久久久久久久久 | 国产成人av一区二区三区 | 玖玖综合网| 亚洲免费视频网址 | 久久人人爽人人爽人人片av免费 | 黄色一级免费 | 欧美性久久久 | 97碰碰碰 | 欧美激情在线观看一区二区三区 | 欧美国产日韩一区 | 亚洲一区 | 国产在线精品一区二区三区 | 欧美日韩一区二区三区在线观看 | 成人免费网站在线 | 人人爽人人爽人人片av | 国精产品一区一区三区免费完 | 一级黄色播放 | 婷婷丁香综合网 | 久久av网 | 男女精品网站 | 欧美在线一区视频 | 国产成人高清 | 久久久影院 | 精品国产乱码久久久久久图片 | 日韩在线欧美 | 久久久久久亚洲精品 | 国产精品视频一 | 黄色av免费 | 一区二区在线免费观看 | 黑人精品xxx一区一二区 | 日韩中字幕 | 久久成人精品一区二区三区 | 久久久国产精品一区 | 日韩毛片网 | 欧美日韩在线播放 | 久久综合九色综合欧美狠狠 |