📄 e2prom.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 + -