You are on page 1of 28

PISAK S.

Le pic16F84

LES MICROCONTROLEURS 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 ).

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/28
PISAK S. Le pic16F84

II PRESENTATION GENERALE DU PIC 16F84


1) Classification du PIC 16F84
Le PIC 16F84 est un microcontrleur 8 bits. Il dispose donc d'un bus de donnes de huit bits.
Puisquil traite des donnes de huit bits, il dispose dune mmoire de donne dans laquelle
chaque emplacement (dfini par une adresse) possde huit cases pouvant contenir chacune un
bit.

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

La 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.
La 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/28
PISAK S. Le pic16F84

Le processeur est form de deux parties :


-une unit arithmtique et logique ( UAL ) charge de faire des calculs.
-un registre de travail not W sur lequel travail lUAL.

les ressources auxiliaires qui sont dans le cas du PIC16F84


-ports dentres et de sorties.
-temporisateur.
-interruptions
-chien de garde
-mode sommeil
Ces ressources seront analyses dans la suite du cours.

III STRUCTURE INTERNE DU PIC 16F84


1) Brochage et caractristiques principales
Le PIC16F84 est un circuit intgr de 18 broches ( figure 3) :

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

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

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.

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.

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 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.

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.

adresse 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/ Z DC C

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 04 et 84 , FSR . Registre de slection de registre : contient ladresse dun


autre registre (adressage indirect, non utilis dans le projet )

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 ).

adresse 08 , EEDATA .Contient un octet lu ou crire dans lEEPROM de donnes.

adresse 09 , EEADR . Contient ladresse de la donne lue ou crite dans


lEEPROM de donnes.

adresse 0A et 8A, PCLATH . Voir ladresse 02 PCL.

Page10/28
PISAK S. Le pic16F84

adresse 0B et 8B , INTCON .
Contrle des 4 interruptions

GIE EEIE T0IE INTE RBIE 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.

adresse 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.

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

adresse 88 , EECON1 Contrle le comportement de lEEPROM de donnes.

EEIF WRERR WREN WR RD

EEIF (EEProm Interrupt Flag) passe 1 quand lcriture est termine.


WRERR (Write Error) 1 si erreur dcriture.
WREN (Write Enable) : 0 pour interdire lcriture en EEPROM de donnes.
WR (Write) 1 pour crire une donne. Bit remis automatiquement 0
RD (Read) : 1 pour lire une donne. Bit remis automatiquement 0

adresse 89 , EECON2 . Registre de scurit dcriture en EEPROM de donnes.


Une donne ne peut tre crite quaprs avoir crit successivement 0x55 et 0xAA dans
ce registre.

7) Les ports dentres/sorties


Le PIC16F84 est quip de 13 lignes dentres/sorties rparties en deux ports :
-le port A : RA0 RA4
-le port B : RB0 RB7
Chaque ligne peut tre configure soit en entre, soit en sortie, et ceci indpendamment lune
de lautre. Pour cela on utilise les registres TRISA et TRISB . Le bit de poids faible ( b0 ) du
registre TRISA correspond la ligne RA0, le bit b1 de TRISA correspond RA1 et ainsi de
suite. Il en est de mme pour le port B et le registre TRISB ( b0 de TRISB correspond RB0
b7 correspond RB7 ). Si lon veut placer une ligne en sortie il suffit de mettre le bit
correspond dans TRISA ou TRISB 0 (retenez 0 comme Output=sortie ) . Si lon veut placer
une ligne en entre, il suffit de placer le bit correspondant dans TRISA ou TRISB 1 (retenez
1 comme Input=entre ) .
Les bits des deux registres PORTA et PORTB permettent soit de lire ltat dune ligne si celle-
ci est en entre, soit de dfinir le niveau logique dune ligne si celle-ci est en sortie.
Lors dun RESET, toutes les lignes sont configures en entres.
particularit du portA : les bits b7 b5 des registres TRISA et PORTA ne
correspondent rien car il ny a que 5 lignes ( b0 b4 ) . RA4 est une ligne
collecteur ouvert, cela veut dire que configure en sortie cette broche assure 0Volt
ltat bas, mais qu ltat haut, il est ncessaire de fixer la valeur de la tension grce
une rsistance de tirage (pull up en anglais)
particularit du portB :il est possible de connecter de faon interne sur chaque ligne
une rsistance de tirage ( pull up ) dont le rle consiste fixer la tension de la patte
(configur en entre ) un niveau haut lorsque quaucun signal nest appliqu sur la
patte en question. Pour connecter ces rsistances, il suffit de placer le bit RBPU/ du
registre OPTION 0 .

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 TMR0 peut remplir deux fonctions:


