我的PIC30F代码第一次从数据EEPROM读取字时,它读取0xFFFF而不是EEPROM中的实际数据。之后它看起来很好。
EEPROM读取代码:
_ReadEEWord:
;--------------------------------------------------------------------------------
; Read a word from Data EEPROM
; Entry W0 Word address relative to the start of Data EEPROM
; Exit W0 Word at that location
; Uses W1, Table pointer
;--------------------------------------------------------------------------------
; Start address of Data EEPROM
#define DATAEE_START 0x7FFC00
; Setup pointer to EEPROM memory
mov #0x7F,W1 ; Set the table pointer
mov W1,TBLPAG ; to the page with the EEPROM
add W0,W0,W0 ; Convert the word address to a byte address
mov #0xFC00,W1 ; Add the start of EEPROM
add W1,W0,W1 ; to the address
nop
nop
nop
; Return the EEPROM data
tblrdl [W1],W0 ; Read the EEPROM data
nop
nop
nop
return
对可能导致这种情况的任何建议?
答案 0 :(得分:0)
解决
文档没有这样说,但是,在您可以读取数据EEPROM之前,必须等待以前的任何EEPROM操作。
您可以通过以下方式之一进行:
1)在C:
#include <libpic30.h> // Includes EEPROM utilities
_wait_eedata(); // Wait for the erase to be done
2)在C中,没有lib导入
while (NVMCONbits.WR);
3)在集会中:
btsc NVMCON,#15 ; If busy (WR bit s set)
bra $-2 ; Go back and wait