?? 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 + -