华子张01 发表于 2025-1-15 09:55:41

eeprom参数被修改问题

最近用STC8h8k64u单片机做个项目,发现设置在eeprom的参数隔几天就被修改了,不知何故?之前也是经常这样用,从未出现过这样的问题,麻烦给分析一下,谢谢

Lkck8210 发表于 2025-1-15 10:25:09

啥叫E2?

华子张01 发表于 2025-1-15 11:01:26

EEPROM

华子张01 发表于 2025-1-15 11:01:59


;**********************************************************************************
;************************读STC单片机内部E2子程   ******************************
;**********************************************************************************
;   stc8H8K64U编程容量自定义 4k    +--8个扇区(0000H----0FFFH)   8扇区    4K容量
;****************************************************************************
;**********************************************************************************
;************************读STC12c04、8内部E2子程   ******************************
;**********************************************************************************
;      stc8A8K60D4   +--8个扇区(0000H----0FFFH)   8扇区    4K容量
;----------------------------------------------------------------------------------
READE2_R0:MOV IAP_ADDRH,#00H          ;把以#00R0H(#00R0)为地址的E2RAM的
   MOV IAP_ADDRL,00H                ;内容回写入R0为间址的RAM内
   CALL READ_GT                     ;stc8A4K60S2A12+--8个扇区(0000H----0FFFH)   8扇区    4K容量 stc8A8K64D4
   MOV @R0,A                        ;
   RET                              ;
;******************************************************************
READE2_A:MOV IAP_ADDRH,#00H         ;
   MOV IAP_ADDRL,00H                ;内容回写入寄存器A中                         8扇区
   CALL READ_GT                     ;利用了第一个扇区
   RET                              ;
;******************************************************************
;------------------------------------------------------------------
;*******************编程STC89C52内部E2子程   ********************
;******************************************************************
;功能:把RAM R0中的内容回写入 EERAM相应空间,R0不变 ,R1,A使用过
;******************************************************************
;******************************************************************************************
WRITEE2:;MOV AUXR,#00H               ;
      PUSH   00H                     ;\
      PUSH   01H                     ;
      MOV    R0,#08H                   ;
      MOV    R1,#08H                   ;\读EE中数据入内部扩展RAM相应空间
WRITEEA:CALL READE2_A                  ;\
      MOVX   @R1,A                     ;\
      INC    R0                        ;\
      INC    R1                        ;\
      CJNE   R0,#0D0H,WRITEEA          ;\
      POP    01H                     ;\
      POP    00H                     ;/内部RAM与内部扩展RAM数据交换
      MOV    A,@R0                     ;
      MOVX   @R1,A                     ;/
      ;*****************************************
      CALL   SECTOR_ERASE               ; 扇区擦除
   ;******************************************
      CALL   rst                     ;
      MOV    R0,#08H                   ;
WRITEEB:MOVX A,@R0                     ;
      MOV    IAP_DATA,A                ;
      MOV    IAP_ADDRH,#00H            ;
      MOV    IAP_ADDRL,00H             ;
      CALL   WRI_GT                  ;
      INC    R0                        ;
      NOP                              ;
      NOP                              ;
      CJNE   R0,#0D0H,WRITEEB          ;
      RET                              ;
;*************************************************************************************
SECTOR_ERASE:MOV IAP_ADDRH,#00H      ;\   清除第一个 扇区(00H----1FFH)
      MOV    IAP_ADDRL,#00H            ;
      CALL   SECTOR_ERASE_GT         ;
      RET                              ;
;************************************************************************************
SECTOR_ERASE3:MOV IAP_ADDRH,#02H       ;\
      MOV IAP_ADDRL,#00H               ;    清除第二个扇区(200H----3FFH)
      CALL SECTOR_ERASE_GT             ;
      RET                              ;
;*************************************************
SECTOR_ERASE_GT:
      MOV IAP_CONTR,#80H               ;
      MOV IAP_TPS,#12                  ;;;;;;;;;;;;;;;;;
      MOV IAP_CMD,#IAP_SECTOR_ERASE    ;扇区擦除
      MOV IAP_TRIG,#5AH                ;
      MOV IAP_TRIG,#0A5H               ;
      MOV IAP_CONTR,#0H                ;
      MOV IAP_CMD,#0H                  ;
      MOV IAP_TRIG,#0H               ;
      MOV IAP_ADDRH,#80H               ;
      MOV IAP_ADDRL,#0H                ;
      RET                              ;
;*************************************************
READ_GT:
   MOV IAP_CONTR,#80H               ;
   MOV IAP_TPS,#12                  ;;;;;;;;;;;;;;;;;
   MOV IAP_CMD,#IAP_BYTE_READ       ;字节读
   MOV IAP_TRIG,#5AH                ;
   MOV IAP_TRIG,#0A5H               ;
   NOP                              ;
   MOV A,IAP_DATA                   ;
   MOV IAP_CONTR,#0H                ;
   MOV IAP_CMD,#0H                  ;
   MOV IAP_TRIG,#0H               ;
   MOV IAP_ADDRH,#80H               ;
   MOV IAP_ADDRL,#0H                ;
   RET                              ;
;*******************************************************************
WRI_GT:
      MOV IAP_CONTR,#80H               ;
      MOV IAP_TPS,#12                  ;;;;;;;;;;;;;;;;;
      MOV IAP_CMD,#IAP_BYTE_PROGRAM    ;字节编程(写)
      MOV IAP_TRIG,#5AH                ;
      MOV IAP_TRIG,#0A5H               ;
      NOP                              ;
      MOV IAP_CONTR,#0H                ;
      MOV IAP_CMD,#0H                  ;
      MOV IAP_TRIG,#0H               ;
      MOV IAP_ADDRH,#80H               ;
      MOV IAP_ADDRL,#0H                ;
      RET                              ;
;-----------------------------------------------------------------------
;-----------------------------------------------------------------------
READ_E2_RAM:MOV R0,#30H                ;\读EE中数据入内部扩展RAM相应空间
READ_E2_RAM1:CALL READE2_A             ;\STC89C52RC--8个扇区(2000H----2FFFH)
      MOVX @R0,A                     ;\STC89C54RD+--58个扇区(8000H----F3FFH)
      INC R0                           ;\
      CJNE R0,#0D0H,READ_E2_RAM1       ;\
      RET                              ;
;------------------------------------------------------------------------------------N
END

华子张01 发表于 2025-1-15 11:06:02

EEPROM的读写没问题,掉电也不消失,但在设备实时运行时,就时不时把EEPROM的内容都变成了FF了

华子张01 发表于 2025-1-15 11:07:21

主程序每天做过软件复位动作

国学芯用 发表于 2025-1-15 11:11:35

华子张01 发表于 2025-1-15 11:20:19

麻烦分析一下原因

华子张01 发表于 2025-1-15 11:45:43

程序看了,我主程序中除了没有关闭中断,其他应该都正确,但问题是设置参数都正确啊,为什么中途被改写了

乘风飞扬 发表于 2025-1-15 12:14:58

华子张01 发表于 2025-1-15 11:06
EEPROM的读写没问题,掉电也不消失,但在设备实时运行时,就时不时把EEPROM的内容都变成了FF了
...

EEPROM的内容都变成了FF,说明EEPROM被擦除。
如果低电改写数据时,要避免擦除EEPROM后没来得及写入新数据产生低压复位,或者电压低到芯片不能正常运行范围导致程序跑飞。
页: [1]
查看完整版本: eeprom参数被修改问题