-Temporisateur ou contrle du temps. Son entre d'incrmentation est alors
l'horloge qui correspond au cycle instruction ( Fosc/4). Il est possible d'utiliser
un pr-diviseur de frquence que nous verrons plus loin.
-Compteur d'vnements. Dans ce cas les d'impulsions d'entres du timer sont
fournies par la patte RA4/TOCK1
le choix s'effectue grce au bit RTS du registre OPTION.

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

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

Page15/28
PISAK S. Le pic16F84

u=unchanged ; x=unknown ; -=unimplemented ( read as 0 ) ; q=value depends on condition

figure 15

Il ne nous reste plus qu voir le jeu dinstruction de programmation en assembleur du PIC et


cest l que rside tout lintrt puisquil ne dispose que de 35 instructions qui lui permettent
de raliser toutes les tches.

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.

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 :

ADDLW ( Add Literal to W )


syntaxe : ADDLW k

Opration : W+kW

Bits dtat du registre STATUS affects : C,DC,Z

on ajoute au registre de travail la valeur k et on place le rsultat dans le registre de travail W

dure : 1 cycle instruction ( 4 cycles dhorloge )

Page17/28
PISAK S. Le pic16F84
ADDWF (Add W to F )
syntaxe : ADDWF f,d

Opration : W+ff si d=1 ou W+fW si d=0

Bits dtat du registre STATUS affects : C,DC,Z

on ajoute le contenu de W et le contenu de f et on place le rsultat dans f si d=1 ou dans W si


d=0

dure : 1 cycle instruction ( 4 cycles dhorloge )

ANDLW ( And Literal and W )


syntaxe : ANDLW k

Opration : W ET kW

Bit dtat du registre STATUS affect : Z

on effectue un ET logique entre le contenu de W et le littral k , on place le rsultat dans W

dure : 1 cycle instruction ( 4 cycles dhorloge )

ANDWF ( And W with F )


syntaxe : ANDWF f,d

Opration : W ET ff si d=1 ou W ET fW si d=0

Bit dtat du registre STATUS affect :Z

on effectue un ET logique entre le contenu de W et le contenu de f , on place le rsultat dans


W si d=0 ou dans f si d=1

dure : 1 cycle instruction ( 4 cycles dhorloge )

BCF ( Bit Clear F )


syntaxe : BCF f,b

Opration : 0b(f)

Bits dtat du registre STATUS affects :aucuns

on met 0 le bit b du registre f

dure : 1 cycle instruction ( 4 cycles dhorloge )

Page18/28
PISAK S. Le pic16F84
BSF ( Bit Set F )
syntaxe : BSF f,b

Opration : 1b(f)

Bits dtat du registre STATUS affects :aucuns

on met 1 le bit b du registre f

dure : 1 cycle instruction ( 4 cycles dhorloge )

BTFSC ( Bit Test , Skip if Clear )


syntaxe : BTFSC f,b

Opration : saut de linstruction qui suit si b(f)=0

Bits dtat du registre STATUS affects :aucuns

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.

dure : 1 cycle instruction ( 4 cycles dhorloge ) ou 2 cycles

BTFSS ( Bit Test , Skip if Set )


syntaxe : BTFSS f,b

Opration : saut de linstruction qui suit si b(f)=1

Bits dtat du registre STATUS affects :aucuns

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.

dure : 1 cycle instruction ( 4 cycles dhorloge ) ou 2 cycles

CALL (subroutine Call)


syntaxe : CALL label

Bits dtat du registre STATUS affects :aucuns

On sauvegarde ladresse de retour dans la pile puis on appelle le sous programme dfinit avec
ltiquette label

dure : 2 cycles instruction ( 8 cycles dhorloge )

Page19/28
PISAK S. Le pic16F84

CLRF ( Clear F )
syntaxe : CLRF f

Opration : 0F

Bit dtat du registre STATUS affect :Z

On met le contenu du registre f 0 et on positionne Z

dure : 1 cycle instruction ( 4 cycles dhorloge )

CLRW ( Clear W )
syntaxe : CLRW

Opration : 0W

Bit dtat du registre STATUS affect :Z

On met le contenu du registre W 0 et on positionne Z

dure : 1 cycle instruction ( 4 cycles dhorloge )

CLRWDT ( Clear WatchDog Timer )


syntaxe : CLRWDT

Opration : 0WDT et 0pr diviseur du Timer

On met le contenu du registre du timer chien de garde 0 ainsi que le pr diviseur

dure : 1 cycle instruction ( 4 cycles dhorloge )

COMF ( Complement F )
syntaxe : COMF f,d

opration : /ff si d=1 ou /fW si d=0

Bit dtat du registre STATUS affect :Z

On complmente le contenu du registre f bit bit , le rsultat est plac dans f si d=1 , dans W
si d=0 .

