发信人:nameliji 发表时间:2003-06-20 08:34:40
用软件仿真没问题,但烧到片子里,不能正常运行。情况是这样的:假如循环向EEPROM中写数据,9,8,7,6,5,4,3,2,1,然后读,发现每一位读出的都一样,是写循环中第一个写进去的字节,也就是9。其他的并没有写进去。 请问各位有遇到过这样的问题吗?我是完全按照DATASHEET来的,实在没着了,也没有仿真器,恳求援助!谢谢!
※ PIC单片机 www.pic16.com |
发信人:nameliji 发表时间:2003-06-20 09:56:23
分别写数据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 . . .
※
PIC单片机 www.pic16.com |
发信人:nameliji 发表时间:2003-06-20 13:39:11
是写的原因,在两次写操作之间加入一段较长延时,一切正常了,可按照datasheet和软件仿真来看,有两个指令周期就可以完成写操作,具体要延时多少时间?有没有一个理论上的数值?
※ PIC单片机 www.pic16.com |
发信人:nameliji 发表时间:2003-06-20 13:42:33
还是我的程序有问题?
※ PIC单片机 www.pic16.com |
发信人:martin 发表时间:2003-06-20 15:41:09
写入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
※
PIC单片机 www.pic16.com |
发信人:anycrying 发表时间:2003-06-23 10:39:06
BCF STATUS,RP0 CLRF EEADR ;地址0 MOVLW .9 MOVWF EEDAT ;待写数据是9 BSF STATUS,RP0 BSF EECON1,WREN ;使能写 MOVLW 0X55 MOVWF EECON2 MOVLW 0XAA MOVWF EECON2 BSF EECON1,WR ;开始写 NOP NOP ;几个NOP是另加的,怕对以下操作有影响 BCF STATUS,RP0 MOVLW .7 MOVWF EEADR ;地址7 MOVLW .6 MOVWF EEDAT ;待写数据是6 BSF STATUS,RP0 MOVLW 0X55 MOVWF EECON2 MOVLW 0XAA MOVWF EECON2 BSF EECON1,WR NOP BCF EECON1,WREN ;禁止写 BCF STATUS,RP0 MOVLW .0 ;地址0 MOVWF EEADR BSF STATUS,RP0 BSF EECON1,RD ;读 BCF STATUS,RP0 MOVF EEDAT,W ;此处仿真W的内容是9, 实际读出也是9 . . ;显示以及延时程序 . MOVLW .7 ;地址7 MOVWF EEADR BSF STATUS,RP0 BSF EECON1,RD ;读 BCF STATUS,RP0 MOVF EEDAT,W ;此处仿真W的内容是6, 但实际运行, 读出是
※
PIC单片机 www.pic16.com |
发信人:wdy160 发表时间:2003-06-23 19:29:05
为什么要禁止写?
※ PIC单片机 www.pic16.com |
| 回复文章:When I used the ICD2 to debug the 16F877 |
发信人:zhzhdao 发表时间:2003-06-24 15:46:27
I found that the operation on EEPROM was not the expect, especaily write operation! I can`t write data to EEPROM through my programm which can be run well under MPLAM SIM, why? I think the write delay is enough.
※ PIC单片机 www.pic16.com |
| 回复文章:ICD2 to debug EEPROM |
发信人:张明峰 发表时间:2003-06-24 17:29:12
You must run the ICD2 at the full speed in order to debug EEPROM write function. You'll never get succeeded if you are in single step mode.
You'd better use flag polling instead of simple time delay for EEPROM write-wait.
※ PIC单片机 www.pic16.com |
| 回复文章:一般eeprom的自写周期大于2ms,请注意。avr单片机也类似。 |
发信人:louis.liu 发表时间:2003-06-28 17:06:11
EEPROM的写通过判断标志位就可以,但是在下一次写之前要清除上一次写完成的标志位。也就是说,每次写完要清除完成标志位,否则下一次写不进去。
※
PIC单片机 www.pic16.com
|
|