Utilisation des interruptions
Les mots ecrits en vert sont explicités à la fin de la page.
Exemple n°4: Lecture et écriture dans la mémoire EEPROM du PIC
Voici
le schema de cablage, vous pouvez réaliser ce petit montage
sur plaquette d'essais:
Explications
et conseils:
~ C1, C2, et le Quartz 4MHz servent pour
l'horloge du PIC
~ C3 et C4 font office d'anti rebond (sinon
l'interrupteur envoie plein d'impulsions au PIC).
~ C5 sert à
découpler l'alimentation (alim plus stable).
~ Vous
remarquerez le cablage un peu particulier de la LED D. C'est parce
que la patte de sortie RA4 ne dispose pas du transistor de sortie
pour l'etat haut. Ce n'est bien evidemment pas une erreur de la
part de Microchip, mais ca sert pour les communications série
I2C (peut etre un jour sur le site).
~ Il est normal qu'il n'y
ait pas de resistance de rappel pour les interrupteurs, car elles
sont integrées dans le PIC (il suffit de les activer).
~
N'oubliez pas de relier la patte RESET au +5V.
~ Attention
l'alimentation doit etre de bonne qualité et valoir de 4.5V
à 5.5V.
Le
cablage sur plaque d'essais:
Notez que cet exemple va vous permettre de comprendre comment fonctionne la lecture et l'ecriture dans le mémoire EEPROM. Si vous avez deja une idée d'application, il vous suffit de recopier les routines Ecriture et Lecture de mon programme.
Vous pouvez cliquer ici pour telecharger le programme (au format .asm. Il faudra le compiler avec xgpasm ou MPASM. Regardez les pages precedentes pour plus d'informations)
list p=16f84,f=inhx8m __config B'11111111110001' include "p16f84.inc" bsf STATUS,RP0 movlw B'11100000' movwf TRISA bcf OPTION_REG,7 bcf STATUS,RP0 clrf PORTA clrf EEADR Boucle btfss PORTB,6 call Enregistre btfss PORTB,7 call Lit goto Boucle Enregistre btfss PORTB,6 goto Enregistre comf PORTB,0 movwf EEDATA movwf PORTA call Ecriture incf EEADR,1 return Lit btfss PORTB,7 goto Lit call Lecture movf EEDATA,0 movwf PORTA incf EEADR,1 return ;===================================================================== ; Sous programme pour ecrire dans la memoire EEPROM ; on ecrit l'octet contenu dans EEDATA à l'adresse contenue dans EEADR ;===================================================================== Ecriture bsf STATUS,RP0 clrf EECON1 bsf EECON1,WREN movlw H'55' movwf EECON2 movlw H'AA' movwf EECON2 bsf EECON1,WR EcritureFin btfsc EECON1,WR goto EcritureFin bcf STATUS,RP0 return ;======================================================================== ; Sous programme pour lire dans l'EEPROM ; on lit l'octet contenu à l'adresse EEADR. Cet octet est mis dans EEDATA ;======================================================================== Lecture bsf STATUS,RP0 bsf EECON1,RD bcf STATUS,RP0 return ;==================================================================================== ; Permet d'ecrire des donnees dans la memoire EEPROM du PIC à l'aide du programmateur ;==================================================================================== org H'2100' de B'00000001',B'00000010',B'00000100',B'00001000' de B'00010000',B'00010000',B'00001000',B'00000100' de B'00000010',B'00000001',B'00000000' end |
Principe de fonctionnement du programme:
A chaque appui sur
l'interrupteur S2, le PIC va lire le contenu de la mémoire
EEPROM à l'adresse contenue dans EEADR. Il affiche alors
l'octet récupéré sur le PORTA; port sur
lequel sont branchées 5 leds.
Ensuite, EEADR est
incrementé pour pouvoir lire la valeur suivante dans
l'EEPROM au prochain appui sur la touche.
A chaque appui sur
l'interrupteur S1, le PIC va lire enregistrer la valeur du PORTB
dans l'EEPROM à l'adresse contenue dans EEADR. Il affiche
en meme l'octet qu'il va ecrire sur le PORTA.
Ensuite, EEADR
est incrementé pour pouvoir ecrire la valeur suivante dans
l'EEPROM au prochain appui sur la touche.
L'utilisation du
programme se résume à appuyer sur S2 pour faire
défiler le contenu de l'EEPROM. (vous allez voir les LEDs
s'allumer les unes après les autres).
Ensuite, vous
pouvez faire un reset (couper l'alimentation); et appuyer sur S1,
changer la valeur de l'interrupteur DIL, appuyer sur S1, changer
la valeur de l'interrupteur DIL, .... Ceci aura pour effet
d'enregistrer les differentes valeurs du PORTB dans l'a memoire
EEPROM.
Eteingnez de nouveau l'alimentation, (vous pouvez meme
enlever le PIC pour constater que la memoire est bien de type
EEPROM); rallumez la. Et la appuyez sur S2. Vous allez voir
défiler les valeurs que vous aviez precedamment rentrées
sur le PORTB !
Notez qu'on prend le
complement du PORTB lorsqu'on ecrit dans la mémoire EEPROM.
Cela tient au fait que les interrupteurs sont connectés à
la masse et non au +5V. Autrement dit, si on veut que lorsqu'on
ferme un interrupteur, la LED s'allume, il faut inverser l'etat de
l'entree correspondante dans le PIC.
Notez egalement qu'on
ecrit dans la memoire EEPROM des valeurs de 8 bits. Là
l'affichage est limité à 5 bits, mais ce n'est pas
pour ca que les 3 restants ne sont pas enregistés.
Le détail de chaque ligne du programme est inclus dans le programme lui meme.
Si vous avez des questions supplementaires, n'hesitez pas à m'ecrire: xizard@enib.fr. Notez que le programme à ete testé.
Interret
de la mémoire EEPROM:
Cette
mémoire est extremement utile, elle permet de garder des
informations pendant plusieurs décénies, dans
electricité. Plus pratiquement, elle peut permettre de
mémoriser un code secret pour une serrure codée,
d'enregistrer des informations "utilisateur"pour un
montage, ...
Quelques définitions:
memoire EEPROM: c'est une mémoire contenue dans le PIC, qui est non volatile, c'est à dire qu'elle ne s'efface pas lorsqu'on ne l'alimente plus. L'inconvenient de cette mémoire est sa lenteur. Il faut environ 4ms pour écrire dans cette mémoire, alors que dans la RAM du PIC, il faut moins d'une µs, soit plus de 4000 fois moins.
Ecrivez nous: xizard@enib.fr et rbourdon@enib.fr