# includE & ltintrins.h & gt
/////////////////////
sfr ISP _ wdt = 0xe 1;
sfr isp _ data = 0xE2
sfr isp _ addrh = 0xE3
sfr isp _ addrl = 0xE4
sfr isp _ cmd = 0xE5
sfr isp _ trig = 0xE6
sfr isp _ contr = 0xE7
/////////
無符號字符iic _ num
////從t_addr地址開始寫。
/*打開ISP、IAP函數*/
void ErasEEEprom(無符號字符t_addr)
{
isp _ addrh = t _ addr
ISP _ addrl = 0;
EA = 0;/*關閉中斷*/
ISP _ contr = 0x 81;/* 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 write EEPROM(unsignEd char t _ addr,unsignEd char num,unsignEd char xdata *ptr)
{
ErasEEEprom(t _ addr);
for(IIC _ num = 0;iic _ num & ltnumiic_num++)
{
ISP _ data = *(ptr+IIC _ num);
isp _ addrh = t _ addr
isp _ addrl = iic _ num
EA = 0;/*關閉中斷*/
ISP _ contr = 0x 81;/* 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 read eprom(unsignEd char s _ addr,unsignEd char num,unsignEd char xdata *ptr)
{
for(IIC _ num = 0;iic _ num & ltnumiic_num++)
{
isp _ addrh = s _ addr
isp _ addrl = iic _ num
EA = 0;/*關閉中斷*/
ISP _ contr = 0x 81;/* 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;
}
}