欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9763|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

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

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

#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();
* 功能 : 關(guān)閉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);
* 功能 : 讀扇區(qū)
----------------------------*/
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);
* 功能 : 扇區(qū)擦除
----------------------------*/
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);
* 功能 : 扇區(qū)編輯
----------------------------*/
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);
* 功能 : 十六位扇區(qū)編輯
----------------------------*/
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);
* 功能 : 讀十六位扇區(qū)
----------------------------*/
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空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表