You are on page 1of 7

Ecriture En EEPROM

Introduction
Pour ce Projet, on est sensé donner une façon d’écrire dans l’EEPROM du PIC 16F84A qui, comme
nous le savons dispose de 64 octets (64 x 8 bits) de mémoire EEPROM.

Les EEPROM (Electrically Erasable Programmable Read Only Memory) sont effaçables et
programmables par l'utilisateur. Elles sont plus faciles à effacer que les EPROM car elles sont
effaçables électriquement donc sans manipulations physiques. On rappelle qu'une opération
d'écriture dans une mémoire de type EEPROM est très lente : plusieurs millisecondes (1 ms = 5 000
cycles avec un quartz de 20 MHz !).Et elles sont accessibles indirectement à travers les registres
EEADR, EEDATA, EECON1 et EECON2.

Définition des différents registres entrant en jeu dans cette opération :

Registre EEADR
Dans ce registre, on met l'adresse de la mémoire EEPROM que l'on veut lire ou écrire

Cette adresse est limitée à l'espace 00h-3Fh (64 cases)

Tous bits:

Fonctionne en R/W

Après Power On Reset: état aléatoire

Après tous les autres Resets: inchangé

Le 16f84 consomme légèrement moins si les bits de ce registre sont à 0, on peut donc commencer un
programme par clrf EEADR

Les 64 octets sont situés aux adresses 0x00 à 0x3F.

Registre EEDATA
Ce registre contient la valeur de la mémoire EEPROM que l'on veut lire ou écrire; on y met donc la
valeur désirée avant la procédure d'écriture, on va y lire la valeur après une procédure de lecture.

Il se situe a l’adresse 0x08 (banque 0) ?

Tous bits

Fonctionne en R/W

Après Power On Reset: état aléatoire

Après tous les autres Resets: inchangé


Registre EECON1
C'est le registre de contrôle de la mémoire EEPROM

Les trois bits forts sont à 0

Bit 4: EEIF

EEPROM Interrupt Flag

Fonctionne en R/W

Après Power On Reset: Passe à 0

Après tous les autres Resets: Passe à 0

EEIF =1: l'opération d'écriture s'est terminée correctement

EEIF =0: l'opération d'écriture n'est pas terminée, ou n'a pas commencé

Penser à le remettre à 0 avant de lancer une écriture dans l'EEPROM

Bit 3: WRERR

Write Error

Fonctionne en R/W

Après Power On Reset: état aléatoire

Après tous les autres Resets: Selon le cas

WRERR =1: L'écriture a été interrompue prématurément par un Reset MCLR ou par le Watchdog

WRERR =0: L'écriture n'a pas été interrompue prématurément

Bit 2: WREN

Write Enable

Fonctionne en R/W

Après Power On Reset: Passe à 0

Après tous les autres Resets: Passe à 0

WREN =1: Autorise l'écriture de l'EEPROM

WREN =0: Interdit l'écriture de l'EEPROM

Penser à le remettre à 0 après écriture


Bit 1: WR

Write

Fonctionne en Read et en mise à 1 uniquement

Après Power On Reset: Passe à 0

Après tous les autres Resets: Passe à 0

Après le cycle d'écriture: Passe à 0

WR =1: Lance l'écriture dans l'EEPROM

WR =0: Le cycle d'écriture de l'EEPROM est terminé

Bit 0: RD

Read

Fonctionne en Read et en mise à 1 uniquement

Après Power On Reset: Passe à 0

Après tous les autres Resets: Passe à 0

Après le cycle de lecture: Passe à 0

RD =1: Permet la lecture de l'EEPROM

RD =0: Le cycle de lecture de l'EEPROM est terminé

Registre EECON2
Ce registre n'est utilisé qu'en écriture lors de l'écriture dans une mémoire EEPROM

La séquence 55h AAh doit lui être écrite

Ce registre est virtuel, situé dans l'adresse 0x89 (banque 1) de la mémoire des données (Data RAM).

Lecture d'une donnée en mémoire EEPROM


L'opération dans l'ordre est la suivante:

L'adresse est mise dans le registre EEADR (09h)

Le bit 0 RD du registre EECON1 (88h) est mis à 1 (par bsf EECON1,RD), il passera seul à 0 quand la
lecture sera terminée

La lecture du contenu se fait par lecture du registre EEDATA (08h)

