用软件仿真没问题,但烧到片子里,不能正常运行。情况是这样的:假如循环向EEPROM中写数据,9,8,7,6,5,4,3,2,1,然后读,发现每一位读出的都一样,是写循环中第一个写进去的字节,也就是9。其他的并没有写进去。
请问各位有遇到过这样的问题吗?我是完全按照DATASHEET来的,实在没着了,也没有仿真器?
分别写数据9和6到地址0和7,然后读出并显示。请教其中原因。很奇怪的!
.
.
BSF STATUS,RP0
CLRF EEADR ;地址0
MOVLW .9
MOVWF EEDAT ;待写数据是9
BSF EECON1,WREN ;使能写
MOVLW 0X55
MOVWF EECON2
MOVLW 0XAA
MOVWF EECON2
BSF EECON1,WR ;开始写
NOP
NOP ;几个NOP是另加的,怕对以下操作有影响
MOVLW .7
MOVWF EEADR ;地址7
MOVLW .6
MOVWF EEDAT ;待写数据是6
MOVLW 0X55
MOVWF EECON2
MOVLW 0XAA
MOVWF EECON2
BSF EECON1,WR
NOP
BCF EECON1,WREN ;禁止写
MOVLW .0 ;地址0
MOVWF EEADR
BSF EECON1,RD ;读
MOVF EEDAT,W ;此处仿真W的内容是9, 实际读出也是9
.
. ;显示以及延时程序
.
MOVLW .7 ;地址7
MOVWF EEADR
BSF EECON1,RD ;读
MOVF EEDAT,W ;此处仿真W的内容是6, 但实际运行, 读出是9
.
.
.
入EEPROM都有一个非易失性写周期的,你自己也发现了延时可以。用EEIF可以用中断方式而不需要延时方式(干嘛要死等呢?),如果要延时,参考write cycle time参数。
At the completion of the write cycle, the WR bit is
cleared in hardware and the EE Write Complete
Interrupt Flag bit (EEIF) is set. The user can either
enable this interrupt or poll this bit. The EEIF bit
(PIR<7>) register must be cleared by software.
Data EEPROM Memory
D120 ED Cell Endurance 100K 1M — E/W -40°C ≤ TA ≤ +85°C
D120A ED Cell Endurance 10K 100K — E/W +85°C ≤ TA ≤ +125°C
D121 VDRW VDD for read/write VMIN — 5.5 V VMIN = Minimum operating
voltage
D122 TDEW Erase/Write cycle time — 4(typ)- 8(max) ms