Les Microcontroleurs Pic16f84
Les Microcontroleurs Pic16f84
Les Microcontroleurs Pic16f84
Le pic16F84
I LES MICROCONTROLEURS
1) Quest ce quun microcontrleur :
Cest un ordinateur mont dans un circuit intgr. Les avances technologiques en matire
dintgration, ont permis dimplanter sur une puce de silicium de quelques millimtres carrs
la totalit des composants qui forment la structure de base dun ordinateur. Leur prix varie de
quelques Euros une dizaine d'Euros pour les plus complexes. Comme tout ordinateur, on
peut dcomposer la structure interne dun microprocesseur en trois parties :
-Les mmoires
-Le processeur
-Les priphriques
Cest ce quon peut voir sur la figure 1 :
figure 1
les mmoires sont charges de stocker le programme qui sera excut ainsi que les
donnes ncessaires et les rsultats obtenus
le processeur est le cur du systme puisquil est charg dinterprter les
instructions du programme en cours dexcution et de raliser les oprations quelles
contiennent .Au sein du processeur, lunit arithmtique et logique interprte, traduit
et excute les instructions de calcul.
les priphriques ont pour tche de connecter le processeur avec le monde
extrieur dans les deux sens . Soit le processeur fournit des informations vers
lextrieur (priphrique de sortie ), soit il en reoit (priphrique dentre ).
Page1/28
PISAK S. Le pic16F84
2) Architecture interne
La structure gnrale du PIC 16F84 comporte 4 blocs comme le montre la figure 2 :
-Mmoire de programme
-Mmoire de donnes
-Processeur
-Ressources auxiliaires ( priphriques )
figure 2
Page2/28
PISAK S. Le pic16F84
figure 3
Lalimentation du circuit est assure par les pattes VDD et VSS. Elles permettent
lensemble des composants lectroniques du PIC de fonctionner. Pour cela on relie
VSS (patte 5) la masse ( 0 Volt ) et VDD (patte 14 ) la borne positive de
lalimentation qui doit dlivrer une tension continue comprise entre 3 et 6 Volts.
Le microcontrleur est un systme qui excute des instructions les unes aprs les
autres une vitesse ( frquence ) qui est fixe par une horloge interne au circuit. Cette
horloge doit tre stabilise de manire externe au moyen dun cristal de quartz
connect aux pattes OSC1/CLKIN (patte 16) et OSC2/CLKOUT ( patte 15 ) . Nous
reviendrons en dtail sur lhorloge au paragraphe 3.
La patte 4 est appele MCLR. Elle permet lorsque la tension applique est gale
0V de rinitialiser le microcontrleur. Cest dire que si un niveau bas ( 0 Volt ) est
appliqu sur MCLR le microcontrleur sarrte, place tout ses registres dans un tat
Page3/28
PISAK S. Le pic16F84
connu et se redirige vers le dbut de la mmoire de programme pour recommencer le
programme au dbut ( adresse dans la mmoire de programme :0000 ).
Page4/28
PISAK S. Le pic16F84
A la mise sous tension, la patte MCLR tant zro, le programme dmarre donc
ladresse 0000,( MCLR=Master Clear Reset ).
Les broches RB0 RB7 et RA0 RA4 sont les lignes dentres/sorties numriques.
Elles sont au nombre de 13 et peuvent tre configures en entre ou en sortie. Ce sont
elles qui permettent au microcontrleur de dialoguer avec le monde extrieur
(priphriques). Lensemble des lignes RB0 RB7 forme le port B et les lignes RA0
RA4 forment le port A. Certaines de ces broches ont aussi dautres fonctions
(interruption, timer ).
2) Structure interne
La structure interne du PIC16F84 est donne figure 4 : ( structure HARVARD : la mmoire de
programme et la mmoire de donnes sont spares contrairement l'architecture Von
Neuman qui caractrise d'autres fabricants de microcontrleurs )
figure 4
On retrouve sur ce schma la mmoire de programme, la mmoire RAM de donnes, la
mmoire EEPROM, les ports A et B, ainsi que la partie processeur avec lUAL et le registre
de travail W ( work ). Nous allons tudier prsent plus en dtail le fonctionnement du PIC.
Page5/28
PISAK S. Le pic16F84
3) Principe de fonctionnement du PIC
Un microcontrleur excute des instructions. On dfinit le cycle instruction comme le
temps ncessaire lexcution dune instruction. Attention de ne pas confondre cette notion
avec le cycle dhorloge qui correspond au temps ncessaire lexcution dune opration
lmentaire ( soit un coup d'horloge ).
Une instruction est excute en deux phases :
la phase de recherche du code binaire de linstruction stock dans la mmoire de
programme
la phase dexcution ou le code de linstruction est interprt par le processeur et
excut.
Chaque phase dure 4 cycles dhorloge comme le montre la figure 5 :
figure 5
On pourrait donc croire quun cycle instruction dure 8 cycles dhorloge mais larchitecture
particulire du PIC lui permet de rduire ce temps par deux. En effet, comme les instructions
issues de la mmoire de programme circulent sur un bus diffrent de celui sur lequel circulent
les donnes, ainsi le processeur peut effectuer la phase de recherche dune instruction pendant
quil excute linstruction prcdente ( Voir figure 6 et 7 ).
figure 6
Page6/28
PISAK S. Le pic16F84
figure 7
figure 8
Page7/28
PISAK S. Le pic16F84
On constate sur cette figure que la mmoire de programme contient 1024
emplacements ( 3FF en hexadcimale ) contenant 14 bits ( de 0 13 ). Une instruction
occupe un emplacement qui est dfini par une adresse. Le processeur peut alors
slectionner l'emplacement souhait grce au bus dadresse et il peut lire son contenu (
ici linstruction ) grce son bus dinstruction ( voir figure 7 ). Cet adressage
seffectue laide dun compteur ordinal appel PC qui lors de la mise sous tension
dmarre zro puis sincrmente de 1 tous les quatre coups dhorloge, on excute bien
ainsi les instructions les unes la suite des autres.
Mais il arrive que dans un programme on fasse appel un sous programme dont
ladresse de linstruction ne se trouve pas juste aprs celle qui est en train dtre
excute. Cest le rle de la pile qui sert emmagasiner de manire temporaire
ladresse dune instruction. Elle est automatiquement utilise chaque fois que lon
appelle un sous programme et elle permet une fois que lexcution du sous programme
est termine de retourner dans le programme principal juste aprs lendroit o lon a
appel le sous programme. On constate que cette pile possde huit niveaux, cela
signifie quil nest pas possible dimbriquer plus de huit sous programmes, car au-del
de huit, le processeur ne sera plus capable de retourner ladresse de base du
programme principal.
Ladresse 0000 est rserve au vecteur RESET, cela signifie que cest cette
position que lon accde chaque fois quil se produit une rinitialisation ( 0 volts sur la
patte MCLR ). Cest pour cette raison que le programme de fonctionnement du
microcontrleur doit toujours dmarrer cette adresse.
Ladresse 0004 est assigne au vecteur dinterruption et fonctionne de manire
similaire celle du vecteur de Reset. Quand une interruption est produite et valide, le
compteur ordinal PC se charge avec 0004 et linstruction stocke cet emplacement
est excute.
Page8/28
PISAK S. Le pic16F84
STATUS STATUS
figure 9
Page9/28
PISAK S. Le pic16F84
6) Les registres
Nous avons vu au chapitre prcdent que la mmoire de donnes RAM contenait des registres
spcifiques qui permettent de configurer le PIC, nous allons les dtailler un un et voir
comment on peut accder la page 0 ou la page 1. Afin de faciliter la comprhension, les
registres les plus utiliss sont encadrs.
adresse 00 et 80 ,INDF . Cette adresse ne contient pas de registre physique, elle sert
pour ladressage indirect. (non utilise dans le projet de cette anne )
adresse 02 et 82 , PCL .8 bits de poids faibles du compteur ordinal PC. Les 5 (13-
8) bits de poids forts sont dans PCLATH.
Au reset, seul le bit RP0 de slection de page est fix ( RP0=0 : page 0 )
TO/ (Time Out) : dbordement du timer WDT
PD/ : (Power Down) caractrise lactivit du chien de garde WDT
Z (zro) rsultat nul pour une opration arithmtique et logique.
DC (digit carry) retenue sur un quartet ( 4 bits )
C (carry) retenue sur un octet ( 8 bits ).
adresse 05 , PORTA . Ce registre contient ltat des lignes du port A ( voir chapitre
sur les ports ).
adresse 06 , PORTB . Ce registre contient ltat des lignes du port B ( voir chapitre
sur les ports ).
Page10/28
PISAK S. Le pic16F84
adresse 0B et 8B , INTCON .
Contrle des 4 interruptions
Masques :
GIE : (Global Interrupt Enable) : masque global dinter.
EEIE : (EEProm Interrupt Enable) autorise l'interruption venant de l'EEPROM.
T0IE : (Timer 0 Interrupt Enable) autorise l'interruption provoque par le
dbordement du TIMER0
INTE: ( Interrupt Enable) autorise linterruption provoque par un changement d'tat
sur broche RB0/INT
RBIE: (RB Interrupt Enable) autorise les interruptions provoques par un changement
d'tats sur l'une des broches RB4 RB7.
Si ces bits sont mis 1 , ils autorisent les interruptions pour lesquels ils sont ddis .
Drapeaux :
T0IF : (Timer 0 Interrupt Flag) dbordement du timer
INTF ( Interrupt Flag) interruption provoque par la broche RB0/INT
RBIF ( RB Interrupt Flag) interruption provoque par les broches RB4-RB7.
adresse 81 , OPTION
8 bits (tous 1 au RESET) affectant le comportement des E/S et des timers.
RBPU/ (RB Pull Up) Rsistances de tirage Vdd des entres du port B ( voir le dtail
du fonctionnement au chapitre port ).Si RBPU/=0 les rsistances de pull-up sont
connectes en interne sur l'ensemble du port B.
INTEDG (Interrupt Edge) slection du front actif de linterruption sur RB0/INT ( 1
pour front montant et 0 pour front descendant ).
RTS (Real Timer Source) slection du signal alimentant le timer 0 : 0 pour horloge
interne, 1 pour RA4/T0CLK
RTE (Real Timer Edge) slection du front actif du signal timer ( 0 pour front
montant).
PSA (Prescaler assignment) 0 pour Timer 0 et 1 pour chien de garde WDT.
PS2..0 (Prescaler 210 ) slection de la valeur du diviseur de frquence pour les timers.
adresse 85 , TRISA . Direction des donnes pour le port A : 0 pour sortir et 1 pour
entrer ( voir chapitre sur les ports ).
adresse 86 , TRISB . Direction des donnes pour le port B : 0 pour sortir et 1 pour
entrer ( voir chapitre sur les ports ).
Page11/28
PISAK S. Le pic16F84
Page12/28
PISAK S. Le pic16F84
8) Le Timer
Dans la majeure partie des applications, il est ncessaire de contrler le temps; afin de ne pas
occuper le microcontrleur qu' cette tche ( boucle de comptage qui monopolise le micro ),
on le dcharge en utilisant un timer. Le pic 16F84 dispose de deux timers, un usage gnral (
le TMR0 ) et un autre utilis pour le chien de garde ( watch dog WDG ).
Le TMR0 est un compteur ascendant (qui compte) de 8 bits qui peur tre charg avec une
valeur initiale quelconque. Il est ensuite incrment chaque coup d'horloge jusqu' ce que le
dbordement ait lieu ( passage de FF 00 ); Le principe est reprsent figure 10 :
figure 10
Le pic 16F84 dispose d'un diviseur de frquence qui peut tre assign soit au chien de garde,
soit au TMR0 ( uniquement un la fois ). L'assignation du pr diviseur se fait grce au bit
PSA du registre OPTION. La structure interne du TMR0 est donc la suivante ( figure 11 ):
du registre
intcon
il se produit un retard de
deux cycles avant que le
RTS RTE
timer ne commence
compter aprs un
chargement
figure 11
Page13/28
PISAK S. Le pic16F84
Suivant que le pr-diviseur est assign au chien de garde ou au TMR0, la valeur de la pr-
division n'est pas la mme, il faut donc tre vigilant lors de la programmation comme le
montre la figure 12 :
RTS RTE
RTE
RTS
INTEDG
RPBU/
figure 12
Enfin, vu que le timer ne peut que compter, cela oblige une petite gymnastique lors de
l'introduction de la valeur de pr chargement :
exemple :
On veut que le timer nous indique par la mise un du drapeau T0IF l'coulement d'une dure
de 20ms ( la frquence d'horloge tant de 4MHz ) d'o Fosc/4=1s
si on choisit une pr division de 256 , on aura donc 20000 s / 256 =78
Il ne faut pas charger le TMR0 avec 78 mais avec le complment deux de cette valeur ( car
le timer compte et ne dcompte pas ) d'o 256-78=178
soit en hexadcimale la valeur B2h charger dans le registre TMR0.
Page14/28
PISAK S. Le pic16F84
9) Mise en oeuvre
Lutilisation et la mise en uvre trs simple des PICs les a rendus extrmement populaire au
point que la socit qui les fabrique ( MICROCHIP ) est en passe de devenir le leader mondial
dans le domaine des microcontrleurs devant MOTOROLA et INTEL.
Il suffit dalimenter le circuit par ses deux broches VDD et VSS, de fixer sa vitesse de
fonctionnement laide dun quartz ( figure13) et dlaborer un petit systme pour permettre
de rinitialiser le microcontrleur sans avoir couper lalimentation ( figure 14 ).
figure 13
figure 14
Page15/28
PISAK S. Le pic16F84
figure 15
Page16/28
PISAK S. Le pic16F84
IV JEU DINSTRUCTIONS
Afin de comprendre la fonction de chaque instruction, la notation adopte pour les donnes et
adresses manipules par les instructions est fort simple et est la suivante :
-f reprsente un registre
-b reprsente un numro de bit en sachant que 0 correspond toujours au bit de poids
faible ( le plus droite dans le registre )
-k reprsente une donne aussi appel littral
Un certain nombre dinstructions ( ADDWF , ANDWF , etc.. ) utilise une notation spciale
prsente sous la forme :
ADDWF f,d O f indique le registre et o d peut prendre deux valeurs (0 ou
1), ce qui change le comportement de linstruction . Si d est 0,
le rsultat est plac dans le registre de travail W, la valeur dans
le registre f est alors inchange, alors que si d est 1, le rsultat
est plac dans le registre f.
Opration : W+kW
Page17/28
PISAK S. Le pic16F84
ADDWF (Add W to F )
syntaxe : ADDWF f,d
Opration : W ET kW
Opration : 0b(f)
Page18/28
PISAK S. Le pic16F84
BSF ( Bit Set F )
syntaxe : BSF f,b
Opration : 1b(f)
Si le bit b de f est nul, linstruction qui suit celle-ci est ignore et traite comme un NOP.
Dans ce cas et dans ce cas seulement, linstruction BTFSC demande deux cycles pour
sexcuter.
Si le bit b de f est 1, linstruction qui suit celle-ci est ignore et traite comme un NOP. Dans
ce cas et dans ce cas seulement, linstruction BTFSS demande deux cycles pour sexcuter.
On sauvegarde ladresse de retour dans la pile puis on appelle le sous programme dfinit avec
ltiquette label
Page19/28
PISAK S. Le pic16F84
CLRF ( Clear F )
syntaxe : CLRF f
Opration : 0F
CLRW ( Clear W )
syntaxe : CLRW
Opration : 0W
COMF ( Complement F )
syntaxe : COMF f,d
On complmente le contenu du registre f bit bit , le rsultat est plac dans f si d=1 , dans W
si d=0 .
Page20/28
PISAK S. Le pic16F84
DECF ( Decrement F )
syntaxe : DECF f,d
On diminue le contenu du registre f dune unit, le rsultat est plac dans f si d=1, dans W si
d=0 ( dans ce cas f reste inchang ).
On diminue le contenu du registre f dune unit, le rsultat est plac dans f si d=1, dans W si
d=0 (dans ce cas f reste inchang).Si le rsultat est nul, linstruction suivante est ignore et
dans ce cas, cette instruction dure deux cycles.
On effectue un saut dans le programme pour aller ladresse point par le label prcis dans
GOTO
INCF (Increment F)
syntaxe : INCF f,d
On augment le contenu du registre f dune unit, le rsultat est plac dans f si d=1 , dans W si
d=0 ( dans ce cas f reste inchang ).
Page21/28
PISAK S. Le pic16F84
INCFSZ ( Increment F , Skip if Zero )
syntaxe : INCFSZ f,d
On augmente le contenu du registre f dune unit, le rsultat est plac dans f si d=1, dans W si
d=0 (dans ce cas f reste inchang).Si le rsultat est nul, linstruction suivante est ignore et
dans ce cas, cette instruction dure deux cycles.
opration: W OU k W
MOVF ( Move F )
syntaxe : MOVF f,d
Page22/28
PISAK S. Le pic16F84
opration : kW
MOVWF ( Move W to F )
syntaxe : MOVWF f
opration : Wf
NOP ( No Operation )
syntaxe: NOP
opration: nant
opration : Pile PC
On charge le compteur ordinal avec la valeur qui se trouve au sommet de la pile pour revenir
au programme principal lorsque lexcution du sous programme est termine.
Page23/28
PISAK S. Le pic16F84
RETLW ( Return Literal to W )
syntaxe : RETLW k
opration : kW , PilePC
opration : PilePC
On charge le compteur ordinal PC avec la valeur qui se trouve au sommet de la pile effectuent
ainsi un retour de sous programme. Cest un RETLW simplifi .
opration : 7 6 5 4 3 2 1 0
C
Registre f
On effectue une rotation gauche de un bit du contenu du registre f en passant par le bit de
retenu C . Si d=1 le rsultat est plac dans f , si d=0 , le rsultat est plac dans W
Page24/28
PISAK S. Le pic16F84
RRF ( Rotate Right F through carry )
syntaxe : RRF f,d
opration : 7 6 5 4 3 2 1 0
C
Registre f
On effectue une rotation droite de un bit du contenu du registre f en passant par le bit de
retenu C. Si d=1 le rsultat est plac dans f , si d=0, le rsultat est plac dans W
SLEEP ( Sleep )
syntaxe : SLEEP
On place le circuit en mode sommeil avec arrt de loscillateur. Cette commande est utiliser
avec prcaution, elle ncessite la connaissance du mode sommeil.
opration : k-WW
Page25/28
PISAK S. Le pic16F84
SWAPF ( Swap F )
syntaxe : SWAPF f,d
On change les quatre bits de poids forts avec les quatre bits de poids faibles et on place le
rsultat dans W si d=0 , ou dans f si d=1
opration : W OU EXCLUSIF kW
Page26/28
PISAK S. Le pic16F84
JEU D'INSTRUCTION
Page27/28
PISAK S. Le pic16F84
;mise 0 de RA0
eteint bcf porta,RA0 ;mise 0 de RA0
goto bouc ;retour la boucle de test
;mise 1 de RA0
allum bsf porta,RA0 ;mise 1 de RA0
goto bouc ;retour la boucle de test
;fin du programme
;utilis par le compilateur
end
Page28/28