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