搜索
bottom↓
回复: 1

求助:PIC 片上EEPROM写不进去

[复制链接]

出0入0汤圆

发表于 2017-3-11 13:06:26 | 显示全部楼层 |阅读模式
本帖最后由 aaabbbad 于 2017-3-11 13:06 编辑

我现在遇到一个问题,片上EEPROM写不进去,表现出的现象是:编译器在线调试观察EEPROM内部全是FF,我的擦写驱动是按照datasheet上的汇编写的c语言格式,网上说的BOD也是打开的,找到了几个相近片子的例程几乎一致,但就是写不进去,还请您再指导一下,以下附上我的代码和相关截图。
  1. void data_write(unsigned char addr,unsigned char value)
  2. {
  3.         EEADR = addr;                                //写目标地址,范围0-ff
  4.         EEDATA = value;                                //写目标值
  5.         EECON1bits.EEPGD = 0;                //指向EEPROM接口
  6.         EECON1bits.CFGS = 0;                //指向EEPROM/FLASH 区分config
  7.         INTCONbits.GIE = 0;                        //关闭全局中断
  8.         EECON1bits.WREN = 1;                //使能写功能
  9.         EECON2 = 0x55;                                //填入写序列 55h
  10.         EECON2 = 0xAA;                                //填入写序列 aah
  11.         EECON1bits.WR = 1;                        //使能写控制位
  12.         while(EECON1bits.WR == 1);        //等待写中断完成
  13.         INTCONbits.GIE = 1;                        //使能全局中断
  14.         PIR2bits.EEIF = 0;                        //清除写中断标志位
  15.         EECON1bits.WREN = 0;                //关闭写功能
  16. }

  17. int data_read(unsigned char addr)
  18. {        
  19.         EEADR = addr;                                //读目标地址,范围0-ff
  20.         EECON1bits.EEPGD = 0;                //指向EEPROM接口
  21.         EECON1bits.RD = 1;                        //使能读功能
  22.         return EEDATA;
  23. }
复制代码


时钟位配置
  

编译环境是MPLAB C18 调试器 PICKit3.5+
EEPROM地址手册上说范围是0x00-0xFF,我读写使用的地址是0x22,0x33,也没看到有什么位置说偏移地址啊,地址应该没错吧
  
地址组成关系如下

本帖子中包含更多资源

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

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2017-3-16 23:35:10 | 显示全部楼层
我之前寫18F1220有把汇编直接包進C裡面跑,
動作大概就是寫完要等一下再讀,讀寫期間要關閉中斷。
後來查C18手冊寫出來的是這樣,不過這很久前寫的,我也忘了是寫啥了。

  1. //====================EEROM==================================
  2. unsigned char ReadEEPROM(unsigned char EE_Addr)
  3. {//<editor-fold  defaultstate="collapsed"  desc="EEROM讀取">
  4. EEADR=EE_Addr;    //给地址
  5. EECON1bits.EEPGD=0;     //
  6. EECON1bits.CFGS = 0;
  7. EECON1bits.RD=1;      //开始读
  8. Delay1TCY();
  9. return EEDATA;    //直接返回读取的EEPROM
  10.    //</editor-fold>
  11. }
  12. void int_EEPROM_write(unsigned char address, unsigned char data)
  13. {  //<editor-fold  defaultstate="collapsed"  desc="EEROM寫入">
  14.     unsigned char INTCON_SAVE;

  15.     EEADR  = address;
  16.     EEDATA = data;

  17.     EECON1bits.EEPGD= 0; // 0 = Access data EEPROM memory
  18.     EECON1bits.CFGS = 0; // 0 = Access Flash program or DATA EEPROM memory
  19.     EECON1bits.WREN = 1; // enable writes to internal EEPROM

  20.     INTCON_SAVE=INTCON; // Save INTCON register contants
  21.     INTCON=0;             // Disable interrupts, Next two lines SHOULD run without interrupts

  22.     EECON2=0x55;        // Required sequence for write to internal EEPROM
  23.     EECON2=0xaa;        // Required sequence for write to internal EEPROM

  24.     EECON1bits.WR=1;    // begin write to internal EEPROM
  25.     INTCON=INTCON_SAVE; //Now we can safely enable interrupts if previously used

  26.     Nop();

  27.     while (PIR2bits.EEIF==0)//Wait till write operation complete
  28.     {
  29.         Nop();
  30.     }

  31.     EECON1bits.WREN=0; // Disable writes to EEPROM on write complete (EEIF flag on set PIR2 )
  32.     PIR2bits.EEIF=0; //Clear EEPROM write complete flag. (must be cleared in software. So we do it here)
  33.   //</editor-fold>
  34. }
复制代码
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-3-29 22:46

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

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