本帖最后由 橘子阿小 于 2021-10-19 13:28 编辑
找到了!!!
#include "xc.h"
int __attribute__ ((space(eedata))) eeData = 0x0;
unsigned int offset = 0x0;
//擦除一个字
void EEPROM_ERASE_WORD(unsigned int addr)
{
NVMCON = 0x4058;
TBLPAG = __builtin_tblpage(&eeData);
__builtin_tblwtl(__builtin_tbloffset(&eeData)+addr,0);
asm volatile ("disi #5");
__builtin_write_NVM();
while(NVMCONbits.WR==1);
}
//擦除所有
void EEPROM_ERASE_ALL()
{
NVMCON=0x4050;
asm volatile ("disi #5");
__builtin_write_NVM();
}
//单字写入
void WR_EEPROM (unsigned int addr,unsigned int data)
{
NVMCON = 0x4004;
TBLPAG = __builtin_tblpage(&eeData);
__builtin_tblwtl( __builtin_tbloffset(&eeData)+addr, data);
asm volatile ("disi #5");
__builtin_write_NVM();
while(NVMCONbits.WR==1);
return 1;
}
//读数据
unsigned int RD_EEPROM(unsigned int addr)
{
TBLPAG = __builtin_tblpage(&eeData);
return __builtin_tblrdl(__builtin_tbloffset(&eeData)+addr);
}
|