dure : 1 cycle instruction ( 4 cycles dhorloge )

Page20/28
PISAK S. Le pic16F84

DECF ( Decrement F )
syntaxe : DECF f,d

opration : f-1f si d=1 ou f-1W si d=0

Bit dtat du registre STATUS affect :Z

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 ).

dure : 1 cycle instruction ( 4 cycles dhorloge )

DECFSZ ( Decrement F ,Skip if Zero )


syntaxe : DECFSZ f,d

opration : f-1f si d=1 ou f-1W si d=0 et saut si f-1=0

Bit dtat du registre STATUS affect :aucun

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.

dure : 1 cycle instruction ( 4 cycles dhorloge ) ou 2 cycles

GOTO ( branchement inconditionnel )


syntaxe : GOTO label

Bit dtat du registre STATUS affect :aucun

On effectue un saut dans le programme pour aller ladresse point par le label prcis dans
GOTO

Dure : 2 cycles ( 8 cycles dhorloge )

INCF (Increment F)
syntaxe : INCF f,d

opration : f+1f si d=1 ou f+1W si d=0

Bit dtat du registre STATUS affect :Z

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 ).

dure : 1 cycle instruction ( 4 cycles dhorloge )

Page21/28
PISAK S. Le pic16F84
INCFSZ ( Increment F , Skip if Zero )
syntaxe : INCFSZ f,d

opration : f+1f si d=1 ou f+1W si d=0 et saut si f-1=0

Bit dtat du registre STATUS affect :aucun

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.

dure : 1 cycle instruction ( 4 cycles dhorloge ) ou 2 cycles

IORLW ( Inclusive Or Literal with W )


syntaxe: IORLW k

opration: W OU k W

Bit dtat du registre STATUS affect :Z

On effectue un OU logique entre le contenu de W et le littral k , le rsultat est plac dans W .

dure : 1 cycle instruction ( 4 cycles dhorloge )

IORWF ( Inclusive Or W with F )


syntaxe : IORWF f,d

opration : W OU ff si d=1 ou W OU fW si d=0

Bit dtat du registre STATUS affect :Z

On effectue un OU entre le contenu de W et le contenu de f , on place le rsultat dans f si d=1,


dans W si d=0

dure : 1 cycle instruction ( 4 cycles dhorloge )

MOVF ( Move F )
syntaxe : MOVF f,d

opration : ff si d=1 ou fW si d=0

Bit dtat du registre STATUS affect :Z

On dplace le contenu de f dans f si d=1 ou de f dans W si d=0. Attention, le dplacement de f


dans f semble priori inutile, mais il permet en fait de tester le contenu de f par rapport 0 et
de positionner le bit Z

dure : 1 cycle instruction ( 4 cycles dhorloge )

Page22/28
PISAK S. Le pic16F84

MOVLW ( Move Literal to W )


syntaxe : MOVLW k

opration : kW

Bit dtat du registre STATUS affect :aucun

On charge le contenu de W avec le littral k

dure : 1 cycle instruction ( 4 cycles dhorloge )

MOVWF ( Move W to F )
syntaxe : MOVWF f

opration : Wf

Bit dtat du registre STATUS affect :aucun

On charge le contenu de f avec le contenu de W

dure : 1 cycle instruction ( 4 cycles dhorloge )

NOP ( No Operation )
syntaxe: NOP

opration: nant

Bit dtat du registre STATUS affect :aucun

On ne fait que consommer du temps machine ( un cycle dans ce cas )

dure : 1 cycle instruction ( 4 cycles dhorloge )

RETFIE ( Return From Interrupt )


syntaxe : RETFIE

opration : Pile PC

Bit dtat du registre STATUS affect :aucun

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.

dure : 2 cycles instruction ( 8 cycles dhorloge )

Page23/28
PISAK S. Le pic16F84
RETLW ( Return Literal to W )
syntaxe : RETLW k

opration : kW , PilePC

Bit dtat du registre STATUS affect :aucun

On charge le contenu de W avec le littral k puis on charge le compteur ordinal PC avec la


valeur qui se trouve au sommet de la pile effectuent ainsi un retour de sous programme .

dure : 2 cycles instruction ( 8 cycles dhorloge )

RETURN ( Return from subroutine )


syntaxe : RETURN

opration : PilePC

Bit dtat du registre STATUS affect :aucun

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 .

dure : 2 cycles instruction ( 8 cycles dhorloge )

RLF ( Rotate Left F through carry )


syntaxe : RLF f,d

opration : 7 6 5 4 3 2 1 0
C

Registre f

Bit dtat du registre STATUS affect :C

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

dure : 1 cycle instruction ( 4 cycles dhorloge )

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

