| /* *文件名稱: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; /* 關(guān)中斷 */ 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個,建議試用幾個,要存入的數(shù)據(jù)松在指針指向的緩沖區(qū) 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; /* 關(guān)中斷 */ 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個數(shù)據(jù) ////存入以temp[0]開始的存儲單元 ////一次最多256個,讀數(shù)的數(shù)據(jù)存入指針指向的緩沖區(qū) 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; /* 關(guān)中斷 */ 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; } } |
|
|