搜索
bottom↓
回复: 4

PIC18f4321单片机 内部EEPROM只能写一个地址,断电不保存

[复制链接]

出0入0汤圆

发表于 2011-10-26 20:54:14 | 显示全部楼层 |阅读模式
void  WR_EEP(uchar  addr,uchar  dat)
{
                EEADR = addr;
                EEDATA = dat;
                EEPGD = 0;
                CFGS = 0;
                WREN = 1;
                GIE = 0;
                EECON2 = 0x55;
                EECON2 = 0xAA;
                WR = 1;
                while(WR);
                GIE = 1;
                WREN = 0;
}

uchar  RD_EEP(uchar  addr)
{
                EEADR = addr;
                EEPGD = 0;
                CFGS = 0;
                RD = 1;
                return  EEDATA;
}

WR__EEP(0,10);
val = RD_EEP(0);
可以读出来10;
//WR__EEP(0,10);
val = RD_EEP(0);
断电后,读出来是0.不解啊。
仿真结果竟然EECON2写不进去。

出0入0汤圆

发表于 2016-9-22 14:15:50 | 显示全部楼层
楼主,我也遇到这个情况了EECON2写不进去,请问怎么解决的

出0入0汤圆

发表于 2016-9-22 15:38:19 | 显示全部楼层
本帖最后由 duxingkei 于 2016-9-22 15:45 编辑
zlxd1990 发表于 2016-9-22 14:15
楼主,我也遇到这个情况了EECON2写不进去,请问怎么解决的


直接先用库函数试试再说啊,
C编译自带的库函数应该有这方面的操作吧,自己找找帮助手册





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2016-9-22 15:44:04 | 显示全部楼层
本帖最后由 meirenai 于 2016-9-22 15:46 编辑

eecon2 只能写不能读,仿真看不到结果的
给你一个pic18f87k22的程序你参考一下。
  1. #include "flash_eeprom.h"

  2. #define EEPROM_START 0

  3. #define ALIVE 0x55

  4. system_param_t system_param;

  5. void read_eeprom(uint8_t *array,uint8_t length)
  6. {
  7.     uint8_t i;
  8.     for(i=0;i<length;i++) {
  9.         EEADRH = (EEPROM_START+i)>>8;
  10.         EEADR = (EEPROM_START+i)&0xff;
  11.         EECON1bits.EEPGD = 0;
  12.         EECON1bits.CFGS = 0;
  13.         EECON1bits.RD = 1;
  14.         NOP();
  15.         NOP();
  16.         array[i] = EEDATA;
  17.     }
  18. }

  19. void write_eeprom(uint8_t *array,uint8_t length)
  20. {
  21.     uint8_t i;
  22.     for(i=0;i<length;i++) {
  23.         EEADRH = (EEPROM_START+i)>>8;
  24.         EEADR = (EEPROM_START+i)&0xff;
  25.         EEDATA = array[i];
  26.         EECON1bits.EEPGD = 0;
  27.         EECON1bits.CFGS = 0;
  28.         EECON1bits.WREN = 1;

  29.         INTCONbits.GIE = 0;
  30.         EECON2 = 0x55;
  31.         EECON2 = 0xaa;
  32.         EECON1bits.WR = 1;
  33.         while(EECON1bits.WR);
  34.         INTCONbits.GIE = 1;
  35.         
  36.         EECON1bits.WREN = 0;
  37.     }
  38. }

  39. void flash_eeprom_init()
  40. {
  41.     read_eeprom((uint8_t *)&system_param,(uint8_t)sizeof(system_param));
  42.     if(system_param.isAlive != ALIVE) {
  43.         system_param.isAlive = ALIVE;
  44.         system_param.isAuto = 1;
  45.         system_param.windowTime = 25;
  46.         write_eeprom((uint8_t *)&system_param,(uint8_t)sizeof(system_param));
  47.     }else {
  48.         
  49.     }
  50. }
复制代码

出0入0汤圆

发表于 2016-9-22 17:32:35 | 显示全部楼层
同样发现,有的时候,单片机写EEPROM 有问题,
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-20 02:42

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表