Vous êtes sur la page 1sur 4

Chapitre 6 Utilisation de l’EEPROM du PIC 16F877

6.1. INTRODUCTION
L’EEPROM est une mémoire que l’on peut programmer et effacer électriquement. Le programme du
microcontrôleur peut directement écrire des données dans cette mémoire non volatile. L’effacement
peut se faire par réécriture de données.

6.2. MISE EN OEUVRE


Le microcontrôleur PIC 16F877 contient 256 octets d’EEPROM, l’adresse relative de l’accès est donc
comprise entre 0x00 et 0xFF, ce qui permet de n’utiliser qu’un registre de 8 bits pour définir cette
adresse. Ces octets sont placés à l’adresse 2100h.
Pour lire ou écrire par programme, on utilise un adressage relatif grâce à un registre spécifique.
L’adresse de début de la zone est 0x00 et l’adresse de fin est 0xFF.
L’utilisation de l’EEPROM se fait grâce à quatre registres :

 EEDATA, à l’adresse 10Ch du bloc mémoire 3, est un registre de transition pour les données
en lecture et en écriture. C’est dans ce registre que transitent les données transférées.

 EEADR, à l’adresse 10D du bloc mémoire 3, précise l’adresse de lecture ou d’écriture dans
l’EEPROM.

 EECON1, à l’adresse 18Ch du bloc mémoire 4, est un registre de contrôle d’accès à la mémoire
EEPROM. Il se compose de 5 bits comme le montre la figure suivante :

EECON1 EEPGD - - - WRERR WREN WR RD


18Ch - - - - R/W-x R/W-0 R/W-0 R/W-x

- RD (ReaD control bit) : ce bit mis à 1 démarre un cycle de lecture. Il est remis à 0
automatiquement à la fin de la lecture. Il ne peut être mis à 0 par programme.
- WR (WRite control bit) : ce bit démarre un cycle d’écriture quand il est mis à 1. il est
mis à 0 automatiquement à la fin du cycle d’écriture et ne peut être mis à 0 par
programme.
- WREN (WRite ENable bit) :ce bit autorise un cycle d’écriture quand il est mis à 1. a la
mise en service du microcontrôleur (Reset), il est à 0.
- WRERR (WRite eeprom ERRor bit) : c’est un indicateur d’erreur en écriture, il passé à 1
quand un cycle d’écriture à été interrompu par un RESET ou par le chien de garde. Il

L.HACINI MCIL3_Les Microcontrôleurs Page 1


Chapitre 6 Utilisation de l’EEPROM du PIC 16F877
peut être lu par le programmeur pour éventuellement recommencer l’écriture. La donnée
et l’adresse de travail restent inchangées.
- Les bits 4 à 6 : non utilisés
- EEPGD (EEprom ProGram/Data select bit): ce bit permet de sélectionner l’écriture en
mémoire EEPROM ou en mémoire FLASH.

 EECON2, à l’adresse 18Dh du bloc mémoire 4, est un registre de contrôle qui n’existe pas
physiquement, il ne sert qu’à des commandes spécifiques d’écriture. Sa lecture donne 0.
MICROCHIP l’utilise en tant que registre de commande. L’écriture de valeurs spécifiques dans
EECON2 provoque l’exécution d’une commande spécifique dans l’électronique interne du PIC.

6.3. LECTURE DANS L’EEPROM


Pour lire un octet il suffit de mettre une adresse dans le registre d’adresses EEADR, puis de lancer le
cycle de lecture avec le bit RD de registre EECON1. le résultat de la lecture se trouve alors dans le
registre de données EEDATA jusqu’à ce qu’elle soit modifiée par le programme (nouveau cycle de
lecture ou d’écriture).
Ce cycle de lecture est souvent utilisé, il est donc intéressant de le transformer en macro pour simplifier
le programme. Cette macro doit contenir l’adresse de lecture, on réalise une macro avec passage de
paramètre.

LECTEEP macro ADREEP ; ADREEP est le paramètre de la macro


Movlw ADREEP ; mettre l’adresse de l’octet à lire dans w
bcf STATUS, RP0 ; passer au bloc 3
bsf STATUS, RP1
movwf EEADR ; mettre l’adresse dans le registre EEADR
bsf STATUS, RP0 ; passer au bloc 4
bcf EECON1, EEPGD ; utilisation de l’EEPROM
bsf EECON1, RD ; lancer la lecture
bcf STATUS, RP0 ; passer au bloc 3
movf EEDATA, w ; mettre la valeur lue dans w
endm ; fin de la macro

Pour utiliser cette macro, il suffit d’écrire :

LECTEEP 0xYY ; 0xYY est l’adresse de la donnée à lire en EEPROM.

L.HACINI MCIL3_Les Microcontrôleurs Page 2


Chapitre 6 Utilisation de l’EEPROM du PIC 16F877

