用軟件仿真沒問題,但燒到片子里,不能正常運行。情況是這樣的:假如循環(huán)向EEPROM中寫數(shù)據(jù),9,8,7,6,5,4,3,2,1,然后讀,發(fā)現(xiàn)每一位讀出的都一樣,是寫循環(huán)中第一個寫進去的字節(jié),也就是9。其他的并沒有寫進去。
請問各位有遇到過這樣的問題嗎?我是完全按照DATASHEET來的,實在沒著了,也沒有仿真器?
分別寫數(shù)據(jù)9和6到地址0和7,然后讀出并顯示。請教其中原因。很奇怪的!
.
.
BSF STATUS,RP0
CLRF EEADR ;地址0
MOVLW .9
MOVWF EEDAT ;待寫數(shù)據(jù)是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 ;待寫數(shù)據(jù)是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的內(nèi)容是9, 實際讀出也是9
.
. ;顯示以及延時程序
.
MOVLW .7 ;地址7
MOVWF EEADR
BSF EECON1,RD ;讀
MOVF EEDAT,W ;此處仿真W的內(nèi)容是6, 但實際運行, 讀出是9
.
.
.
入EEPROM都有一個非易失性寫周期的,你自己也發(fā)現(xiàn)了延時可以。用EEIF可以用中斷方式而不需要延時方式(干嘛要死等呢?),如果要延時,參考write cycle time參數(shù)。
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