Écriture EEPROM sur PIC
-
27-09-2019 - |
Question
Y a-t-il des programmeurs microcontrôleur PIC ici?
J'apprends une programmation de microcontrôleurs PIC en utilisant un PICKit2 et la puce 16F690 qui est venu avec elle. Je travaille en essayant les diverses installations pour le moment. Je peux sucessfully lire un octet de la mémoire EEPROM dans le code si je mets la vaklue EEPROM MPLAB mais je ne semble pas être en mesure de modifier la valeur à l'aide du PIC itsself. Tout simplement rien ne se passe et je ne me lit pas en arrière la valeur modifiée, je toujours l'original qui me implique que la écriture ne fonctionne pas?
Ceci est mon code pour cette section, que je manque quelque chose? Je sais que je fais beaucoup de commutateurs bancaires inutiles, j'ai ajouté la plupart d'entre eux pour assurer que d'être sur la mauvaise banque n'était pas la question.
; ------------------------------------------------------
; 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
La solution
A la page 122 du 16F690 fiche , il détaille la une bonne façon d'écrire dans l'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
Je remarque que vous manquez spécifiquement cette ligne:
BCF EECON1, EEPGD ;Point to DATA memory
Si EEPGD
est toujours défini, vous allez essayer d'écrire à la mémoire de programme (remplacer aka la mémoire flash de programme) qui devrait toujours échouer, à moins que vous êtes sorti de votre chemin pour permettre spécifiquement que.
En dehors de cela, pour autant que je peux dire à la lecture de votre code, tout le reste semble bien. Il est normal que vous EECON1.WR
de vote au lieu de définir une interruption. Il vous en coûtera plus de puissance que de mettre l'appareil à dormir, mais bien sûr, vous devriez juste vous inquiétez pas d'une chose à la fois.
Autres conseils
Si vous utilisez le compilateur de haute technologie, l'écriture dans l'EEPROM est aussi simple que #include puis dans le principal, EEPROM_WRITE (0, 0x00); ou vraiment EEPROM_WRITE (lieu d'écrire à valeur pour y écrire);
Je n'ai pas vraiment eu le courage d'écrire mes photos dans l'assemblage. Bonne chance !!
Le chemin du compilateur XC8:
#include <xc.h>
.....
value = eeprom_read(address);
eeprom_write(address, data);