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
Était-ce utile?

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);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top