PIC18f4321单片机 内部EEPROM只能写一个地址,断电不保存
voidWR_EEP(ucharaddr,uchardat){
EEADR = addr;
EEDATA = dat;
EEPGD = 0;
CFGS = 0;
WREN = 1;
GIE = 0;
EECON2 = 0x55;
EECON2 = 0xAA;
WR = 1;
while(WR);
GIE = 1;
WREN = 0;
}
ucharRD_EEP(ucharaddr)
{
EEADR = addr;
EEPGD = 0;
CFGS = 0;
RD = 1;
returnEEDATA;
}
WR__EEP(0,10);
val = RD_EEP(0);
可以读出来10;
//WR__EEP(0,10);
val = RD_EEP(0);
断电后,读出来是0.不解啊。
仿真结果竟然EECON2写不进去。 楼主,我也遇到这个情况了EECON2写不进去,请问怎么解决的 本帖最后由 duxingkei 于 2016-9-22 15:45 编辑
zlxd1990 发表于 2016-9-22 14:15
楼主,我也遇到这个情况了EECON2写不进去,请问怎么解决的
直接先用库函数试试再说啊,
C编译自带的库函数应该有这方面的操作吧,自己找找帮助手册
本帖最后由 meirenai 于 2016-9-22 15:46 编辑
eecon2 只能写不能读,仿真看不到结果的
给你一个pic18f87k22的程序你参考一下。
#include "flash_eeprom.h"
#define EEPROM_START 0
#define ALIVE 0x55
system_param_t system_param;
void read_eeprom(uint8_t *array,uint8_t length)
{
uint8_t i;
for(i=0;i<length;i++) {
EEADRH = (EEPROM_START+i)>>8;
EEADR = (EEPROM_START+i)&0xff;
EECON1bits.EEPGD = 0;
EECON1bits.CFGS = 0;
EECON1bits.RD = 1;
NOP();
NOP();
array = EEDATA;
}
}
void write_eeprom(uint8_t *array,uint8_t length)
{
uint8_t i;
for(i=0;i<length;i++) {
EEADRH = (EEPROM_START+i)>>8;
EEADR = (EEPROM_START+i)&0xff;
EEDATA = array;
EECON1bits.EEPGD = 0;
EECON1bits.CFGS = 0;
EECON1bits.WREN = 1;
INTCONbits.GIE = 0;
EECON2 = 0x55;
EECON2 = 0xaa;
EECON1bits.WR = 1;
while(EECON1bits.WR);
INTCONbits.GIE = 1;
EECON1bits.WREN = 0;
}
}
void flash_eeprom_init()
{
read_eeprom((uint8_t *)&system_param,(uint8_t)sizeof(system_param));
if(system_param.isAlive != ALIVE) {
system_param.isAlive = ALIVE;
system_param.isAuto = 1;
system_param.windowTime = 25;
write_eeprom((uint8_t *)&system_param,(uint8_t)sizeof(system_param));
}else {
}
} 同样发现,有的时候,单片机写EEPROM 有问题,
页:
[1]