⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 e2prom.c

📁 stc单片机读内部eeprom代码
💻 C
字号:
/* 
*文件名称:e2prom.c 
*摘要描述:eeprom的读写程序 
*/ 
//////////// 
#include <reg52.h>             ///52的库 
#include <intrins.h> 
///////////////////// 
sfr  isp_wdt     = 0xe1; 
sfr  isp_data    = 0xe2; 
sfr  isp_addrh   = 0xe3; 
sfr  isp_addrl   = 0xe4; 
sfr  isp_cmd     = 0xe5; 
sfr  isp_trig    = 0xe6; 
sfr  isp_contr   = 0xe7; 
///////// 
unsigned char iic_num; 
////写入到从t_addr地址开始 
/* 打开 ISP,IAP 功能 */ 
void EraseEeprom(unsigned char t_addr) 
{ 
    isp_addrh = t_addr; 
    isp_addrl = 0; 
    EA    =    0;    /* 关中断 */ 
    isp_contr = 0x81;       /* 1000,0000 */ 
    isp_cmd = 3; 
    isp_trig = 0x46; 
    isp_trig = 0xb9; 
    _nop_(); 
    _nop_(); 
    isp_contr = 0;    /* 0111,1111 */ 
    isp_cmd = 0; 
    isp_trig = 0; 
    isp_addrh = 0; 
    isp_addrl = 0; 
    EA = 1;                    /* 开中断 */ 
} 
////一次最多256个,建议试用几个,要存入的数据松在指针指向的缓冲区 
void WriteEeprom(unsigned char t_addr, unsigned char num, unsigned char xdata *ptr) 
{ 
    EraseEeprom(t_addr); 
    for (iic_num=0; iic_num<num; iic_num++) 
    { 
        isp_data = *(ptr+iic_num); 
        isp_addrh = t_addr; 
        isp_addrl = iic_num; 
        EA    =    0;                 /* 关中断 */ 
        isp_contr = 0x81;       /* 1000,0000 */ 
        isp_cmd = 2; 
        isp_trig = 0x46; 
        isp_trig = 0xb9; 
        _nop_(); 
        _nop_(); 
        isp_contr = 0;    /* 0111,1111 */ 
        isp_cmd = 0; 
        isp_trig = 0; 
        isp_addrh = 0; 
        isp_addrl = 0;         
        EA = 1;                    /* 开中断 */ 
    } 
} 
////从eeprom的t_addr地址开始读出num个数据 
////存入以temp[0]开始的存储单元 
////一次最多256个,读数的数据存入指针指向的缓冲区 
void ReadEeprom(unsigned char s_addr, unsigned char num, unsigned char xdata *ptr) 
{ 
    for (iic_num=0; iic_num<num; iic_num++) 
    { 
        isp_addrh = s_addr; 
        isp_addrl = iic_num; 
        EA    =    0;    /* 关中断 */ 
        isp_contr = 0x81;       /* 1000,0000 */ 
        isp_cmd = 1; 
        isp_trig = 0x46; 
        isp_trig = 0xb9; 
        _nop_(); 
        _nop_(); 
        isp_contr = 0;    /* 0111,1111 */ 
        isp_cmd = 0; 
        isp_trig = 0; 
        isp_addrh = 0; 
        isp_addrl = 0;         
        EA = 1;                            /* 开中断 */ 
        *(ptr+iic_num) = isp_data; 
    } 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -