呵呵,乱搞的EEPROM读写函数当然别指望有好结果。给你一个参考的读写函数:
//-----------------------------------------------------------------------------
//filename: eeprom.c
//Version: v1.0
//Designer: yezhen
//StartTime:2007.2.7
//EndTime:
//History:
//-----------------------------------------------------------------------------
#include "eeprom.h"
//-----------------------------------------------------------------------------
//Location to eeprom_address(0x00)
__EEPROM_DATA( 10, 0, 20, 20, 3, 0,-50, 50);
__EEPROM_DATA( 0, 1, 1, 1, 10, 0, 0, 0);
//-----------------------------------------------------------------------------
void EEpromWrite(void)
{
if(WriteEeprom){
if(WR){}
else{
if(Fcase<datalength){
EEADRH=0x00;
EEADRL=Fcase; //赋EEPROM写入地址
EEDATL=MenuCase[Fcase];//赋EEPROM写入数值
CFGS=DataSpace; //指定访问闪存区或EEPROM区
EEPGD=EepromSpace; //指定访问EEPROM区
WREN=AllowWrite; //容许内部EEPROM写操作
GIE=false; //发送写序列码前必须写禁止中断
EECON2=0x55; //发送写序列码
EECON2=0xaa;
WR=StartWrite; //启动写操作
GIE=true;
Fcase++;
}
else{
WREN=DisAllowWrite;//禁止EEPROM/FLASH写操作
WriteEeprom=false;
}
}
}
}
//-----------------------------------------------------------------------------
void EEpromRead(void)
{
uchar DataCount=0x00;
while(DataCount<datalength){
MenuCase[DataCount]=EEPROM_READ(DataCount);
DataCount++;
}
}
//-----------------------------------------------------------------------------
|