eeprom参数被修改问题
最近用STC8h8k64u单片机做个项目,发现设置在eeprom的参数隔几天就被修改了,不知何故?之前也是经常这样用,从未出现过这样的问题,麻烦给分析一下,谢谢啥叫E2? EEPROM
;**********************************************************************************
;************************读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
EEPROM的读写没问题,掉电也不消失,但在设备实时运行时,就时不时把EEPROM的内容都变成了FF了
主程序每天做过软件复位动作
麻烦分析一下原因
程序看了,我主程序中除了没有关闭中断,其他应该都正确,但问题是设置参数都正确啊,为什么中途被改写了 华子张01 发表于 2025-1-15 11:06
EEPROM的读写没问题,掉电也不消失,但在设备实时运行时,就时不时把EEPROM的内容都变成了FF了
...
EEPROM的内容都变成了FF,说明EEPROM被擦除。
如果低电改写数据时,要避免擦除EEPROM后没来得及写入新数据产生低压复位,或者电压低到芯片不能正常运行范围导致程序跑飞。
页:
[1]