搞了三天,终于调出来了,特此留贴, 希望能给像我一样的新手带来帮助
unsigned char Ssp_Flag;
//**********************************************************
//向EEPROM的指定地址单元写入一个字节模块
//字节编程
//入口参数:addr = 待写入字节地址, byte= 须编程字节的数据
//**********************************************************
void Byte_Write(unsigned int addr,unsigned char byte)
{ Ssp_Flag=0x5a;
EA=0; // disable Interrupts during write
FLASHCON=1;
XPAGE = (addr>>8)&0x07; //选择类EEPROM扇区
IB_OFFSET = addr&0xff; //被编程的存储单元低8位地址
IB_DATA = byte;
if(Ssp_Flag!=0x5A)
{
IB_CON2=0;
goto Write_Err;
}
IB_CON1 = 0x6E;
IB_CON2 = 0x05;
IB_CON3 = 0x0A;
IB_CON4 = 0x09;
IB_CON5 = 0x06;
_nop_();
_nop_();
_nop_();
_nop_();
Write_Err:
Ssp_Flag=0;
FLASHCON=0;
XPAGE=0;
EA = CY;
}
//*********************************************************
// 向EEPROM中写入若干待存数据子程序
// 入口参数:writeAddr:写入后数据的存放地址
// pBuffer: 待写数据的临时存放地址(在RAM中开辟)
// NumToWrite:待写入数据的个数:
//*********************************************************
void Flash_Write (unsigned int WriteAddr, unsigned char *pBuffer, unsigned char NumToWrite)
{
unsigned char t;
for(t=0;t<NumToWrite;t++)
{
Byte_Write(WriteAddr+t,*pBuffer++);
}
}
//**********************************************************
// 檫除指定的EEPROM页(256字节/每页)子程序
// 擦除扇区, 入口:addr = 扇区地址
//**********************************************************
void Flash_Erase(unsigned int addr)
{
EA=0;
XPAGE = (addr>>8)&0x07;
FLASHCON=1;
if(Ssp_Flag!=0xA5)
{
IB_CON2=0;
goto Erase_Err;
}
IB_CON1 = 0xE6;
IB_CON2 = 0x05;
IB_CON3 = 0x0A;
IB_CON4 = 0x09;
IB_CON5 = 0x06;
_nop_();
_nop_();
_nop_();
Erase_Err:
Ssp_Flag=0;
FLASHCON=0;
XPAGE=0;
EA = 1;
}
//***********************************************************
///读EEPROM的指定单元模块
// 入口参数:addr:待读取数据的地址
// 返回值类型:UCHAR
//***********************************************************
unsigned char Byte_Read(unsigned int addr)
{
unsigned int TEMPB;
FLASHCON=1;
//XPAGE = 0;
TEMPB=*(unsigned char code *)(addr);
FLASHCON=0;
return(TEMPB); // return data
}
//*********************************************************
// 从EEPROM中读出若干数据子程序
// 入口参数: ReadAddr:读出后数据的临时存放地址(在RAM中开辟)
// pBuffer: 待读取数据的首地址
// NumToRead:待读取数据的个数
//返回值类型:字节
//*********************************************************
void Flash_Read (unsigned int ReadAddr,unsigned char *pBuffer,unsigned int NumToRead)
{
while(NumToRead)
{
*pBuffer++=Byte_Read(ReadAddr++);
NumToRead--;
}
}
|