Exemple: (l'adresse de la case EEPROM à lire est dans le registre de travail W, le résultat sera dans W)
movwf EEADR; met cette adresse dans EEADR

bsf STATUS,RP0; passe en page 1

bsf EECON1,RD; lance l'opération de lecture

bcf STATUS,RP0; passe en page 0

movf EEDATA,W; met le contenu de l'EEPROM dans le registre de travail W

Ecriture d'une donnée en mémoire EEPROM


L'opération dans l'ordre est la suivante:

L'adresse est mise dans le registre EEADR (09h)

Le contenu à transférer est mis dans le registre EEDATA (08h)

Toutes les interruptions sont inhibées par mise à 0 du bit 7 GIE du registre INTCON (0Bh ou 8Bh)

L'écriture est autorisée par mise à 1 du bit 2 WREN du registre EECON1 (88h)

Mettre la valeur 55h dans le registre EECON2

Mettre la valeur AAh dans le registre EECON2

Lancer l'écriture dans l'EEPROM par mise à 1 du bit 1 WR du registre EECON1 (88h); ce bit passera
seul à 0 quand l'écriture sera terminée, ce qui peut prendre une dizaine de millisecondes.

Remettre l'autorisation des interruptions par mise à 1 du bit 7 GIE du registre INTCON

Interdire l'écriture par mise à 0 du bit 2 WREN du registre EECON1 (88h)

Le Power up Timer de 72 ms interdit une écriture accidentelle à l'allumage

Lorsque l'écriture a eu lieu, le bit 4 (EEIF) du registre EECON1 (88h) passe à 1

Il peut être bon de vérifier que l'opération d'écriture s'est bien passée, le bit 3 WRERR du registre
EECON1 (88h) est à 1 quand l'opération a été interrompue par un Reset MCLR ou un Watchdog; il
faut alors recommencer, mais les valeurs dans EEDATA et EEADR sont toujours valables.

Une interruption peut être générée à la fin de cette écriture:

L' interruption est autorisée si le bit 6 (EEIE) du registre INTCON (0Bh ou 8Bh) est à 1

Exemple: (La valeur à écrire et l'adresse sont dans EEDATA etEEADR)

bcf INTCON,GIE ; interdiction des interruptions

bsf STATUS,RP0 ; passe en page 1

bcf EECON1,EEIF ; met à 0 le flag de fin d'écriture au cas où il serait à 1


bsf EECON1,WREN ; autorise l'écriture

movlw h'55'

movwf EECON2 ; exigé par le PIC

movlw h'aa'

movwf EECON2 ; exigé par le PIC

bsf EECON1,WR ; lance l'écriture

bcf EECON1,WREN ; interdit une nouvelle écriture

bcf STATUS,RP0 ; passe en page 0

bsf INTCON,GIE ; ré-autorise éventuellement les interruptions

Mémoire de configuration:
(Mémoire flash)

Elle s'étend de h'2000' à h'2007' et contient des bits de configuration

Chaque mémoire occupe 14 bits mais tous ne sont pas accessibles

Cette mémoire est non volatile

Elle ne peut être écrite et effacée que 1000 fois

Elle n'est accessible qu'à la programmation du PIC

Cases Mémoire 2000h à 2003h:

Il est possible d'y inscrire des informations d'identification sur les 4 bits de poids faible grâce à la
directive DE après avoir précisé comme origine h'2000'.

Case Mémoire 2007h:

Les bits 0 et 1 (FOSC0) et (FOSC1) déterminent le Type d'oscillateur utilisé

Mémoire programme 2007h

Bit 1 (FOSC1) Bit 0 (FOSC0) Type d'oscillateur

1 1 RC (par défaut)

1 0 HS
0 1 XT

0 0 LP

Le bit 2 (WDTE) autorise ou non le fonctionnement du Watchdog Timer

Mémoire de configuration 2007h

Bit 2 (WDTE) WatchDog Timer Enable

1 par défaut Watch Dog actif

0 Watch Dog désactivé

Le bit 3 (PWRTE) autorise ou non le fonctionnement du Power UP Timer produisant un délai de 72 ms


à l'allumage qui prolonge le Power On Reset (POR)

Mémoire de configuration 2007h

Bit 3 (PWRTE) Power-Up Timer Enable

1 par défaut Power-Up Timer désactivé

0 Power-Up Timer actif

Ce délai dépend de la température et de la tension d'alimentation.

Le bits 4 (CP) Code Protection permet d'interdire la lecture du code programme dans le
microcontroleur, son effacement est toujours autorisé, et les EEPROMS sont toujours lisibles.

Mémoire de configuration 2007h

Bits 4 (CP) Program memory Code Protection

1 par défaut La lecture n'est pas protégée


0 La lecture est interdite

Les 5 bits sont à 1 par défaut, soit

Pas de Code Protect

Pas de Power UP Timer

Watchdog actif

Oscillateur RC

Code Protect Power Up Timer Watchdog Oscillateur

bit 4 bit 3 bit 2 bit 1, bit 0

0->Oui 0->Oui 0->Non 00->LP, 01->XT

1->Non 1->Non 1->Oui 10->HS, 11->RC

Note : On écrit dans la mémoire de configuration avec la directive __config

You might also like