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=0ii<3ii++)
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=0ii<3ii++)
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=0ii<3ii++)
ISP_ADDRL=0xff
ISP_ADDRH=0xff
ISP_CONTR=0x00
ISP_CMD=0x00
ISP_TRIG=0x00
z=ISP_DATA
return(z)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)