Chapitre 6 Utilisation de l’EEPROM du PIC 16F877 L.HACINI MCIL3_Les Microcontrô

Chapitre 6 Utilisation de l’EEPROM du PIC 16F877 L.HACINI MCIL3_Les Microcontrôleurs Page 1 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 Chapitre 6 Utilisation de l’EEPROM du PIC 16F877 L.HACINI MCIL3_Les Microcontrôleurs Page 2 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. Chapitre 6 Utilisation de l’EEPROM du PIC 16F877 L.HACINI MCIL3_Les Microcontrôleurs Page 3 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. Chapitre 6 Utilisation de l’EEPROM du PIC 16F877 L.HACINI MCIL3_Les Microcontrôleurs Page 4  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 uploads/Litterature/ mcil3-c-chapitre-6-ii.pdf

  • 17
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager