我试图弄清楚如何写入PIC 16 F18877在汇编数据EEPROM.这是我第一次尝试使用它,我已经通读了好几次的EEPROM(虽然我有时发现Microchip的文档是缺乏/不清楚),并试图谷歌的解决方案没有运气.
我的目标是从0xF001
读取,然后将0x25
写入该位置,最后读回。初始读取返回0x0
,即使EE数据存储器窗口将所有位置显示为0xFF
,然后回读仅返回0x0
,因为我在回读之前清除了位置,以确保我阅读回EEPROM中的数据,而不是以前的值。
我肯定我错过了一些简单/明显的东西,但我似乎无法弄清楚它是什么。这是我想出的(非工作)代码:
MOVLW 01h
MOVWF eeprom_addr_low
MOVLW 0F0h
MOVWF eeprom_addr_high
;READ EEPROM
BANKSEL NVMADRL
MOVLW eeprom_addr_low
MOVWF NVMADRL
MOVLW eeprom_addr_high
MOVWF NVMADRH
BSF NVMCON1,6 ;NVMREGS
BSF NVMCON1,0 ;RD
MOVF NVMDATL,W
MOVWF eeprom_data_low
MOVF NVMDATH,W
MOVWF eeprom_data_high
;WRITE EEPROM
BANKSEL NVMADRH
MOVF eeprom_addr_high,W
MOVWF NVMADRH
MOVF eeprom_addr_low,W
MOVWF NVMADRL
BSF NVMCON1,2 ;WREN
BSF NVMCON1,6 ;LWL0
writeLoop:
MOVLW 025h
MOVWF NVMDATL
MOVLW 00h ;0x00
MOVWF NVMDATH
MOVLW eeprom_addr_low ;01h
MOVWF NVMADRL
MOVLW eeprom_addr_high ;0F0h
MOVWF NVMADRH
BSF NVMCON1,2 ;WREN
unlockSeq:
BCF INTCON,7 ;GIE
MOVLW 055h
MOVWF NVMCON2
MOVLW 0AAh
MOVWF NVMCON2
BSF NVMCON1,1 ;WR
BSF INTCON,7 ;GIE
BCF NVMCON1,2 ;WREN
readBack:
MOVLW 00h
MOVWF NVMDATL ;Just clearing it to confirm if the readback is working for debugging purposes
MOVWF NVMDATH
MOVLW eeprom_addr_low
MOVWF NVMADRL
MOVLW eeprom_addr_high
MOVWF NVMADRH
BSF NVMCON1,6
BSF NVMCON1,0
MOVF NVMDATL,W
MOVWF eeprom_data_low
MOVF NVMDATH,W
MOVWF eeprom_data_high
字符串
我还尝试添加一个循环来等待读取完成,因为我的理解是,一旦读取完成,NVMCON1
的位0将被清除。然而,如果我添加以下内容:
waitForRead:
BTFSC NVMCON1,0
GOTO waitForRead
型
就会进入一个无限循环
任何帮助/指导将不胜感激,因为我坚持到底是什么,我错过了。
1条答案
按热度按时间bprjcwpo1#
因此,在玩了几次之后,我能够让读/写/读工作于以下代码:
字符串
似乎有两个问题:
1.我没有等待写完成,并试图快速读回它。