Bit dtat du registre STATUS affect :C

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

dure : 1 cycle instruction ( 4 cycles dhorloge )

SLEEP ( Sleep )
syntaxe : SLEEP

opration : 0PD, 1T0, 0WDT , 0 pr diviseur

On place le circuit en mode sommeil avec arrt de loscillateur. Cette commande est utiliser
avec prcaution, elle ncessite la connaissance du mode sommeil.

SUBLW ( Substract W from Literal )


syntaxe : SUBLW k

opration : k-WW

Bits dtat du registre STATUS affects :C,DC,Z

On soustrait le contenu du registre W du littral k et on place le rsultat dans W ( soustraction


par la mthode du complment 2 ).

dure : 1 cycle instruction ( 4 cycles dhorloge )

SUBWF ( Substract W from F )


syntaxe : SUBWF f,d

opration : f-WW si d=0 ou f-Wf si d=1

Bits dtat du registre STATUS affects :C,DC,Z

On soustrait le contenu du registre W du contenu du registre f et on place le rsultat dans W si


d=0, ou dans f si d=1 ( soustraction par la mthode du complment 2 ).

dure : 1 cycle instruction ( 4 cycles dhorloge )

Page25/28
PISAK S. Le pic16F84
SWAPF ( Swap F )
syntaxe : SWAPF f,d

opration : f(0-3)f(4-7) et f(4-7)f(0-3) rsultat dans W ou f selon d

Bit dtat du registre STATUS affect :aucun

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

dure : 1 cycle instruction ( 4 cycles dhorloge )

XORLW ( Exclusive Or Literal with W )


syntaxe : XORLW k

opration : W OU EXCLUSIF kW

Bit dtat du registre STATUS affect :Z

On effectue un OU Exclusif entre W et le littral k, le rsultat est plac dans W

dure : 1 cycle instruction ( 4 cycles dhorloge )

XORWF ( Exclusive Or W with F)


syntaxe : XORWF f,d

opration : W OU EXCLUSIF fW si d=0 ou W OU EXCLUSIF ff si d=1

Bit dtat du registre STATUS affect :Z

On effectue un OU Exclusif entre W et le contenu de f , le rsultat est plac dans W si d=0,


sinon il est plac dans f .

dure : 1 cycle instruction ( 4 cycles dhorloge )

Page26/28
PISAK S. Le pic16F84

JEU D'INSTRUCTION

Page27/28
PISAK S. Le pic16F84

V Petite application (destine aux professeurs)


Afin de mettre en pratique des notions encore toutes fraches, il peut tre intressant de
clturer ce cours par une sance de travaux dirigs. Commenons par le commencement avec
un petit exemple qui n'a d'autre intrt que d'apprhender de faon simple un premier
programme crit en assembleur.
Voici donc un exemple de programme dont la seule fonction et de recopier sur la patte
RA0 (donc programme en sortie) l'tat de la patte RB0 ( donc programme en
entre). Sur ce petit exemple, on peut alors aborder les notions d'algorithme et de
structure de programmation avec les instructions spcifique aux logiciels de
compilation (org, equ, end , les tiquettes, etc).

;dfinition des diffrentes tiquettes Algorithme du programme


;pour une structure de programme plus claire
;equ n'est pas une instruction PIC mais sert
;au compilateur dbut
status equ h'0003' ;adresse du registre (page 0)
porta equ h'0005' ;adresse porta (page0)
portb equ h'0006' ;adresse port b (page 0) initialisation de RA0 en sortie
trisa equ h'0085' ;adresse trisa (page 1)
trisb equ h'0086' ;adresse trisb (page 1)
RA0 equ h'0000' ;rang du bit RA0 dans porta initialisation du portB en entre
RB0 equ h'0000' ;rang du bit RB0 dans portb
RP0 equ h'0005' ;rang du bit RP0 dans status

;dbut du programme indiqu par l'instruction


;org qui est ncessaire au compilateur RB0=0? non
org 0000 ;dbut du programme
;ncessairement l'adresse
;0000 pour tous les PICs
oui
;initialisation de RA0 en sortie
bsf status,RP0 ;passage en page 1 de RA0=0 RA0=1
;la mmoire de donnes
bcf trisa,RA0 ;mise 0 de RA0 (sortie)
;initialisation de RB0 en entre
bsf trisb,RB0 ;mise 1 de RB0 (entre)
,mais inutile en pratique
;car ralis aprs un RESET
;programme principal
;test de RB0 et recopie en RA0
bouc bcf status,RP0 ;retour en page 0
btfss portb,RB0 ;test RB0 saute l'instruction si RB0=1
goto eteind ;va l'tiquette eteint
goto allum ;va l'tiquette allum

;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

You might also like