Remarque :
L’emplacement physique réel de l’EEPROM commence à l’adresse 0x2100, alors que l’adresse
relative employée dans le programme commence à la valeur 0x00. C’est-à-dire que lorsqu’on
accède à l’adresse EEPROM 0x01 dans le programme, la donnée se trouvera physiquement à
l’adresse 0x2101 du PIC.

6.4. ECRITURE DANS L’EEPROM


Pour écrire il suffit de mettre l’adresse de la destination dans le registre EEADR et l’octet à écrire
dans le registre EEDATA, puis de lancer l’opération d’écriture par la mise à 1 du bit WR du registre
EECON1.
Il est intéressant de créer une macros pour l’écriture, celle-ci devra passer deux paramètres :
l’adresse et la donnée. La macro qui suit doit être appelée après avoir mis la donnée dans
l’accumulateur w, le paramètre adreep est l’adresse d’écriture.

ECREEP macro adreep ; adreep est le paramètre de la macro


bcf STATUS, RP0 ; passer au bloc 3
bsf STATUS, RP1
movwf EEDATA ; mettre la donnée à écrire dans EEDATA
movlw adreep ; mettre l’adresse de l’octet à écrire dans w
movwf EEADR ; mettre l’adresse dans le registre EEADR
bsf STATUS, RP0 ; passer au bloc 4
bcf EECON1, EEPGD ; utilisation de l’EEPROM
bsf EECON1, WREN ; autoriser l’écriture
bcf INTCON, GIE ; masquer les interruptions
movlw 0x55
movwf EECON2
movlw 0xAA
movwf EECON2
bsf EECON1, WR ; lancer l’écriture
bcf EECON1, WREN ; empêcher une prochaine écriture
endm ; fin de la macro

Remarques :

 L’écriture d’un octet en mémoire EEPROM nécessite une durrée de l’ordre de 4 ms (PIC
16F877 de 20 MHz) cela représente pas moins de 20000 cycles d’instruction. Donc les
écritures en EEPROM nécessitent énormément de temps à l’échelle du PIC.

 A la fin du cycle d’écriture, il s’écoule un certain temps avant que la donnée ne soit écrite en
mémoire. Il faut donc attendre et vérifier que tout soit terminé avant de recommencer un
autre cycle ou de lire cette donnée.

L.HACINI MCIL3_Les Microcontrôleurs Page 3


Chapitre 6 Utilisation de l’EEPROM du PIC 16F877

 La fin de l’écriture peut être détectée en lisant l’état de l’indicateur EEIF, ou en lisant l’état
du bit WR qui est remis automatiquement à 0 en fin de cycle.

 Le bit WREN n’est pas remis à 0 automatiquement en fin de cycle d’écriture.

 A la fin d’écriture le bit EEIF passe à 1, ce qui permet de demander une interruption si le bit
EEIE le permet

6.5. VERIFICATION DE L’ECRITURE


Dans des EEPROM très souvent programmées parfois à la limite du nombre maximum prévu par le
constructeur, il peut être utile de vérifier l’information écrite.
Cette vérification peut être effectuée par exemple en exécutant les instructions suivantes :

bcf STATUS, RP0


bsf STATUS, RP1 ; passer au bloc 3
movf EEDATA, w ; mettre la donnée dans w
bsf STATUS, RP0 ; passer au bloc 4
lecture
bsf EECON1, RD ; déclancher la lecture
bcf STATUS, RP0 ; passer au bloc 3
subwf EEDATA, w ; soustraction pour comparaison entre donnée
; lue et donnée prévue (dans w)
btfss STATUS,z ; test du bit z
goto erreur ; si z=1 continue le programme
; si z=0 on saute à un sou programme d’erreur

6.6. L’INTERRUPTION DE FIN D’ECRITURE


La fin d’un cycle d’écriture peut être la source d’une demande d’interruption. Pour cela il faut
autoriser cette interruption en mettant à 1 : le masque EEIE du registre PIE2, le masque des
interruptions périphériques PEIE du registre INTCON et le masque global des interruptions GIE.
Cette interruption ne peut survenir qu’après le cycle d’écriture.

.7. INITIALISATION D’UNE ZONE EEPROM


La directive pour déclarer des valeurs en EEPROM est DE. Ces valeurs seront alors écrites en
EEPROM directement au moment de la programmation. Dans ce cas la directive DE est précédée
par la directive ORG pointant sur un emplacement EEPROM valide (de 0x2100 à 0x21FF).
Exemple :
ORG 0x2100 ; début de la zone EEPROM
DE 2,4,8 ; mettre 2 dans 0x2100, 4 dans
0x2101 etc. ; DE veut dire Data Eeprom

L.HACINI MCIL3_Les Microcontrôleurs Page 4

Vous aimerez peut-être aussi