打印
[PIC®/AVR®/dsPIC®产品]

关于EEPROM 读写问题

[复制链接]
1724|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
SYFJKJ|  楼主 | 2014-6-23 22:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大侠我用的PIC是12F683   我有两个数据 相保存在EEPROM中,可怎么改程序,也只能将前面的那个数据保存进去,而后面的那个数据始终写不去
请求各位大侠给点意见
沙发
wangch_sh| | 2014-6-24 08:30 | 只看该作者
程序?什么EEPROM?

使用特权

评论回复
板凳
yewuyi| | 2014-6-24 12:25 | 只看该作者
自己检查自己的软硬件,当前信息,别人帮不了你。

使用特权

评论回复
地板
NE5532| | 2014-6-24 16:17 | 只看该作者
是调用的同一个写函数么?写入地址是连续的么?调换写入地址以后呢?

使用特权

评论回复
5
兰天白云| | 2014-6-25 11:33 | 只看该作者
写EEPROM是要时间的,一般5毫秒

使用特权

评论回复
6
SYFJKJ|  楼主 | 2014-6-25 20:59 | 只看该作者
;********************************************
KEY_OFF:MOVF    R8   ,  0   
      XORLW    06H
      BTFSS    STATUS, 2
      GOTO     KEY_R1
      BCF      p1
      BCF      p2
      BCF      FONOF
      BCF      FINT

      BCF INTCON,GIE      ;Disable INTs

      MOVLW    02H
      MOVWF    R33     ;地址变量置初值
      MOVF     R18   ,  W
      MOVWF    R34

      CALL     OFF_WR

      MOVLW    01H
      MOVWF    R33       ;地址变量置初值
      MOVF      R32 ,  W
      MOVWF    R34
      CALL     OFF_WR

      BSF INTCON,GIE      ;Enable INTs
      bcf STATUS,RP0
      GOTO     MA1
;***************************************

OFF_WR:
     BTFSC   EECON1,WR    ;上一次写操作是否完成  
     GOTO    OFF_WR         ;否!返回继续检测  

     BANKSEL EECON1 ;
     MOVF     R33  , 0   ;       ;取地址  
     MOVWF   EEADR        ;送地址寄存器

     Bcf STATUS,RP0
     MOVF    R34  ,  W    ;取数据  
     BSf STATUS,RP0
     MOVWF   EEDAT       ;送数据寄存器  
     BSF EECON1,WREN     ;Enable write

     MOVLW 55h           ;Unlock write
     MOVWF EECON2
     MOVLW 0AAh
     MOVWF EECON2
     BSF EECON1,WR       ;Start the write

     BCF EECON1,WREN
     bcf STATUS,RP0

     RETLW    00H

使用特权

评论回复
7
SYFJKJ|  楼主 | 2014-6-25 21:05 | 只看该作者
以上是我关机时写EEPROM 程序,用的IC是12F683  ,地址02中的数据可以写进去,也可以读出来,但地址01中的数据写不旱灾
以下是我的读子程序
KEY_ON:MOVF    R8   ,  0   
      XORLW    07H
      BTFSS    STATUS, 2
      GOTO     BACK
      BSF      FONOF

      MOVLW    02H
      MOVWF    R33          ;地址变量置初值
      CALL    ON_RD
      MOVF    R34  ,  W
      MOVWF   R18

      MOVLW    01H
      MOVWF    R33
      CALL    ON_RD
      MOVF    R34  ,  W
      MOVWF   R8
      
TEND: GOTO     KEY_R1  
;********************************************
ON_RD:
      BANKSEL EEADR  
      MOVF   R33  ,  0
      MOVWF EEADR      ;Address to read
      BSF EECON1,RD    ;EE read
      MOVF EEDAT,W     ;Move data to W
      BCF STATUS,RP0
      MOVWF  R34
        
      RETLW    00H

请各位大侠再帮我诊断下,为什么前一个数据可以写进去,后一个写不进去不行

使用特权

评论回复
8
yewuyi| | 2014-6-26 08:41 | 只看该作者
SYFJKJ 发表于 2014-6-25 21:05
以上是我关机时写EEPROM 程序,用的IC是12F683  ,地址02中的数据可以写进去,也可以读出来,但地址01中的 ...

已经没人愿意帮你一行行看ASM代码了。

使用特权

评论回复
9
yewuyi| | 2014-6-26 08:42 | 只看该作者
如果是C,可以参考我的一段代码:



//----------------------------------------------------------------------------------------------------------------------------------------------------------
void                 EEpromWrite(void)
{
if(WriteEeprom){
               if(WR){}
               else{
                   if(Fcase<WriteMenuByte){
                                          EEADRH=0x00;
                                          EEADRL=Fcase;                   //赋EEPROM写入地址
                                          EEDATL=Menu.MenuCaseByte[Fcase];//赋EEPROM写入数值
                                          CFGS=DataSpace;                 //指定访问闪存区或EEPROM区
                                          EEPGD=EepromSpace;              //指定访问EEPROM区
                                          WREN=AllowWrite;                //容许内部EEPROM写操作
                                          GIE=false;                      //发送写序列码前必须写禁止中断
                                          EECON2=0x55;                    //发送写序列码   
                                          EECON2=0xaa;
                                          WR=StartWrite;                  //启动写操作
                                          GIE=true;
                                          Fcase++;
                                          }
                  else{
                       WREN=DisAllowWrite;//禁止EEPROM/FLASH写操作
                       WriteEeprom=false;
                       }
                   }
               }
}
//----------------------------------------------------------------------------------------------------------------------------------------------------------
void                 EEpromRead(void)
{
uchar DataCount=0x00;
while(DataCount<ReadMenuByte){
                             Menu.MenuCaseByte[DataCount]=EEPROM_READ(DataCount);
                             DataCount++;
                             }
}
//----------------------------------------------------------------------------------------------------------------------------------------------------------

使用特权

评论回复
10
兰天白云| | 2014-6-26 16:57 | 只看该作者
关机的时候写EEPROM,写的时间够吗?

使用特权

评论回复
11
SYFJKJ|  楼主 | 2014-6-26 17:49 | 只看该作者
我写完之后延时了约5MS 再退出的,但始终只能写进一个数据,真伤脑筋

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

7

帖子

0

粉丝