这里有PIC单片机编程器吗?
我正在学习一些使用 pickit2 和它附带的 16F690 芯片的 PIC 微控制器编程。我目前正在尝试各种设施。我可以成功read如果我在 MPLAB 中设置 EEPROM vaklue,则代码中来自 EEPROM 的一个字节,但我似乎无法使用 PIC 本身修改该值。根本没有发生任何事情,我也不会读回修改后的值,我总是得到原始值,这对我来说意味着写入不起作用?
这是我该部分的代码,我错过了什么吗?我知道我做了很多不必要的银行切换,我添加了其中的大部分,以确保在错误的银行上不是问题。
; ------------------------------------------------------
; Now SET the EEPROM location ZERO to 0x08
; ------------------------------------------------------
BANKSEL EEADR
CLRF EEADR ; Set EE Address to zero
BANKSEL EEDAT
MOVLW 0x08 ; Store the value 0x08 in the EEPROM
MOVWF EEDAT
BANKSEL EECON1
BSF EECON1, WREN ; Enable writes to the EEPROM
BANKSEL EECON2
MOVLW 0x55 ; Do the thing we have to do so
MOVWF EECON2 ; that writes can work
MOVLW 0xAA
MOVWF EECON2
BANKSEL EECON1
BSF EECON1, WR ; And finally perform the write
WAIT
BTFSC EECON1, WR ; Wait for write to finish
GOTO WAIT
BANKSEL PORTC ; Just to make sure we are on the right bank
在第 122 页16F690 数据表 http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en023112,它详细介绍了写入 EEPROM 的正确方法:
BANKSEL EEADR ;
MOVF DATA_EE_ADDR, W;
MOVWF EEADR ;Data Memory Address to write
MOVF DATA_EE_DATA, W;
MOVWF EEDAT ;Data Memory Value to write
BANKSEL EECON1 ;
BCF EECON1, EEPGD ;Point to DATA memory
BSF EECON1, WREN ;Enable writes
BCF INTCON, GIE ;Disable INTs.
BTFSC INTCON, GIE ;SEE AN576
GOTO $-2
; BEGIN REQUIRED SEQUENCE
MOVLW 55h ;
MOVWF EECON2 ;Write 55h
MOVLW AAh ;
MOVWF EECON2 ;Write AAh
BSF EECON1, WR ;Set WR bit to begin write
BSF INTCON, GIE ;Enable INTs.
SLEEP ;Wait for interrupt to signal write complete
; END REQUIRED SEQUENCE
BCF EECON1, WREN ;Disable writes
BANKSEL 0x00 ;Bank 0
我注意到你特别错过了这一行:
BCF EECON1, EEPGD ;Point to DATA memory
If EEPGD
总是设置的,那么您将尝试写入程序存储器(也称为覆盖闪存程序存储器),除非您特意专门启用它,否则它总是会失败。
除此之外,据我从阅读您的代码来看,其他一切看起来都很好。没关系,你可以投票EECON1.WR
而不是设置中断。这比让设备进入睡眠状态会消耗更多的电量,但当然,您应该一次只担心一件事。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)