當前位置:編程學習大全網 - 編程語言 - PIC18單片機怎麽讀寫EEPROM,我使用的是18F4520的單片機,求壹個讀寫EEPROM的程序實例

PIC18單片機怎麽讀寫EEPROM,我使用的是18F4520的單片機,求壹個讀寫EEPROM的程序實例

/*

***************************************************************************************************

函數名: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++;

}

}

  • 上一篇:數字媒體藝術屬不屬於計算機相關專業,它具體在哪壹大類啊?
  • 下一篇:C++編程題目:定義壹個CAnimal類,該類有數據成員name.用來表示canimal的名字,類型是字符串···詳細見
  • copyright 2024編程學習大全網