Beruflich Dokumente
Kultur Dokumente
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
Eles mmoires sont charges de stocker le programme qui sera excut ainsi que les
donnes ncessaires et les rsultats obtenus
Ele 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.
Eles 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 ).
2) Intrt des microcontrleurs :
Les microcontrleurs sont de taille tellement rduite quils peuvent tre sans difficult
implants sur lapplication mme quils sont censs piloter. Leur prix et leurs performances
simplifient normment la conception de systme lectronique et informatique. Lutilisation
des microcontrleurs ne connat de limite que lingniosit des concepteurs, on les trouve
dans nos cafetires, les magntoscopes, les radios ..Une tude mene en lan 2004 montre
quen moyenne, un foyer amricain hberge environ 240 microcontrleurs.
Page1/27
PISAK S.
Le pic16F84
Figure 2
ELa mmoire de programme contient les instructions pilotant lapplication
laquelle le microcontrleur est ddi. Il sagit dune mmoire non volatile ( elle
garde son contenu, mme en labsence de tension ), elle est de type FLASH cest
dire quelle peut tre programme et efface par lutilisateur via un programmateur
et un PC. La technologie utilise permet plus de 1000 cycles deffacement et de
programmation. Pour le PIC 16F84 cette mmoire est dune taille de 1024*14 bits,
cest dire quelle dispose de 1024 emplacements ( de 000h 3FFh ) contenant
chacun 14 cases car dans le cas du PIC, les instructions sont codes sur 14 bits. On
peut donc stocker 1024 instructions.
ELa mmoire de donne est spare en deux parties :
-une mmoire RAM de 68 octets puisque le bus de donne est de huit bits.
Cette RAM est volatile (les donnes sont perdues chaque coupure de
courant). On peut y lire et crire des donnes.
-une mmoire EEPROM de 64 octets dans laquelle on peut lire et crire des
donnes ( de huit bits soit un octet ) et qui possde lavantage dtre non
volatile ( les donnes sont conserves mme en labsence de tension ). La
lecture et lcriture dans cette mmoire de donnes sont beaucoup plus lentes
que dans la mmoire de donnes RAM.
Page2/27
PISAK S.
Le pic16F84
Figure 3
ELalimentation 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.
ELe 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.
ELa 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
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 ).
Page3/27
PISAK S.
Le pic16F84
A la mise sous tension, la patte MCLR tant zro, le programme dmarre donc
ladresse 0000,( MCLR=Master Clear Reset ).
ELes 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.
Page4/27
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 :
Ela phase de recherche du code binaire de linstruction stock dans la mmoire de
programme
Ela 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
Page5/27
PISAK S.
Le pic16F84
Figure 7
4) Droulement dun programme
Le droulement dun programme seffectue de faon trs simple. A la mise sous tension, le
processeur va chercher la premire instruction qui se trouve ladresse 0000 de la mmoire de
programme, lexcute puis va chercher la deuxime instruction ladresse 0001 et ainsi de
suite ( sauf cas de saut ou dappel de sous programme que nous allons voir plus loin ). On
parle de fonctionnement squentiel. La figure 8 va nous permettre de mieux comprendre le
fonctionnement :
Figure 8
Page6/27
PISAK S.
Le pic16F84
EOn 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.
EMais 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.
ELadresse 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.
ELadresse 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.
5) La mmoire de donnes RAM
Si lon regarde la mmoire de donne RAM, on saperoit que celle-ci est un peu particulire
comme le montre la figure 9 :
On constate en effet que cette mmoire est spare en deux pages ( page 0 et page 1 ). De
plus, on remarque que tant pour la page 0 que pour la page 1, les premiers octets sont rservs
( SFR pour Special File Register ). Ces emplacements sont en effet utiliss par le
microcontrleur pour configurer lensemble de son fonctionnement. On les appelle registres
spcifiques et nous verrons au chapitre suivant leurs rles.
Le bus dadresse qui permet dadresser la RAM est compos de 7 fils ce qui veut dire quil est
capable dadresser 128 emplacements diffrents. Or, chaque page de la RAM est compose de
128 octets, le bus dadresse ne peut donc pas accder aux deux pages, cest pourquoi on
utilise une astuce de programmation qui permet de diriger le bus dadresse soit sur la page 0,
soit sur la page 1. Cela est ralis grce un bit dun registre spcifique ( le bit RP0 du
registre STATUS ) dont nous verrons le fonctionnement plus loin.
La RAM de donnes proprement dite se rduit donc la zone note GPR (Registre usage
gnrale ) qui stend de ladresse 0Ch ( 12 en dcimale ) jusqu 4Fh ( 79 en dcimale ) soit
au total 68 registres en page 0 et autant en page 1, mais on constate que les donnes crites en
page 1 sont rediriges en page 0 cela signifie quau final lutilisateur dispose uniquement de
68 registres ( donc 68 octets de mmoire vive) dans lesquels il peut crire et lire volont en
sachant qu la mise hors tension, ces donnes seront perdues.
Page7/27
PISAK S.
Le pic16F84
STATUS
Figure 9
Page8/27
STATUS
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.
Eadresse 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 )
Eadresse 01 , TMR0 . Contenu du Timer (8 bits). Il peut tre incrment par
lhorloge (fosc/4) c'est dire tous les 4 coups d'horloge ou par la broche RA4.
Eadresse 02 et 82 , PCL .8 bits de poids faibles du compteur ordinal PC. Les 5 (138) bits de poids forts sont dans PCLATH.
Eadresse 03 et 83 , STATUS Registre dtat .
les cinq bits de poids faible de ce registre sont en lecture seule , ce sont des tmoins
(drapeaux ou flag en anglais) caractrisant le rsultat de lopration ralise par
lUAL. Le bit RP0 est lui en lecture /criture et cest lui qui permet de slectionner la
page dans la mmoire RAM .
Si RP0=0 on accde la page 0 et si RP0=1 on accde la page 1 .
RP0
TO/
PD/
DC
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 ).
Eadresse 04 et 84 , FSR . Registre de slection de registre : contient ladresse dun
autre registre (adressage indirect, non utilis dans le projet )
Eadresse 05 , PORTA . Ce registre contient ltat des lignes du port A ( voir chapitre
sur les ports ).
Eadresse 06 , PORTB . Ce registre contient ltat des lignes du port B ( voir chapitre
sur les ports ).
Eadresse 08 , EEDATA .Contient un octet lu ou crire dans lEEPROM de
donnes.
Eadresse 09 , EEADR . Contient ladresse de la donne lue ou crite dans
lEEPROM de donnes.
Eadresse 0A et 8A, PCLATH . Voir ladresse 02 PCL.
Page9/27
PISAK S.
Le pic16F84
Eadresse 0B et 8B , INTCON .
Contrle des 4 interruptions
GIE
T0IF INTF
RBIF
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.
Eadresse 81 , OPTION
8 bits (tous 1 au RESET) affectant le comportement des E/S et des timers.
RBPU/ INTEDG RTS
RTE
PSA
PS2 PS1
PS0
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.
Eadresse 85 , TRISA . Direction des donnes pour le port A : 0 pour sortir et 1 pour
entrer ( voir chapitre sur les ports ).
Eadresse 86 , TRISB . Direction des donnes pour le port B : 0 pour sortir et 1 pour
entrer ( voir chapitre sur les ports ).
Page10/27
PISAK S.
Le pic16F84
WRERR WREN WR
RD
Page11/27
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
RTS
il se produit un retard de
deux cycles avant que le
timer ne commence
compter aprs un chargement
RTE
Figure 11
Page12/27
PISAK S.
Le pic16F84
Suivant que le pr-diviseur est assign au chien de garde ou au TMR0, la valeur de la prdivision 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.
Page13/27
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
Il suffit ensuite dcrire le programme en langage assembleur ou en C sur un ordinateur grce
au logiciel MPLAB de MICROCHIP ( logiciel gratuit ) puis de le compiler pour le
transformer en langage machine et le transfrer dans le PIC grce un programmateur. Lors
de la mise sous tension, tous les registres spcifiques sont placs dans un tat dtermin
comme le montre la figure 15
Page14/27
PISAK S.
Le pic16F84
Page15/27
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.
Un autre type dinstruction mrite quelques claircissements, ce sont les instructions de
branchement conditionnel. Prenons comme exemple :
BTFSC
f,b
Qui va vouloir dire ( Bit Test File Skip if Clear ) qui signifie
que lon va tester le bit b du registre f ( b peut prendre une
valeur de 0 7 pour un registre 8 bits ) .Il peut alors y avoir
deux solutions :
-Soit le bit test est 1, donc la condition teste nest pas
ralise, le programme continue alors son droulement
normalement en squence avec linstruction juste en
dessous.
-Soit le bit test vaut 0, donc la condition teste est
ralise et le programme saute linstruction qui suit le
BTFSC dans le programme.
Cette faon de programmer peut paratre trange, mais avec de lhabitude, elle savre trs
pratique et permet de raliser des programmes compacts et performants.
Les 35 instructions sont donc les suivantes :
EADDLW ( Add Literal to W )
syntaxe :
ADDLW
k
Opration :
W+kW
Page16/27
PISAK S.
EADDWF (Add W to F )
syntaxe :
ADDWF
f,d
Opration :
Le pic16F84
W ET kW
W ET ff si d=1 ou W ET fW si d=0
f,b
0b(f)
Page17/27
PISAK S.
EBSF ( Bit Set F )
syntaxe :
BSF
Opration :
Le pic16F84
f,b
1b(f)
Page18/27
PISAK S.
Le pic16F84
ECLRF ( Clear F )
syntaxe :
CLRF
Opration :
0F
ECLRW ( Clear W )
syntaxe :
CLRW
Opration :
0W
ECOMF ( Complement F )
syntaxe :
COMF
f,d
opration :
Page19/27
PISAK S.
Le pic16F84
EDECF ( Decrement F )
syntaxe :
DECF
opration :
f,d
EINCF (Increment F)
syntaxe :
INCF
opration :
f,d
Page20/27
PISAK S.
EINCFSZ ( Increment F , Skip if Zero )
syntaxe :
INCFSZ
f,d
opration :
Le pic16F84
W OU k W
W OU ff si d=1 ou W OU fW si d=0
EMOVF ( Move F )
syntaxe :
MOVF
opration :
f,d
ff si d=1 ou fW si d=0
Page21/27
PISAK S.
Le pic16F84
kW
EMOVWF ( Move W to F )
syntaxe :
MOVWF
f
opration :
Wf
ENOP ( No Operation )
syntaxe:
NOP
opration:
nant
Pile PC
Page22/27
PISAK S.
ERETLW ( Return Literal to W )
syntaxe :
RETLW
k
opration :
Le pic16F84
kW , PilePC
PilePC
C
Registre f
Page23/27
PISAK S.
ERRF ( Rotate Right F through carry )
syntaxe :
RRF
f,d
opration :
Le pic16F84
C
Registre f
ESLEEP ( Sleep )
syntaxe :
SLEEP
opration :
On place le circuit en mode sommeil avec arrt de loscillateur. Cette commande est utiliser
avec prcaution, elle ncessite la connaissance du mode sommeil.
ESUBLW ( Substract W from Literal )
syntaxe :
SUBLW
k
opration :
k-WW
Page24/27
PISAK S.
ESWAPF ( Swap F )
syntaxe :
SWAPF
opration :
Le pic16F84
f,d
W OU EXCLUSIF kW
Page25/27
PISAK S.
Le pic16F84
JEU D'INSTRUCTION
Page26/27
PISAK S.
Le pic16F84
;mise 0 de RA0
;retour la boucle de test
;mise 1 de RA0
allum bsf
porta,RA0
goto
bouc
;mise 1 de RA0
;retour la boucle de test
;fin du programme
;utilis par le compilateur
end
Page27/27
Algorithme du programme
dbut
RB0=0?
non
oui
RA0=0
RA0=1