***************************************************************************************************
函數名:EE_readbyte
功 能:片內EEPROM 讀1字節
說 明:Read_AddrH:待寫入的高地址;Read_Addr:待寫入的低地址
函數執行完返回壹個存放在該地址處的值
***************************************************************************************************
*/
uchar EE_ReadByte(uchar Read_AddrH,uchar Read_Addr)
{
EEADRH = Read_AddrH; //寫入高地址
EEADR = Read_Addr; //寫入低地址
EECON1bits.EEPGD = 0; //訪問EEPROM存儲區
EECON1bits.CFGS = 0; //訪問EEPROM或程序區
EECON1bits.RD = 1;
return EEDATA;
}
/*
***************************************************************************************************
函數名:EE_writebyte
功 能:片內EEPROM 寫1字節
說 明:Write_AddrH:待寫入的高位地址;Write_Addr:待寫入的低位地址;Write_Byte:待寫入的字節
***************************************************************************************************
*/
void EE_WriteByte(uchar Write_AddrH,uchar Write_Addr,uchar Write_Byte)
{
ClrWdt(); //餵狗
while(EECON1bits.WR);
EEADRH = Write_AddrH; //寫入高地址
EEADR = Write_Addr; //寫入低地址
EEDATA = Write_Byte; //寫入數據
EECON1bits.EEPGD = 0; //訪問EEPROM存儲區
EECON1bits.CFGS = 0; //訪問EEPROM或程序區
EECON1bits.WREN = 1; //充許擦寫
INTCONbits.GIE = 0; //禁止所有中斷
EECON2 = 0x55; //寫入密鑰
EECON2 = 0xaa;
EECON1bits.WR = 1; //開始寫操作
Nop();
Nop();
INTCONbits.GIE = 1; //開中斷
EECON1bits.WREN = 0; //禁止擦寫
while(EECON1bits.WR) //等待寫完成
{
;
}
}
/*
***************************************************************************************************
函數名:EE_WriteArray
功 能:寫入數組數據到EEPROM
說 明:AddrH:EEPROM起始地址高字節,Addr:EEPROM起始地址低字節
WriteByte[]:待存儲的數據存放數組
LenArray:待存儲的數組長度
舉例:存放地址0x0020---0x0029;存放數據array[10]
***************************************************************************************************
*/
void EE_WriteArray(uchar AddrH,uchar Addr,uchar WriteArray[],uchar LenArray)
{
uchar tempH,tempL,tempByte;
uint i=0;
tempH = AddrH;
tempL = Addr;
for(i=0;i<LenArray;i++)
{
tempByte = WriteArray[i];
EE_WriteByte(tempH,tempL,tempByte);
tempL++;
}
}
/*
***************************************************************************************************
函數名:EE_ReadArray
功 能:寫入數組數據到EEPROM
說 明:AddrH:EEPROM起始地址高字節,Addr:EEPROM起始地址低字節
ReadByte[]:待存儲的數據存放數組
LenArray:待存儲的數組長度
舉例:存放地址0x0020---0x0029;存放數據array[10]
***************************************************************************************************
*/
void EE_ReadArray(uchar AddrH,uchar Addr,uchar ReadArray[],uchar LenArray)
{
uchar tempH,tempL,tempByte;
uint i;
tempH=AddrH;
tempL=Addr;
for(i=0;i<LenArray;i++)
{
tempByte=EE_ReadByte(tempH,tempL);
ReadArray[i]=tempByte;
tempL++;
}
}