ifndef __EEPROM_H__
#define __EEPROM_H__
#define uchar unsigned char
#define uint unsigned int
//擦除片內EEPROM的壹個扇區 這些函數在此只是聲明壹下,實體在源文件中
void eepromEraseSector (uint address);
void eepromWrite(uint address, uchar write_data);
//讀取STC單片機內部EEPROM的壹個字節
uchar eepromRead(uint address);
#endif
源文件eeprom.c 如下,裏面的幾個子函數都是STC單片機說明文檔裏有的,不需要任何修改,只管調用,所以平時我們只看頭文件就行了
#include<STC12C54.H>
#define uchar unsigned char
#define uint unsigned int
//擦除片內EEPROM的壹個扇區
void eepromEraseSector (uint address)
{
uchar ii;
ISP_ADDRL=address;
ISP_ADDRH=address>>8;
ISP_CONTR=0x01;
ISP_CONTR=ISP_CONTR|0x82; // 0x80 if SYSCLK<40MHz, 0x81 if SYSCLK<20MHz, 0x82 if SYSCLK<10MHz, 0x83 if SYSCLK<5MHz
ISP_CMD=0x03;
ISP_TRIG=0x46;
ISP_TRIG=0xb9;
for(ii=0;ii<3;ii++);
ISP_ADDRL=0xff;
ISP_ADDRH=0xff;
ISP_CONTR=0x00;
ISP_CMD=0x00;
ISP_TRIG=0x00;
}
//對STC片內EEPROM的指定地址寫入數據(即,字節編程)
void eepromWrite(uint address, uchar write_data)
{
uchar ii;
ISP_DATA=write_data;
ISP_ADDRL=address;
ISP_ADDRH=address>>8;
ISP_CONTR=0x01;
ISP_CONTR=ISP_CONTR|0x82; // 0x80 if SYSCLK<40MHz, 0x81 if SYSCLK<20MHz, 0x82 if SYSCLK<10MHz, 0x83 if SYSCLK<5MHz
ISP_CMD=0x02;
ISP_TRIG=0x46;
ISP_TRIG=0xb9;
for(ii=0;ii<3;ii++);
ISP_ADDRL=0xff;
ISP_ADDRH=0xff;
ISP_CONTR=0x00;
ISP_CMD=0x00;
ISP_TRIG=0x00;
}
//讀取STC單片機內部EEPROM的壹個字節
uchar eepromRead(uint address)
{
uchar ii,z;
ISP_ADDRL=address;
ISP_ADDRH=address>>8;
//ISP_CONTR=0x01;
ISP_CONTR=ISP_CONTR|0x82; // 0x80 if SYS
ISP_CMD=0x01;//讀命令切記哦
ISP_TRIG=0x46;
ISP_TRIG=0xb9;
for(ii=0;ii<3;ii++);
ISP_ADDRL=0xff;
ISP_ADDRH=0xff;
ISP_CONTR=0x00;
ISP_CMD=0x00;
ISP_TRIG=0x00;
z=ISP_DATA;
return(z);
}