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

📄 e2prom.c

📁 原创,51单片机读写E2PROM程序. KEIL UV3编译环境.
💻 C
字号:
/***************************************************************************** 
* Copyright (c) 2008,bh 
* All rights reserved. 
*  
*文件名称:e2prom.c 
*摘要描述:eeprom的读写程序 
* 
*当前版本: 1.01 
*作    者:ww 
*完成时间:2008年01月 
* 
* 取代版本:1.00 
* 原作者  :ww 
* 完成日期:2007年12月 
******************************************************************************/ 
/*****************************************************************************/ 
#include <reg52.h>               
#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,0001 */ 
    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 + -