首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >写在PIC上的EEPROM

写在PIC上的EEPROM
EN

Stack Overflow用户
提问于 2010-04-18 10:04:27
回答 3查看 11K关注 0票数 3

这里有PIC单片机程序员吗?

我正在学习使用pickit2和16F690芯片编程的PIC单片机。目前我正在试验各种设施。如果我在MPLAB中设置EEPROM vaklue,我可以成功地从EEPROM读取一个字节,但是我似乎无法使用它自己修改这个值。简单地说,什么都没有发生,而且我没有读取修改过的值,我总是得到原始的,这意味着写不起作用?

这是我那部分的代码,我是不是漏掉了什么?我知道我做了很多不必要的银行转换,我增加了其中的大部分,以确保在错误的银行不是问题。

代码语言:javascript
复制
        ; ------------------------------------------------------
        ; Now SET the EEPROM location ZERO to 0x08
        ; ------------------------------------------------------

        BANKSEL EEADR
        CLRF    EEADR           ; Set EE Address to zero

        BANKSEL EEDAT
        MOVLW   0x08            ; Store the value 0x08 in the EEPROM
        MOVWF   EEDAT

        BANKSEL EECON1
        BSF     EECON1, WREN    ; Enable writes to the EEPROM

        BANKSEL EECON2
        MOVLW   0x55            ; Do the thing we have to do so
        MOVWF   EECON2          ; that writes can work
        MOVLW   0xAA
        MOVWF   EECON2

        BANKSEL EECON1      
        BSF     EECON1, WR      ; And finally perform the write

WAIT
        BTFSC   EECON1, WR      ; Wait for write to finish
        GOTO    WAIT

        BANKSEL PORTC           ; Just to make sure we are on the right bank
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-04-18 10:13:24

16F690数据表的第122页,它详细介绍了写入EEPROM的适当方法:

BANKSEL EEADR;MOVF DATA_EE_ADDR,W;MOVWF EEADR;写入MOVF DATA_EE_DATA,W的数据存储器地址;MOVWF EEDAT;写入BANKSEL EECON1的数据内存值;BCF EECON1,EEPGD;指向数据存储器BSF EECON1,EECON1;启用写入BCF INTCON,GIE;禁用INTCON。BTFSC,GIE;参见AN576 GOTO $2;开始所需序列MOVLW55H;MOVWF EECON2;写入55h MOVLW AAh;MOVWF EECON2;写入AAh BSF EECON1,WR;设置WR位开始写入begin,GIE;启用INTs。睡眠;等待中断以信号写入完成;结束所需的序列BCF EECON1;禁用写BANKSEL 0x00;BANKSEL 0

我注意到你特别遗漏了这一行:

代码语言:javascript
复制
 BCF     EECON1, EEPGD ;Point to DATA memory

如果总是设置EEPGD,那么您将尝试写入程序内存(也就是覆盖闪存程序内存),除非您已经尽了全力来具体地启用它,否则它总是会失败。

除此之外,据我从阅读您的代码中可以看出,其他一切看起来都很好。您可以轮询EECON1.WR,而不是设置中断。它将花费你更多的能源,而不是让设备睡觉,但当然,你应该只担心一件事。

票数 3
EN

Stack Overflow用户

发布于 2010-07-16 22:01:18

如果使用高技术编译器,编写EEPROM非常简单

#include <pic.h>

然后基本上,

EEPROM_WRITE(0, 0x00);或真;

代码语言:javascript
复制
EEPROM_WRITE(location to write to, value to write to it);

实际上,我还没有足够的勇气在装配中写下我的事先知情同意。

票数 1
EN

Stack Overflow用户

发布于 2018-07-20 11:24:49

xc8编译器的方法:

代码语言:javascript
复制
#include <xc.h>

.....
value = eeprom_read(address);
eeprom_write(address, data);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2661845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档