Вы находитесь на странице: 1из 23

ETUDE DU MICROCONTROLEUR 16F84

Le microcontrleur
PIC 16F84

OUATTARA ALI

ETUDE DU MICROCONTROLEUR 16F84

I- PRESENTATION GENERALE DU PIC 16F84


I.1- Brochage du PIC 16F84
Ce modle de PIC (Programmable Interface Controller) est un circuit de petite taille, fabriqu par la Socit amricaine MICROCHIP
Technology.
En le regardant pour la premire fois, il fait davantage penser un banal circuit intgr logique TTL ou MOS, plutt qu un
microcontrleur. Son botier est un DIL (Dual In Line) de 2x9 pattes.
En dpit de sa petite taille, il est caractris par une architecture interne qui lui confre souplesse et vitesse incomparables.
Ses principales caractristiques sont :
13 lignes dentres/sorties, rparties en un port de 5 lignes (Port A) et un port de 8 lignes (Port B)
alimentation sous 5 Volts
architecture interne rvolutionnaire lui confrant une extraordinaire rapidit
une mmoire de programme pouvant contenir 1019 instructions de 14 bits chacune (allant de ladresse 005 ladresse 3FF)
une mmoire RAM utilisateur de 68 octets (de ladresse 0C ladresse 4F)
une mmoire RAM de 2x12 emplacements rserve aux registres spciaux
une mmoire EEPROM de 64 emplacements
une horloge interne, avec pr-diviseur et chien de garde
possibilit dtre programm in-circuit, cest dire sans quil soit ncessaire de le retirer du support de lapplication
vecteur de Reset situ ladresse 000
un vecteur dinterruption, situ ladresse 004
bus dadresses de 13 lignes
prsence dun code de protection permettant den empcher la duplication
facilit de programmation
simplicit
faible prix
(C vu de dessus)

(Structure interne)

OUATTARA ALI

ETUDE DU MICROCONTROLEUR 16F84

I.2- Alimentation et cadencement


Indpendamment de ce quon veut faire de ses 13 lignes dentre/sortie et quelle que soit lapplication laquelle on le destine, un
microcontrleur PIC 16F84, pour pouvoir fonctionner, a ncessairement besoin de :
une alimentation de 5 Volts ;
un quartz et deux condensateurs (si un pilotage prcis par base de temps quartz est ncessaire), ou une rsistance et un
condensateur (pour une base de temps de type RC, utilisable dans les cas ne demandant pas une extrme prcision de
cadencement). Toutefois en cas de ncessit le pilotage peut se faire par un oscillateur extrieur.
un condensateur de dcouplage (pour rduire les transitoires se formant invitablement dans tout systme impulsionnel).
un bouton poussoir et une rsistance, pour la mise en place dune commande de Reset.
Ces lments doivent ncessairement figurer dans tout montage microcontrleur PIC 16F84.
Les applications typiques sont les suivantes :
Pilotage par quartz

Pilotage par oscillateur RC

Pilotage par oscillateur extrieur

I.3- Les Entres/Sorties


A part les cinq broches rserves au circuit doscillation, les treize autres broches du 16F84 servent dentres/sorties et sont
regroupes en deux ports : Port A et Port B
Le Port A possde 5 lignes :

Le Port B possde 8 lignes :

RA0..........pin 17
RA1..........pin 18
RA2..........pin 1
RA3..........pin 2
RA4..........pin 3 (RA4/T0CKI)
(NB : RA = Register A)

RB0..........pin 6 (RB0/INT)
RB1..........pin 7
RB2..........pin 8
RB3..........pin 9
RB4..........pin 10
RB5..........pin 11
RB6..........pin 12
RB7..........pin 13
(NB: RB = Register B)

A remarquer que RB0 (pin 6) et RA4 (pin 3), outre qu pouvoir servir dentres/sorties, selon la faon dont on les programme peuvent
respectivement servir lune comme entre dinterruption et lautre comme entre dhorloge externe pour le pilotage du timer (TMR0).

I.4- Organisation de la mmoire du PIC 16F84

Organisation interne structure du PIC 16F64

OUATTARA ALI

ETUDE DU MICROCONTROLEUR 16F84


La mmoire du PIC 16F84 est divise en trois parties distinctes :
Une mmoire de programme,
Une mmoire de donnes (Data Memory),
Une mmoire RAM rserve aux donnes et aux variables.

a-

La mmoire de programme

La mmoire de programme est de type EEPROM flash, de 1K mots de 14 bits. Elle va de ladresse 000 ladresse 3FF selon le plan
suivant :
000 Vecteur de Reset
001
002
003
004 Vecteur dInterruption

5 adresses rserves au C (adresses quil est conseill de sauter)

005 Dbut du programme utilisateur

1019 adresses restantes, (disponibles, pour y loger les instructions du


programme)
3FF Fin de lespace mmoire disponible

Cette mmoire est celle dans laquelle le programmeur crit les instructions du programme sachant que les cinq premires adresses (000,
001, 002, 003 et 004) sont rserves au microcontrleur. Deux dentre ces cinq adresses sont particulirement remarquables :
- ladresse 000 :
Elle correspond au vecteur de Reset. A la mise sous tension, ou chaque fois que des instructions spcifiques lobligent, le Program
Counter (PC) se rend cette adresse et cest l que le systme trouve la premire instruction excuter.
Cest une case devant obligatoirement tre remplie et contenir lorigine du programme (ORG).
Si cette adresse tait vide, le microcontrleur ne ferait rien, car aucun programme ne serait excut.
- ladresse 004 :
Elle correspond au vecteur dinterruption.

b-

La mmoire de donnes

La mmoire de donnes (Data Memory) est du type EEPROM flash, de 64 octets, allant de ladresse 00 ladresse 3F, auxquels on
accde uniquement par lintermdiaire de quatre registres spciaux :
- EEADR (EEprom ADRess) pour ce qui concerne les adresses
- EEDATA (EEprom DATA) pour ce qui concerne les donnes
- EECON1 (EEprom CONtrol1)
permettant de dfinir le mode de fonctionnement de cette mmoire (lecture ou criture)
- EECON2 (EEprom CONtrol2)
b1- Procdure de lecture dans la mmoire de donnes
Ecriture ladresse relative dans EEADR
Mettre le bit RD (Read Data) de EECON1 1 (ce qui provoque le transfert de la donne dans le registre EEDATA)
Lire le contenu du registre EEDATA
b2- Procdure d'criture dans la mmoire de donnes
- L'criture dans L'EEPROM doit tre autorise : bit WREN = 1
- Placer ladresse relative dans EEADR
- Placer la donne crire dans EEDATA
- Placer 55H dans EECON2
- Placer AAH dans EECON2
- Dmarrer l'criture en positionnant le bit WR
- Attendre la fin de l'criture, (10 ms) (EEIF=1 ou WR=0)
- Recommencer au point 2 si on a d'autres donnes crire
EECON1

DR-0C

DR-0C

DR-0C

EEIF

WRERR

WREN

DWRC

RRDC

(Registre 8 bits dont 5 seulement sont utiliss)

EECON2 nen est pas vritablement un Registre. Microchip lutilise en tant que registre de commande. Lcriture de valeurs spcifiques dans
EECON2 provoque lexcution dune commande spcifique dans llectronique interne du PIC.

c-

La mmoire RAM

La mmoire RAM est constitue de deux zones :


-

une zone RAM de 24 octets forme de registres spciaux (Special Function Register : SFR).
Les registres SFR sont les registres de fonctionnement du PIC (pour configurer tous les modules internes : les PORTS, le TIMER,
la gestion des interruptions, etc...). L'ensemble de ces registres est appel fichier des registres (Register File).

une zone RAM de donnes, constitue de 68 octets appels registres gnraux (General Propose Register : GPR).
Les registres GPR sont des positions mmoire que l'utilisateur peut utiliser pour stocker ses variables et ses donnes.

NB : On remarquera donc que, indpendamment de leur nature, les positions de la RAM sont toujours appel registres.

OUATTARA ALI

ETUDE DU MICROCONTROLEUR 16F84

La mmoire RAM est organise en deux banks (pages).


En effet, sur les 24 octets des registres spciaux, 12 sont situs en page 0 (allant de ladresse 00 0B) et 12 en page 1 (allant de ladresse
80 8B).
Pour accder un de ces registres, il faut d'abord se placer dans le bank o il se trouve. Ceci est ralis en positionnant le bit RP0 du
registre STATUS (RP0 = 0 Bank 0, RP0 = 1 Bank 1).
7

DIRPC

DRP1C

DRP0C

DTOC

DPDC

ZZZZ

DDCC

CCC

(Le registre STATUT)

Pour la mmoire utilisateur (registres gnraux), l'utilisation des pages n'est pas ncessaire puisque le Bank1 est "mappe" avec le Bank 0.
Cela signifie qu'crire une donne l'adresse 0C ou l'adresse 8C revient au mme. Ainsi les 68 octets de la mmoire utilisateur situe
juste en dessous des registres spciaux vont de 0C 4F.
Lorganisation de la mmoire RAM est faite selon la mappe suivante :

Special Function Register


(SFR)

General Propose Register


(GPR)

Mapped in bank 0

Remarque :
Il existe par ailleurs une toute petite mmoire EEPROM, contenant seulement 8 emplacements 14 bits, de ladresse 2000 ladresse
2007, rserves au microcontrleur. Cette mmoire se programme surtout pour configurer le microcontrleur pendant la phase dimplantation
dun programme dans la mmoire de programme.
Particulirement parmi ces emplacements :
-

Les adresses 2000, 2001, 2002 et 2003 correspondent aux emplacements dans lesquels lutilisateur peut stocker un code
didentification (en nutilisant que les quatre bits de poids faible de chacun de ces quatre mots 14 bits).

Ladresse 2007 correspond au registre de configuration du microcontrleur. Seulement les cinq premiers bits de ce mot de 14
bits sont utilisables :
4

CPPP

PWRTE

WDTE

FOSC1

FOSC0

o Les bit 0 : FOSC0 (OSCillateur zro) et bit 1 : FOSC1 (OSCillateur un) sont programmer en fonction du type
doscillateur utilis, conformment aux spcifications du tableau suivant :
FOSC1
0
0
1
1

FOSC0
0
1
0
1

Type doscillateur
LP
XT
HS
RC

Caractristiques
(Low Power), faible consommation, jusqu 200 KHz
Quartz jusqu 4 MHz (mode le plus utilis)
(High Speed), quartz haute frquence, jusqu 10 MHz
Oscillateur RC, jusqu 4 MHz

o Le bit 2 : WDTE (Watch-Dog Timer Enable)


1 = chien de garde activ (autorise le chien de garde)
0 = chien de garde inhib (nautorise pas le chien de garde)
o Le bit 3 : PWRTE (PoWeR Timer Enable)
Le C possde un timer permettant de retarder de 72 ms le lancement du programme aprs la mise sous tension du
circuit.
1 = temporisation activ (le C attend 72 ms)
0 = temporisation inhib (le C dmarre ds la mise sous tension)
o Le bit 4 : CP (Code Protection)
1 = pas de protection (le C pourra tre lu correctement)
0 = protection activ (le C ne pourra plus tre lu correctement. Le contenu de la mmoire sera dsorganis).

OUATTARA ALI

ETUDE DU MICROCONTROLEUR 16F84

I.5- Etudes des registres spciaux (Special Function Register : SFR)


Dans lespace mmoire RAM que Microchip appelle Register File, une zone est rserve aux registres spciaux.
Certains de ces registres sont situs en Page 0 entre les adresses 00 et 0B, et dautres sont situs en Page 1 entre les adresses 80 et
8B. Quelques-uns dentre eux figurent mme dans les deux pages (Page 0 et Page 1) pour en faciliter laccs.
Ils ont des noms et des usages spcifiques, et servent commander le microcontrleur.
Il y en a 16 en tout, et sont si importants quils conditionnent vritablement la programmation. Ils sont utiliss constamment, et
constamment tenus prsents dans la tte du programmeur.
a-

EEADR (EEprom ADRess)

Registre de 8 b it s dans lequel on crit ladresse de la mmoire de donnes EEPROM (mmoire flash de 64 octets, allant de ladresse
00 ladresse 4F) laquelle on veut accder pour y lire ou pour y crire.
Contrairement lEEPROM de programme qui - en plus de la tension dalimentation du microcontrleur - ncessite une tension
externe pour la programmation, cette EEPROM fonctionne avec la seule tension dalimentation, dans toute sa plage.
b-

EECON1 (EEprom CONtrol 1)

C'est un registre de contrle qui permet d'excuter une lecture ou une criture dans l'EEPROM (mmoire flash de 64 octets, allant de
ladresse 00 ladresse 4F).
Seuls les 5 bits de poids faible sont utiliss.
7

GIE

EEIE

TOIE

EEIF

WRERR

WREN

WR

RD

(Le registre EECON1)

Description des bits du registre EECON1

N de
bit

Nom du bit

RD (ReaD)

Il est normalement 0. Il naccepte pas dtre programm zro. Lorsque ce bit est mis
"1", il indique au microcontrleur que l'on souhaite une lecture de l'EEPROM.
Apres le cycle de lecture, il est mis automatiquement 0.

WR (WRite)

Il est normalement 0. Il naccepte pas dtre programm zro. Lorsque ce bit est mis
"1", il indique au microcontrleur que l'on souhaite une criture de l'EEPROM.
Apres le cycle de lecture, il est mis automatiquement 0.

WREN (WRite ENable)

C'est un bit de confirmation d'criture dans l'EEPROM. En effet, il ne suffit pas de dfinir
un cycle d'criture uniquement avec le bit WR. Il faut imprativement valider le bit
WREN (WREN=1) pour autoriser une criture en mmoire. Mis zro, il interdit toute
criture en mmoire.

WRERR (WRite ERRor)


3

c-

Fonction

Flag derreur

EEIF (EEprom Interrupt Flag)


Flag dinterruption

Normalement zro il passe 1 (WRERR=1) pour signaler quune erreur sest produite
juste au moment o une criture tait en cours (Celle-ci na pu aboutir parce quun
vnement inopin sest produit ; par exemple un Reset).
WRERR=0 le cycle d'criture c'est droul normalement.
Il est automatiquement mis 1 lorsque la programmation de lEEPROM de donnes est
termine. Doit tre mis zro par programmation.
EEIF=1 l'opration s'est droule correctement.
EEIF=0 soit l'opration n'a pas commenc, soit n'est pas termine.

EECON2 (EEprom CONtrol 2)

Ce registre est exclusivement utilis pour les squences d'critures dans l'EEPROM. Il n'a pas d'adresse physique et la lecture de ce registre
retourne une valeur nulle.
d-

EEDATA (EEprom DATA)

Pendant une opration de lecture : registre dans lequel est disponible la donne quon est all chercher une certaine adresse
de la mmoire EEPROM.

Pendant une opration dcriture : registre dans lequel on place la donne quon veut crire dans la mmoire EEPROM.

e-

FSR (File Select Register)

Ce registre sert slectionner la mmoire de donnes, pour pouvoir y accder.


f-

INDF (INDirect File)

Utilise le contenu de FSR pour l'accs indirect la mmoire.


En effet, le registre INDF ainsi que FSR permettent l'adressage INDIRECT.
Le principe est d'utiliser deux registres intermdiaires pour accder aux donnes :
Dans le premier, appel FSR, on inscrit l'adresse (en fait, il est utilis comme un pointeur).
L'autre registre (INDF), contient la valeur qui se trouve l'adresse dfinie dans le FSR.
Il faut toutefois reconnatre que le registre INDF nest pas un registre physique. On peut le voir comme un autre nom de FSR, utilis pour
accder la donne elle-mme ; FSR servant choisir l'adresse.

OUATTARA ALI

ETUDE DU MICROCONTROLEUR 16F84


Exemple :
Movlw 0x1A
; Charge 1Ah dans W
Movwf FSR
; Charge W, contenant 1Ah, dans FSR
Movf
INDF,0 ; Charge la valeur contenue l'adresse 1Ah dans W
g-

INTCON (INTerrupt CONtrol)

Le registre INTCON contient tous les bits de validation de chaque source d'interruption ainsi que leur drapeau (Flag).
Les drapeaux doivent tre mis 0 aprs l'interruption.
Dans le 16F84 il y a quatre sources possibles dinterruptions. Chaque fois que lune delles surgit, le microcontrleur (aprs avoir not
dans la pile ladresse de retour) abandonne momentanment (interrompt) le programme quil avait en cours dexcution et saute
ladresse 004 (adresse prdfinie par le fabricant).
En lisant le contenu de ce registre, on peut dterminer la provenance de la demande dinterruption et aiguiller le programme de manire
y rpondre de faon adquate.
Les quatre sources dinterruption possibles sont :
-

la fin dune programmation de lEEPROM de donnes ;

le dbordement du timer interne ;

une commande externe applique sur la pin 6 (RB0/INT) ;

un changement dtat sur lune des pins 10, 11, 12 ou 13 (respectivement RB4, RB5, RB6, RB7).
Dans ce cas, seule une configuration des lignes en entre peut donner lieu une ventuelle demande dinterruption.
7

GIE

EEIE

TOIE

INTE

RBIE

TOIF

INTF

RBIF

(Le registre INTCON)

Description des bits du registre INTCON

N de
bit

Nom du bit

Fonction

C'est un drapeau d'interruption qui indique un changement d'tat du PORT B (RB4


RB7) dans la mesure, videmment, o les lignes de ce port sont configures en entre.
RBIF (Register B Interrupt Flag)
RBIF=1 une broche (RB4 RB7) a chang d'tat.
RBIF=0 pas de changement d'tat.

INTF (INTerrupt Flag)

Drapeau d'interruption de l'entre RB0.


RBIF=1 une interruption est apparue.
RBIF=0 pas d'interruption.

TOIF (Timer zero Overflow


Interrupt Flag)

Ce drapeau indique un dpassement du registre TMR0 (passage de FF 00).


TOIF=1 dpassement de TMR0.
TOIF=0 pas de dpassement.

RBIE (Register B Interrupt


Enable)

Bit de validation qui autorise une interruption lors d'un changement d'tat du PORT B
(RB4 RB7).
RBIE=1 Autorise l'interruption.
RBIE=0 Les changement d'tat du PORT B (RB4 RB7) ne gnreront pas
d'interruption.

INTE ( INTerrupt Enable)

Valide ou non l'interruption gnr par la broche RB0/INT


INTE=1 il autorise les demandes dinterruption provenant de lextrieur,
appliques sur la pin 6 (RB0 /INT).
INTE=0 Pas d'interruption provenant de INT.

TOIE (Timer zero Overflow


Interrupt Enable)

Autorise ou non l'interruption provoqu par le dpassement du registre TMR0 (passage


de FF 00)
TOIE=1 Valide l'interruption.
TOIE=0 Pas d'interruption provenant du registre TMR0.

Ce bit autorise ou non une interruption lorsqu'un cycle d'criture dans L'EEPROM c'est
droul normalement.
EEIE=1 Gnre une interruption lorsqu'un cycle d'criture c'est droul
EEIE (EEprom Interrupt Enable)
normalement.
EEIE=0 Pas d'interruption.

GIE (Global Interrupt Enable)

Ce bit autorise ou non toutes les interruptions.


GIE=1 Toutes les interruptions sont prises en compte par le microcontrleur.
GIE=0 Aucune interruption ne sera valide.

OUATTARA ALI

ETUDE DU MICROCONTROLEUR 16F84


h-

OPTION

Est le registre qui prside au fonctionnement de lhorloge interne du microcontrleur (TMR0) :


7

RBPU

INTEDG

T0CS

T0SE

PSA

PS2

PS1

PS0

(Le registre OPTION)

Description des bits du registre OPTION

N de
bit
7

Nom du bit
RBPU (Register B Pull Up)

INTEDG (INTerrupt EDGe)

Fonction
Mis zro (actif ltat bas) valide les rsistances de pull-up prsentes, lintrieur du
botier, sur les lignes du port B.
Dtermine le front du signal dhorloge sur lequel on veut que soit prise en compte une
demande dinterruption provenant de lextrieur (commande applique sur la pin 6 :
RB0/INT). Car on peut faire agir une telle demande soit lapparition dun front montant
(passage de zro 1), soit lapparition dun front descendant (passage de 1 zro).
INTEDG = 1 interruption programme pour se dclencher sur un front montant ()
INTEDG = 0 interruption programme pour se dclencher sur un front descendant ()

T0CS (Timer zero Clock


Source)

T0SE (Timer zero Signal Edge)

PSA (Pre-Scaler Assignment)

Sert choisir la provenance du signal quon souhaite utiliser comme clock


pour piloter lhorloge interne.
Il existe deux choix possibles : soit utiliser lhorloge interne utilisant le quartz pilote du
microcontrleur et fournissant un signal dont la frquence est celle du quartz divise par
4, soit utiliser un signal externe prlev sur la pin RA4 (bit 4 du port A).
T0CS = 0 le timer est pilot par lhorloge interne
T0CS = 1 le timer est pilot par un signal externe.
T0SE = 0

lhorloge avance sur front montant ()

T0SE = 1

lhorloge avance sur front descendant ()

Sert affecter le prdiviseur soit au timer TMR0 soit au Watch-Dog.


PSA = 0 le prdiviseur est affect au timer TMR0
PSA = 1 le prdiviseur est affect au Watch-Dog.
Ces trois bits servent programmer le facteur de division quon veut assigner au
prdiviseur dans le but davoir des signaux plus lents.
A remarquer que le facteur de division nest pas le mme selon que le prdiviseur soit
affect au TMR0 (timer) ou au Watch-Dog (chien de garde) :

2,
1
et

PS2 PS1 PS0


(Pre-Scaler rate)

PS2

PS1

PS0

0
0
0
0
1
1
1
1

0
0
1
1
0
0
1
1

0
1
0
1
0
1
0
1

Facteur de division
Pour le TMR0
Pour le Watch-Dog

2
4
8
16
32
64
128
256

1
2
4
8
16
32
64
128

Pour crire dans ce registre on utilise soit linstruction BSF,bit, soit linstruction BCF,bit.
Reprsentation image du fonctionnement du timer TMR0 et du Watch-Dog (chien de garde) :

i-

PCL (Program Counter Low)

Il sagit du compteur qui fournit au programme la partie basse de ladresse.


Dans les microcontrleurs de Microchip les lignes dadresses sont rparties en deux bytes : le PCL (fourni par ce registre Program
Counter Low), et le PCH (fourni par le registre PCLATH Program Counter LATch High).
Il sagit dun compteur dont la tche est dadresser la mmoire dans laquelle sont loges les instructions du programme.
Lorganisation de ce type de compteur, dans les microcontrleurs PIC, veut que ladresse soit compose de deux parties : la partie
basse (fournie par PCL, sur dix lignes dadresse) et la partie haute (fournie par PCLATH).

OUATTARA ALI

ETUDE DU MICROCONTROLEUR 16F84


j-

PCLATH (Program Counter LATch High)

Ladresse du compteur de programme est obtenue en mettant ensemble la partie basse fournie par PCL (Program Counter Low) et
la partie haute fournie par PCLATH.
Contrairement ce quon pourrait penser, ce registre ne fournit pas un nombre complmentaire fixe de bits, mais un nombre de bits
variable, en fonction des instructions qui sont traites.
k-

PORT A

PORT B

Alors que TRIS A et TRIS B se limitent dfinir le sens de chaque ligne des ports (entre ou
permettent concrtement au microcontrleur de communiquer avec lextrieur.

sortie),

PORT A

et PORT B

Voici des exemples :


1)

Comment crire un 0 sur une ligne de port


(par exemple, sur RA0) :

3) Comment lire ltat logique dune ligne de port.


Cest dire : comment savoir si une ligne est 0 ou 1 :

2) Comment crire un 1 sur une ligne de port


(par exemple, sur RA2) :

4) Comment lire loctet entier dun port configur en


entre :
MOVF PORTA,W

l-

Charge le contenu du port A


dans le registre W

STATUS (Registre dtat)

Les cinq premiers bits de ce registre (bits 0 4) correspondent des flags que le programmeur peut interroger pour obtenir des
informations lui permettant dcrire correctement la suite des instructions de son programme ; tandis que les bits 5, 6 et 7 (RP0,
RP1, RP2), daprs la faon dont on les programme, pourraient slectionner 8 pages de registres internes (chacune de 128 octets).
Comme dans le 16F84 il ny a que deux pages de registres (Page 0 et Page 1), seul le bit 5 (RP0) sert. (Les bits 6 et 7 sont
ignorer purement et simplement).

Bit 0 : C (Carry)
Flag indiquant si une retenue a eu lieu dans un octet lors dune addition ou dune soustraction.
Si une retenue a t gnre, ce bit passe 1.
Bit 1 : DC (Digit Carry)
Flag fonctionnant comme le bit de Carry, sauf quici la surveillance de la retenue sexerce non pas sur loctet entier,
mais sur le premier demi-octet.
Ce flag se positionne 1 si une retenue est gnre du bit 3 (bit de poids fort du quartet infrieur) vers le bit 0 du quartet suprieur.
Il est utile pour corriger le rsultat doprations effectues en code BCD.
Bit 2 : Z (Zero)
Ce flag passe 1 si le rsultat dune opration (arithmtique ou logique) est 0.

OUATTARA ALI

ETUDE DU MICROCONTROLEUR 16F84


Bit 3 : PD (Power Down)
Mise en veilleuse de lalimentation, effectue par linstruction SLEEP.
Passe 1 lorsquon utilise linstruction CLWDT, ou la mise sous tension.
Bit 4 : TO (Time Out) Dpassement de dlai.
Passe 0 si le timer du Watch-Dog (chien de garde) dborde.
Est mis 1 par les instructions CLWDT et SLEEP, ainsi qu la mise sous tension.
Bit 5 : RP0 (Register Page zero)
Sert slectionner lune des deux pages de registres (Page 0 ou Page 1).
RP0 = 0 slectionne la page mmoire 0 (adresses de 00 7F)
RP0 = 1 slectionne la page mmoire 1 (adresses de 80 FF).
Exemples de programmation :

m-

TMR0 (TiMeR zero)

Cest le registre de contrle de lhorloge interne (timer) du microcontrleur.


Ce timer peut soit fonctionner seul, soit tre prcd par un pr- d iviseur programmable 8 bits dont la programmation se fait par
lintermdiaire du registre OPTION.
Ce registre peut tre lu et modifi tout moment, soit pour connatre sa position courante, soit pour le dclencher partir dune valeur
dtermine.
Une quelconque opration dcriture dans ce registre met automatiquement zro le comptage en cours dans le pr-diviseur.
Se rappeler que le timer compte sur 8 bits, et quune fois que le comptage est arriv FF, celui-ci revient 00 (ce qui provoque le
passage 1 du bit 2 du registre INTCON appel TOIF).
En programmation on peut crire :

n-

TRIS A - TRIS B

Ce sont les registres qui dfinissent le sens de chacune des lignes des ports A et B.
Toute ligne mise 1 est programme comme entre, tandis que toute ligne mise 0 est programme comme sortie.
Il ny a aucune instruction permettant dcrire directement dans ces registres : on y accde en transitant par le registre de travail W.
En programmation, on commence donc par charger loctet de configuration dans le registre W, puis on copie celui-ci dans TRIS A ou
TRIS B.
Exemple :

Le bit 0 du port A est dfini comme entre, tandis que les sept autres lignes sont dfinies comme sorties.
Remarque :
Le chien de garde, "WATCHDOG TIMER" (WDT), permet d'assurer, de manire simple, le bon droulement d'un programme. Si le
programme " plante ", le WDT gnre un RESET ou un autre vnement permettant, soit l'utilisateur, soit au logiciel, de ragir en
consquence.
Le WDT du PIC16F84 est compos d'un oscillateur interne rseau RC indpendant et d'un compteur 8bits. La priode de loscillateur
varie en fonction de la temprature et de la tension d'alimentation (de 10ms 60ms dans les cas extrmes).
A chaque cycle dhorloge de loscillateur, le compteur sincrmente de 1. A la fin du comptage, cest dire lorsque le compteur passe de
FF 00, le WDT met le bit TO (Time Out) du registre STATUS 0. Si lon souhaite augmenter le temps du chien de garde, on peut utiliser
le prescaler. Il est important de noter que le prescaler est partag avec le TIMER. Il nest donc pas possible de les utiliser simultanment.
Le WDT est configurable uniquement lors de la programmation du microcontrleur, cest dire dans le "mot de configuration".

OUATTARA ALI

10

ETUDE DU MICROCONTROLEUR 16F84

II- STRUCTURE DUN PROGRAMME


Lcriture dun programme implique llaboration dune vritable structure. Il faut donc agir avec mthode et prcision.
Tout programme doit comporter un titre : une sorte de dfinition succincte de ce que fait le programme.
Ltape suivante consiste mettre ce programme sur papier (listing). Y ajouter des commentaires, ligne par ligne, pour chaque opration
effectue. Ceux-ci seront clairs et abondants. Ils aideront plus tard comprendre les dtails du programme.
Ils doivent tre tels que si vous repreniez votre feuille plusieurs mois aprs, vous devriez facilement savoir vous relire et comprendre.
Dans la mesure du possible, accompagnez-les dun organigramme.
Tout programme se construit selon un modle, une sorte de squelette (template, en anglais).
Voici le squelette dun programme pour PIC 16F84 :

III- PROGRAMMATION EN LANGAGE ASSEMBLEUR


En langage ASSEMBLEUR le PIC 16F84 ne comprend que ses 37 mots (en fait : 35 instructions communes tous les modles de PIC,
plus deux instructions spcifiques au 16F84 : OPTION et TRIS).
Ces 37 mots forment ce que lon appelle le jeu dinstructions du16F84.
La programmation en langage ASSEMBLEUR du PIC 16F84 se fait en utilisant les 37 instructions formant son dictionnaire.
Il convient de toutes les connatre.
Ecrire un programme en langage ASSEMBLEUR revient donc dtailler au PIC ce quil doit faire, en le disant exclusivement au moyen
de ces 37 mots de son vocabulaire : les seuls mots quil est capable de comprendre.

III.1- Le jeu dinstructions du 16F84


Le microcontrleur 16F84 possde un jeu dinstruction de seulement 37 instructions codes sur 14 bits, selon le modle :

Codes en hexadcimal, elles prennent la forme :

XXXX

A remarquer qutant donn que les deux bits de poids fort (bits 12 et 13) ne peuvent prendre que seulement quatre valeurs binaires (00 01 -10 et 11), il en rsulte que la premire valeur de toute instruction code en hexadcimal ne peut dpasser 3.
Autrement dit : eu gard la premire valeur de chaque instruction code en hexadcimal, les seuls formats possibles sont :
0XXX...
1XXX...
2XXX...
3XXX...
avec une tendue comprise entre 0000 et 3FFF.
La plupart des instructions oprent en utilisant le registre de travail W (Working register) comparable laccumulateur des anciens
microprocesseurs, et soit un registre soit une valeur immdiate code sur 8 bits appele literal.
Le rsultat des oprations peut tre envoy soit dans le registre W (accumulateur), soit dans le registre sollicit, soit dans les deux (avec
certaines instructions).
Un petit nombre dinstructions oprent en utilisant uniquement un registre (cest le cas des instructions BCF, BSF, BTFSC, BTFSS, CLRW,
CLRWT et SLEEP).

OUATTARA ALI

11

ETUDE DU MICROCONTROLEUR 16F84

Les 37
-

instructions du 16F84 peuvent tre classes de plusieurs manires ; telles que entre autres :
Classement par ordre alphabtique
Classement par genre
Classement par type

Toutes les instructions sont codes en un seul mot de 14 bits (0 13).


Elles sont toutes excutes en un seul cycle dhorloge , sauf CALL, GOTO, RETFIE, RETLW et RETURN qui demandent 2 cycles, et
BTFSC, BTFSS, DECFSZ, INCFSZ qui selon le cas peuvent demander soit un cycle, soit deux cycles.

III.2- Classement par lettre alphabtique


ADDLW

ADD Literal to W

DECF

DECrement File

RETFIE

RETurn From IntErrupt

ADDWF

ADD W to File

DECFSZ

DECrement File, Skip if Zero

RETLW

RETurn from subroutine with Literal in W

ANDLW

AND Literal and W

RETURN

RETURN from subroutine

ANDWF

AND W and File

RLF

Rotate Left File

RRF

Rotate Right File

GOTO

BCF

Bit Clear File

INCF

INCrement File

BSF

Bit Set File

INCFSZ

INCrement File, Skipe if Zero

SLEEP

BTFSC

Bit Test File, Skip if Clear

IORLW

Inclusive OR Literal with W

SUBLW

SUBtract Literal with W

BTFSS

Bit Test File, Skip if Set

IORWF

Inclusive OR W with File

SUBWF

SUBtract W from File

SWAPF

SWAP File

TRIS

TRIState port

XORLW

eXclusive OR Literal and W

XORWF

eXclusive OR W and File

CALL

CALL subroutine

MOVF

MOVe File

CLRF

CLeaR File

MOVLW

MOVe Literal to W

CLRW

CleaR W

MOVWF

MOVe W to File

CLRWDT

CLeaR Watch Dog Timer

COMF

COMplement File

NOP

No OPeration

OPTION

load OPTION register

III.3- Classement par genre


Instructions arithmtiques

Instructions de mouvement

Instructions de saut et de branchement

ADDLW
ADDWF
SUBLW
SUBWF

MOVF
MOVLW
MOVWF

CALL
GOTO
RETFIE
RETLW
RETURN

Instructions dincrmentation

Instructions de rotation

Instructions agissant sur les bits

DECF
DECFSZ
INCF
INCFSZ

RLF
RRF

BCF
BSF
BTFSC
BTFSS

Instructions deffacement

Instructions logiques

Instructions diverses

CLRF
CLRW
CLRWDT

ADDLW
ADDWF
COMF
IORLW
IORWF
XORLW
XORWF

NOP
OPTION
SLEEP
SWAPF
TRIS

OUATTARA ALI

12

ETUDE DU MICROCONTROLEUR 16F84


III.4- Classement par type
Instructions travaillant seuls
CLRW
CLRWDT
NOP
OPTION
RETFIE
RETURN
SLEEP

Instructions travaillant avec une constante ou une tiquette (k)


ADDLW k
ANDLW k
CALL k
GOTO k
IORLW k
MOVLW k
RETLW k
SUBLW k
XORLW k

Instructions travaillant avec un registre (f)


CLRF f
MOVWF f
TRIS f
Instructions travaillant avec une position de bit (b) dun octet (f)
BCF f,b
BSF f,b
BTFSC f,b
BTFSS f,b
Il est vident que b ne peut prendre quune valeur comprise entre 0 et 7, dsignant la
position du bit dans loctet :
7

Instructions travaillant avec un registre (f) mais proposant un


choix (d) sur la destination du rsultat :
- d = 0, le rsultat est plac dans w
- d = 1, le rsultat est plac dans le registre f

ADDWF f,d
ANDWF f,d
COMF f,d
DECF f,d
DECFSZ f,d
INCF f,d
INCFSZ f,d
IORWF f,d
MOVF f,d
RLF f,d
SUBWF f,d
SWAPF f,d
XORWF f,d

OUATTARA ALI

13

ETUDE DU MICROCONTROLEUR 16F84


III.5- Prsentation des instructions
Signification des lettres utilises dans lencodage des instructions :
b = position du bit dans loctet sur lequel on opre (il peut aller de 0 7)
d = registre de destination, avec deux variantes : d = 0 : le rsultat est plac dans W ; d = 1 : le rsultat est plac dans le registre
f = gnralement adresse de la mmoire RAM o se trouve loctet concern (dans lespace mmoire compris entre 0C et 4F).
Dans linstruction TRIS : octet de configuration de port
k = valeur du literal (ou adresse, dans les instructions CALL et GOTO)
w = registre W (accumulateur)
x = valeur indiffrente : peut tre soit 0 soit 1.Lassembleur lui donne automatiquement la valeur 0 (forme recommande par Microchip)

ADDLW : ADD Literal to W

ANDLW : AND Literal and W

- Additionne de manire immdiate le literal au contenu du registre


W, et place le rsultat dans W.

- Effectue une opration logique ET (AND) entre la valeur


immdiate du literal et loctet se trouvant dans le registre W.

- Le literal est un mot de 8 bits (de 00 FF).

- Le literal est un mot de 8 bits (de 00 FF)


- Cette instruction affecte le bit Z du registre dtat

- Cette instruction affecte 3 bits du registre dtat :


Le flag C : Carry
Le flag DC : Digit
Le flag Z : Zero

- 1 cycle dhorloge
- Encodage de linstruction :
13

-1 cycle dhorloge
- Encodage de linstruction :
13

0 1 1
3

1 1 1 x k k k k k k k k
E
Valeur de loctet que
lon veut ajouter W
(valeur pouvant
aller de 00 et FF)

- Exemple de programmation :
ANDLW

- Exemple de programmation :
ADDLW

A7

En supposant que W contienne 5C (01011100)


linstruction, aprs linstruction W contient 04.

06

En supposant que W contienne 04 avant linstruction, aprs


linstruction il contient 0A (en hexa : 06 + 04 = 0A).

avant

A7 = 10100111
5C = 01011100
AND = 00000100 (04 en hexa)
Pourquoi cette instruction dans le set du 16F84 ? A quoi sert-elle ?
Elle sert lorsque dans un octet on a besoin de
rcuprer un bit en particulier (ou certains bits en particulier).
Pour cela il suffit de prparer un masque, cest dire on octet
compos de 0 (aux emplacements o se trouvent les bits
liminer) et de 1 (aux emplacements o se trouvent les bits
rcuprer).
Exemple : on souhaite rcuprer uniquement le bit 5 de loctet
01111010. On prpare alors le masque 00100000 et on fait un
ET logique entre loctet et le masque. Comme ceci :
01111010 (octet)
00100000 (masque)
Ce qui donne : 00100000 (rsultat)
Le rsultat de lopration permet donc bien de rcuprer
uniquement le bit 5 de loctet : ici cest un 1 (00100000).
Une fois rcupr, on peut utiliser ce bit comme on veut.

OUATTARA ALI

14

ETUDE DU MICROCONTROLEUR 16F84


ANDWF : AND W and File

BSF : Bit Set File

Effectue une opration logique ET (AND) entre loctet se trouvant


dans le registre W et loctet situ (en mmoire RAM) ladresse
indique de suite (adresse comprise entre 0C et 4F) ; avec
deux variantes : le rsultat peut tre plac soit dans le registre
W, soit dans la mmoire RAM la place de loctet utilis pour
effectuer le ET logique (la nouvelle valeur prend la place de
lancienne).

- Met 1 (Set) le bit dsign de loctet situ (en mmoire RAM)


ladresse indique de suite (adresse comprise entre 0C et 4F).
- 1 cycle dhorloge
- Encodage de linstruction:

- Cette instruction affecte le bit Z du registre dtat


- 1 cycle dhorloge
- Encodage de linstruction :

- Position du bit dans loctet

- Exemples de programmation :
- Exemples de programmation :
ANDWF,0

ANDWF,1

Adresse

Adresse

Lexemple 1 effectue un ET logique entre loctet se trouvant


dans W et loctet se trouvant Adresse, et range le rsultat dans
W.
Lexemple 2 effectue un ET logique entre loctet se trouvant
dans W et loctet se trouvant Adresse, et range le rsultat dans
Adresse.
Pourquoi cette instruction dans le set du 16F84 ? A quoi sert-elle ?
Elle sert lorsque dans un octet on a besoin de rcuprer
un bit en particulier (ou certains bits en particulier).
Pour cela il suffit de prparer un masque, cest dire on octet
compos de 0 (aux emplacements o se trouvent les bits
liminer) et de 1 (aux emplacements o se trouvent les bits
rcuprer).

En supposant quon veuille mettre 1 (Set) un certain bit de loctet


situ ladresse 1C de la mmoire RAM, la programmation serait :
BSF 1C,0

(pour mettre 1 le bit 0)

Ou BSF 1C,1

(pour mettre 1 le bit 1)

Ou BSF 1C,2

(pour mettre 1 le bit 2)

Etc

BTFSC: Bit Test File, Skip if Clear


- Vrifie ltat logique du bit dsign de loctet situ (en mmoire
RAM) ladresse indique de suite (adresse comprise entre 0C
et 4F).
Est-il zro ?
Sil est zro, ignore linstruction suivante.
- Selon que la rponse soit OUI ou NON, linstruction prend 1
ou 2 cycles dhorloge.

Exemple : on souhaite rcuprer uniquement le bit 5 de loctet


01111010. On prpare alors le masque 00100000 et on fait un
ET logique entre loctet et le masque. Comme ceci :
01111010
(octet)
00100000
(masque)
Ce qui donne : 00100000
(rsultat)

- Encodage de linstruction:

Le rsultat de lopration permet donc bien de rcuprer


uniquement le bit 5 de loctet : ici cest un 1 (00100000).

Position
du bit
dans
loctet

0 0 0 1 1 0 b b

b f f f

b f f f

BCF : Bit Clear File

De

- Met zro le bit dsign de loctet situ (en mmoire RAM)


ladresse indique de suite (adresse comprise entre 0C et 4F).

0 0 0 1 1 0 0
1 0 0 1 1 1 1

Adresse de la RAM
(entre 0C et 4F)
o se trouve loctet
sur lequel on veut oprer

- 1 cycle dhorloge
- Encodage de linstruction:

- Position du bit dans loctet

- Organigramme du traitement :

- Position du bit dans loctet

- Exemples de programmation :
En supposant quon veuille mettre zro (Clear) un certain bit
de loctet situ ladresse 27 de la mmoire RAM, la
programmation serait :
BCF 27,0
Ou BCF 27,1
Ou BCF 27,2
Etc

(pour mettre zro le bit 0)


(pour mettre zro le bit 1)
(pour mettre zro le bit 2)

OUATTARA ALI

- Exemples de programmation :
En supposant que loctet dont on veut tester un bit soit situ
ladresse 1A, la programmation serait la suivante :
BTFSC 1A,0
Ou BTFSC 1A,1
Ou BTFSC 1A,2
Etc

(pour tester le bit 0)


(pour tester le bit 1)
(pour tester le bit 2)

15

ETUDE DU MICROCONTROLEUR 16F84


BTFSS: Bit Test File, Skip if Set

CALL : CALL subroutine

- Vrifie ltat logique du bit dsign de loctet situ (en mmoire


RAM) ladresse indique de suite (adresse comprise entre 0C
et 4F).
Est-il 1 ?
Sil est 1, ignore linstruction suivante.

- Appel sous-programme.

- Selon que la rponse soit OUI ou NON, linstruction prend 1


ou 2 cycles dhorloge.
- Encodage de linstruction:

- Le C sauvegarde ladresse de retour dans la pile (stack), puis


charge dans le PC (Program Counter) ladresse laquelle il est
invit se rendre. Il peut sagir aussi bien dune adresse que
dun label ; et cest l que dmarre le sous-programme.
- Tout sous-programme appel par linstruction CALL doit
obligatoirement se terminer soit par linstruction RETURN,
soit par linstruction RETLW qui renvoient au programme
principal.
Ne pas confondre linstruction CALL avec linstruction GOTO.
Linstruction CALL fait toujours revenir le programme principal
lendroit o il avait t abandonn ; tandis que linstruction
GOTO provoque labandon total de la squence et peut conduire
soit une toute autre action, soit larrt total du programme.
- La pile (stack) est une zone de mmoire ne pouvant contenir
que 8 mots de 13 bits.
Ceci limite 8 niveaux les possibilits dimbrication. Sil y en
avait un neuvime, la premire adresse de retour serait perdue...
- Cette instruction prend 2 cycles dhorloge.
- Encodage de linstruction :

- Position du bit dans loctet

- Organigramme du traitement :

- Organigramme du traitement :

- Exemples de programmation :
En supposant que loctet dont on veut tester un bit soit situ
ladresse 1C, la programmation serait la suivante :
BTFSS 1C,0

(pour tester le bit 0)

Ou BTFSS 1C,1

(pour tester le bit 1)

Ou BTFSS 1C,2

(pour tester le bit 2)

- Exemple de programmation :
CALL Tempo

(saute ladresse correspondant Tempo).

Etc

CLRF : CLeaR File

CLRW : CLeaR W

- Efface (Clear) ce qui se trouve (en mmoire RAM) ladresse


indique de suite (adresse comprise entre 00 et 4F).

- Efface (Clear) le registre W.

- Cette instruction affecte le bit Z du registre dtat

- 1 cycle dhorloge

- 1 cycle dhorloge

- Encodage de linstruction :

- Cette instruction affecte le bit Z du registre dtat

- Encodage de linstruction :

- Exemple de programmation :
CLR W

(efface le registre W).

En supposant que W contienne F8 avant linstruction, aprs


linstruction il contient 00.
- Exemples de programmation :
CLRF

INTCON

CLRF

PORTB

CLRF

1E

(pour dsactiver les interruptions)


(pour mettre zro tous les bits du port B)

(pour effacer ce qui se trouve ladresse 1E).

OUATTARA ALI

16

ETUDE DU MICROCONTROLEUR 16F84


- Encodage de linstruction:

CLRWDT : CLeaR Wach Dog Timer


- Met zro le compteur du chien de garde (ainsi que celui du
pr diviseur, si celui-ci est activ).
- Cette instruction affecte deux bits du registre dtat :
- le flag TO (Time Out) passe 1
- le flag PD (Power Down) passe 1
- 1 cycle dhorloge
- Encodage de linstruction :

- Exemple de programmation :
CLWDT

- Exemples de programmation :

(efface le compteur du chien de garde).

Peu importe o en tait le compteur du chien de garde, cette


instruction le fait revenir zro.

COMF

2B,0

(effectue le complment bit bit de loctet


situ ladresse 2B et range le rsultat
dans W)

En supposant que 2B contienne 11100000 avant linstruction,


aprs linstruction cette valeur est transforme en 00011111.

COMF : COMplement File


- Effectue un complment bit bit sur loctet situ (en mmoire
RAM) ladresse indique de suite (adresse comprise entre 0C
et 4F) ; avec deux variantes : le rsultat peut tre plac soit
dans le registre W, soit dans la mmoire RAM la place de
loctet utilis pour faire le complment (la nouvelle valeur prend
la place de lancienne).
Faire le complment bit bit dun octet quivaut changer ses
zros en 1, et inversement.

COMF

2B,1

(mme chose, mais le rsultat est rang


la place de loctet utilis pour faire le
complment).

DECF : DECrement File

- 1 cycle dhorloge

- Dcrmente la valeur de loctet situ (en mmoire RAM)


ladresse indique de suite (adresse comprise entre 0C et 4F) ;
avec deux variantes : le rsultat peut tre plac soit dans le
registre W, soit dans la mmoire RAM la place de loctet quon
a dcrment (la nouvelle valeur prend la place de lancienne).

- Encodage de linstruction:

- Cette instruction affecte le bit Z du registre dtat

Exemple : le complment de 00111100 est 11000011.


- Cette instruction affecte le bit Z du registre dtat

- 1 cycle dhorloge
- Encodage de linstruction :

- Exemples de programmation :
COMF

2B,0

(effectue le complment bit bit de loctet


situ ladresse 2B et range le rsultat
dans W)

En supposant que 2B contienne 11100000 avant linstruction,


aprs linstruction cette valeur est transforme en 00011111.
COMF

2B,1

(mme chose, mais le rsultat est rang


la place de loctet utilis pour faire le
complment).

- Exemples de programmation :
DECF

COMPTEUR,0

(dcrmente loctet se trouvant


ladresse COMPTEUR, et range
le rsultat dans W)

DECF

COMPTEUR,1

(mme chose, mais cette fois le


rsultat est rang ladresse
COMPTEUR).

COMF : COMplement File


- Effectue un complment bit bit sur loctet situ (en mmoire
RAM) ladresse indique de suite (adresse comprise entre 0C
et 4F) ; avec deux variantes : le rsultat peut tre plac soit
dans le registre W, soit dans la mmoire RAM la place de
loctet utilis pour faire le complment (la nouvelle valeur prend
la place de lancienne).
Faire le complment bit bit dun octet quivaut changer ses
zros en 1, et inversement.
Exemple : le complment de 00111100 est 11000011.
- Cette instruction affecte le bit Z du registre dtat
- 1 cycle dhorloge

OUATTARA ALI

17

ETUDE DU MICROCONTROLEUR 16F84


DECFSZ : DECrement File, Skip if Zero

INCF : INCrement File

- Dcrmente la valeur de loctet situ (en mmoire RAM)


ladresse indique de suite (adresse comprise entre 0C et 4F), et
effectue un test :
Loctet a-t-il atteint zro ?
Si OUI, ignore linstruction suivante.
Avec deux variantes : le rsultat peut tre plac soit dans le
registre W, soit dans la mmoire RAM la place de loctet
dcrment (la nouvelle valeur prend la place de lancienne).

- Incrmente la valeur de loctet situ (en mmoire RAM)


ladresse indique de suite (adresse comprise entre 0C et 4F) ;
avec deux variantes :
le rsultat peut tre plac soit dans le registre W, soit dans la
mmoire RAM la place de loctet quon a incrment (la
nouvelle valeur prend la place de lancienne).

- Selon qu la suite de la dcrmentation loctet ait atteint ou pas


la valeur zro, linstruction prend 1 ou 2 cycles dhorloge.

- Encodage de linstruction :

- Cette instruction affecte le bit Z du registre dtat


- 1 cycle dhorloge

- Encodage de linstruction:

- Exemples de programmation :
INCF

NOMBRE,0

(incrmente loctet se trouvant


ladresse NOMBRE, et range le
rsultat dans W)

INCF

NOMBRE,1

( mme chose, mais cette fois le


rsultat est rang ladresse
NOMBRE. La nouvelle valeur
prend la place de lancienne).

- Cette instruction est gnralement suivie par linstruction CALL.


- Exemples de programmation :
DECFSZ

2F,0

(dcrmente loctet se trouvant


ladresse 2F, et range le rsultat
dans W. Si le rsultat est zro,
ignore linstruction suivante).

DECFSZ

2F,1

(mme chose, mais cette fois le


rsultat est rang ladresse 2F.
La nouvelle valeur prend la place
de lancienne).

GOTO
- Branchement inconditionnel.
Va de faon inconditionnelle ladresse indique de suite
(adresse de dmarrage du sous-programme). Il peut sagir aussi
bien dune adresse que dun label.
Cette instruction interrompt lexcution squentielle des
instructions et oblige poursuivre le programme dune adresse
compltement ailleurs.
A la diffrence de linstruction CALL (qui fait toujours revenir le
programme principal lendroit o il avait t abandonn),
linstruction GOTO provoque labandon complet de la squence
et peut conduire soit une toute autre action, soit larrt total
du programme.

INCFSZ : INCcrement File, Skip if Zero


- Incrmente la valeur de loctet situ (en mmoire RAM)
ladresse indique de suite (adresse comprise entre 0C et 4F), et
effectue un test :
loctet a-t-il atteint zro ?
Si OUI, ignore linstruction suivante.
Avec deux variantes : le rsultat peut tre plac soit dans le
registre W, soit dans la mmoire RAM la place de loctet
incrment (la nouvelle valeur prend la place de lancienne).
- Selon qu la suite de lincrmentation loctet ait atteint ou pas la
valeur zro, linstruction prend 1 cycle ou deux dhorloge.
- Encodage de linstruction :

- Cette instruction prend 2 cycles dhorloge.


- Encodage de linstruction :

- Cette instruction est gnralement suivie par CALL.


- Exemples de programmation :
INCFSZ

DATE,0

- Exemple de programmation
GOTO

ALLUMAGE

Aprs cette instruction, le PC (Program Counter) est charg avec


la valeur de ladresse laquelle commence le programme
ALLUMAGE.

OUATTARA ALI

INCFSZ

DATE,1

(incrmente loctet se trouvant


ladresse DATE, et range le
rsultat dans W. Si le rsultat est
zro, ignore linstruction suivante).
(mme chose, mais cette fois le
rsultat est rang ladresse
DATE. La nouvelle valeur prend la
place de lancienne).

18

ETUDE DU MICROCONTROLEUR 16F84


IORLW : Inclusive OR Literal with W

IORWF : Inclusive OR With File

- Effectue une opration logique OU inclusif (Inclusive OR) entre la


valeur immdiate du literal et loctet se trouvant dans le registre W.
Le rsultat de lopration reste dans le registre W.
- Le literal est un mot de 8 bits (de 00 FF)
- Cette instruction affecte le bit Z du registre dtat
- 1 cycle dhorloge
- Encodage de linstruction :

- Effectue une opration logique OU inclusif (Inclusive OR) entre


loctet se trouvant dans le registre W et loctet situ (en mmoire
RAM) ladresse situe de suite (adresse comprise entre 0C et 4F)
; avec deux variantes : le rsultat peut tre plac soit dans le
registre W, soit dans la mmoire RAM la place de loctet utilis
pour faire le OU inclusif (la nouvelle valeur prend la place de
lancienne).
- Cette instruction affecte le bit Z du registre dtat
- 1 cycle dhorloge
- Encodage de linstruction:

- Exemple de programmation :
IORLW

B5

(10110101)

En supposant que W contienne 49 (01001001) avant linstruction,


aprs linstruction il contient FD.
- Exemples de programmation :
B5 = 10110101
49 = 01001001
OR = 11111101 (FD en hexa)
Pourquoi cette instruction dans le set du 16F84 ? A quoi sert-elle ?
Elle sert lorsque dans un octet on a besoin de forcer 1 un bit
en particulier (ou certains bits en particulier).
Pour cela il suffit de prparer un masque, cest dire on octet
compos de 0 (aux emplacements o se trouvent les bits ignorer)
et de 1 (aux emplacements o se trouvent les bits quon veut forcer
1).
Exemple : on souhaite forcer 1 les bits 7 et 6 de loctet 01111010.
On prpare alors le masque 11000000 et on fait un OU logique
entre loctet et le masque. Comme ceci :
01111010
Ce qui donne :

(effectue le OU inclusif entre loctet se


trouvant dans W et celui situ
ladresse 29, et range le rsultat dans
W).
En supposant que le contenu de ladresse 29 soit C7 (11000111) et
que W contienne 69 (01101001), aprs linstruction on obtient EF
(11101111).
IORWF

(octet)

11000000

(masque)

11111010

(rsultat)

Le rsultat de lopration permet donc bien de forcer 1 les bits 7 et


6 de loctet. Il se trouve quici le bit 6 tait dj 1. Mais le
programme ne le savait pas. Linstruction IORLW permet de
prciser les choses.
Une fois forcs 1, on peut utiliser ces bits (ou loctet) comme on
veut.

IORWF

29,0

29,1

(mme chose, mais le rsultat est rang


ladresse 29, la place de loctet
utilis pour faire le OU inclusif).

Pourquoi cette instruction dans le set du 16F84 ? A quoi sert-elle ?


Elle sert lorsque dans un octet on a besoin de forcer 1 un bit
en particulier (ou certains bits en particulier).
Pour cela il suffit de prparer un masque, cest dire on octet
compos de 0 (aux emplacements o se trouvent les bits ignorer)
et de 1 (aux emplacements o se trouvent les bits quon veut forcer
1).
Exemple : on souhaite forcer 1 les bits 7 et 6 de loctet 01111010.
On prpare alors le masque 11000000 et on fait un OU logique
entre loctet et le masque. Comme ceci :
01111010 (octet)
11000000 (masque)
Ce qui donne : 11111010 (rsultat)
Le rsultat de lopration permet donc bien de forcer 1 les bits 7 et
6 de loctet. Il se trouve quici le bit 6 tait dj 1. Mais le
programme ne le savait pas. Linstruction IORLW permet de
prciser les choses.

OUATTARA ALI

19

ETUDE DU MICROCONTROLEUR 16F84


MOVF : MOVe File

NOP : No OPeration

- Cette instruction peut faire deux choses :

- Linstruction la plus paresseuse !


Ne fait rien.
Elle sert juste occuper le processeur pour laisser passer un peu
de temps (1 cycle dhorloge).
Sutilise essentiellement pour crer des temporisations.

Soit porter dans W le contenu situ (en mmoire RAM)


ladresse indique de suite (adresse comprise entre 0C et
4F), avec loption de programmation ,0
Soit copier loctet sur lui-mme au mme emplacement de
la RAM, avec loption de programmation ,1
Bien que a paraisse comique de copier le contenu dun registre sur
lui-mme, en fait - tant donn que cette opration modifie le bit Z
du registre dtat - elle est utile quand on a besoin de faire un test
zro sur loctet, en toute scurit.
- Cette instruction affecte le bit Z du registre dtat

- 1 cycle dhorloge
- Encodage de linstruction:

- Exemple de programme :
NOP

- 1 cycle dhorloge
- Encodage de linstruction:

OPTION : load OPTION register


- NB : cette instruction est spcifique au 16F84.
Microchip recommande de ne pas lutiliser, dans le but de laisser
les programmes (crits pour ce type de microcontrleur)
compatibles avec ceux crits pour dautres modles de PIC.
Mais ceci nest pas un obstacle pour nous, du fait que notre intrt
est exclusivement tourn vers le 16F84.
- Charge le registre OPTION, cest -dire le registre qui sert
configurer le TMR0 (lhorloge interne du microcontrleur) ainsi que
le prdiviseur.

- Exemples de programmation :
MOVF

(porte dans W ltat es lignes du port B).

PORTB,0

MOVF

(copie le contenu de ladresse 18 sur luimme).

18,1

- Sagissant dun registre lecture/criture simultane, on ne peut


pas y crire directement, mais il faut obligatoirement transiter par le
registre W.
En programmation, on commence par crire loctet de configuration
dans W. Puis linstruction OPTION - en mme temps quelle
adresse ce registre y copie automatiquement loctet de
configuration.

MOVLW : MOVe Literal to W


- Charge de manire immdiate le literal dans le registre W

RETFIE : RETurn From IntErrupt

- Le literal est un mot de 8 bits (de 00 FF)

- Retour au programme principal aprs excution dun sousprogramme dinterruption.


Charge le PC (Program Counter : compteur dinstructions) avec la
valeur qui se trouve au sommet de la pile (stack) ; ce qui provoque
le retour au programme principal.

- 1 cycle dhorloge
- Encodage de linstruction :

- Exemple de programmation :
MOVLW

F5

(met F5, cest -dire 11110101, dans W).

MOVWF : MOVe W to File


- Prend le contenu du registre W et le met (dans la mmoire RAM)
ladresse indique de suite (adresse de 0C 4F)
- 1 cycle dhorloge
- Encodage de linstruction :

- Lorsquune interruption est demande, le microcontrleur, avant


de sauter ladresse 004 de lEEPROM mmoire de programme,
sauve la valeur du
Program Counter dans la pile.
Cette valeur - comme dans une pile dassiettes - se place tout en
haut de la pile (dans laquelle il y a seulement 8 places).
A la fin du sous-programme de rponse linterruption, le C
rencontre linstruction RETFIE par laquelle il rcupre la valeur se
trouvant au sommet de la pile (correspondant la dernire valeur
entre) et la positionne dans le Program Counter, faisant ainsi
revenir le programme son flux normal (pile de type LIFO : Last In,
First Out).
- Aprs cette instruction, le pointeur de pile (stack pointer) se
positionne tout en haut de la pile, et le bit du GIE (General Interrupt
Enable) du registre INTCON (bit7) bascule 1.
- Cette instruction prend 2 cycles dhorloge
- Encodage de linstruction:

- Exemple de programme :
- Exemple de programmation :
MOVWF

0D

(crit le contenu de W ladresse RAM 0D).

OUATTARA ALI

RETFIE

20

ETUDE DU MICROCONTROLEUR 16F84


RETLW : RETurn from subroutine with Literal in W
- Instruction jusqu un certain point similaire RETURN, en ce
sens quelle ferme un sous-programme et provoque le retour au
programme principal lendroit o il avait t abandonn ; mais
avec une particularit en plus : charge dans le registre W la valeur
du literal.
- Le literal est un mot de 8 bits (de 00 FF)

RRF : Rotate Right File


- Rotation droite.

- Effectue le dplacement dune position vers la droite des bits de


loctet situ (en mmoire RAM) ladresse indique de suite
(adresse comprise entre 0C et 4F) en utilisant le bit de CARRY du
registre dtat : le contenu du bit de CARRY devient le nouveau bit
7 de loctet ayant effectu la rotation droite, tandis que lancien bit
0 entre dans CARRY ; avec deux variantes : le rsultat de la
rotation peut tre rang soit dans le registre W, soit dans la
mmoire RAM la place de loctet utilis pour effectuer la rotation
(la nouvelle valeur prend la place de lancienne).

- Cette instruction prend 2 cycles dhorloge


- Encodage de linstruction:

RETURN : RETURN from subroutine


- Retour dun sous-programme.
Le PC (Program Counter) est charg avec ladresse se trouvant au
sommet de la pile.
- Cest linstruction qui ferme un sous-programme et provoque le
retour au programme principal lendroit auquel il avait t
abandonn.

- NB : Avant dutiliser cette instruction il convient de pralablement


effacer le bit de CARRY.
Linstruction qui efface le bit de CARRY est : BCF STATUS,0
(efface le bit zro du registre STATUS, cest -dire le bit de
CARRY).
- Cette instruction affecte le bit C du registre dtat
- 1 cycle dhorloge
- Encodage de linstruction:

- Cette instruction prend 2 cycles dhorloge


- Encodage de linstruction:

RLF : Rotate Left File

SLEEP

- Rotation gauche.

- Mise en veilleuse.

- Effectue le dplacement dune position vers la gauche des bits de


loctet situ (en mmoire RAM) ladresse indique de suite
(adresse comprise entre 0C et 4F) en utilisant le bit de CARRY du
registre dtat : le contenu du bit de CARRY devient le nouveau bit
0 de loctet ayant effectu la rotation gauche, tandis que lancien
bit 7 entre dans CARRY ; avec deux variantes : le rsultat de la
rotation peut tre rang soit dans le registre W, soit dans la
mmoire RAM la place de loctet utilis pour effectuer la rotation
(la nouvelle valeur prend la place de lancienne).
- NB : Avant dutiliser cette instruction il convient de pralablement
effacer le bit de CARRY.
Car, supposer que dans CARRY il ait un 1, aprs une rotation
gauche de 00000001 on aurait 00000011 alors quon sattendait
00000010.
Linstruction qui efface le bit de CARRY est : BCF STATUS,0
(efface le bit zro du registre STATUS, cest -dire le bit de
CARRY).

Cette instruction sutilise non pas pour mettre le C hors tension,


mais pour arrter le squencement des instructions (ralentir le
signal dhorloge jusqu lextrme limite : la frquence zro).
Pendant cette mise en veilleuse, lhorloge externe (faisant partie de
ce que nous avons appel le cortge des invariants) est coupe. Le
flux du programme est bloqu.
Seul le chronomtre du Watch Dog (chien de garde) reste actif.
La consommation du botier (qui normalement est de 2 mA) tombe
30A.
Parmi les causes pouvant rveiller le C retenons : une demande
dinterruption, ou un signal provenant du chronomtre (timer) du
chien de garde.
- Cette instruction affecte deux bits du registre dtat :
TO (Time Out) passe 1
PD (Power Down) passe 0
En plus, elle met zro le chronomtre du chien de garde, ainsi
que le prdiviseur.
- 1 cycle dhorloge
- Encodage de linstruction:

- Cette instruction affecte le bit C du registre dtat


- 1 cycle dhorloge
- Encodage de linstruction:

OUATTARA ALI

21

ETUDE DU MICROCONTROLEUR 16F84


SUBLW : SUBtract Literal with W

TRIS : TRIState port

- Soustrait le literal (valeur immdiate reprsente par un octet


pouvant aller de 00 FF) du contenu du registre W, et place le
rsultat dans W.

- Cette instruction affecte 3 bits du registre dtat :

- NB : cette instruction est spcifique au 16F84.


Microchip recommande de ne pas lutiliser, dans le but de laisser
les programmes (crits pour ce type de microcontrleur)
compatibles avec ceux crits pour dautres modles de PIC.
Il suffit de le savoir.
Mais ceci nest pas un obstacle pour nous, du fait que notre intrt
est exclusivement tourn vers le 16F84.
- Charge le registre TRIS (A ou B), et met les lignes de port haute
impdance.
Ce registre configure, cest dire dfinit le sens de fonctionnement
de chacune des lignes des ports A et B ; assigne chaque ligne
soit le rle dentre, soit le rle de sortie, sans pour autant
provoquer aucune entre ni aucune sortie.

Le flag C (Carry)
Le flag DC (Digit Carry)
Le flag Z (Zero)
- 1 cycle dhorloge

- Il sagit dun registre de 8 bits, pouvant tous se programmer


individuellement par 0 ou par 1 :

- Encodage de linstruction:

0 = la ligne de port (qui lui correspond) est configure comme sortie


1 = la ligne de port (qui lui correspond) est configure comme
entre
- Sagissant dun registre lecture/criture simultane, on ne peut
pas y crire directement, mais il faut obligatoirement transiter par le
registre W.

SUBWF : SUBtract W from File


- Soustrait la valeur contenue dans le registre W de la valeur se
trouvant (en mmoire RAM) ladresse indique de suite (adresse
comprise entre 0C et 4F) ; avec deux variantes : le rsultat
(diffrence) peut tre rang soit dans le registre W, soit dans la
mmoire RAM la place du diminuende.

En programmation, on commence par crire loctet de configuration


dans W. Puis linstruction TRIS (A ou B), en mme temps quelle
adresse ce registre, copie automatiquement loctet de configuration
dans le port A ou dans le port B.
- Encodage de linstruction :

- Cette instruction affecte 3 bits du registre dtat :


Le flag C (Carry)
Le flag DC (Digit Carry)
- Exemple de programmation :

Le flag Z (Zero)

MOVLW
MOVWF

- 1 cycle dhorloge
- Encodage de linstruction:

00000100 (en binaire)


TRISB

On charge dans le registre W loctet de configuration de port (ligne


2 en entre, toutes les autres lignes en sortie), que linstruction
TRIS valide.
A partir de ce moment le port est configur, mais aucune donne
ny entre, aucune donne ny sort.
Les lignes du port sont mises en haute impdance (tristate).

SWAPF : SWAP File


- Echange les quatre bits de poids fort dun octet se trouvant (en
mmoire
RAM) ladresse indique de suite (adresse comprise entre 00 et
4F), avec ses propres quatre bits de poids faible :

Avec deux variantes : le rsultat de lchange peut tre plac soit


dans le registre W, soit dans la mmoire RAM en lieu et place de
loctet utilis pour effectuer le swap.
- 1 cycle dhorloge
- Encodage de linstruction:

OUATTARA ALI

22

ETUDE DU MICROCONTROLEUR 16F84


XORWF : Exclusive OR W and File

XORLW : EXclusive OR Literal and W

- Le literal est un mot de 8 bits (de 00 FF).

- Effectue un OU exclusif (Exclusive OR) entre loctet se trouvant


dans le registre W et loctet situ (en mmoire RAM) ladresse
indique de suite (adresse comprise entre 0C et 4F) ; avec deux
variantes : le rsultat peut tre rang soit dans le registre W, soit
dans la mmoire RAM la place de loctet utilis pour effectuer le
OU exclusif (la nouvelle valeur prend la place de lancienne).

- Un OR exclusif permet de comparer deux octets bit bit.


Si les bits de mme poids sont au mme niveau, le rsultat est
zro.
Si par contre ils sont des niveaux diffrents, le rsultat est 1.

- Un OR exclusif permet de comparer deux octets bit bit.


Si les bits de mme poids sont au mme niveau, le rsultat est
zro.
Si par contre ils sont des niveaux diffrents, le rsultat est 1.

Exemple de XOR entre deux octets :


00110011
01110010
Rsultat = 01000001

Exemple de XOR entre deux octets :


00110011
01110010
Rsultat = 01000001

- Effectue un OU exclusif (Exclusive OR) entre la valeur immdiate


du literal et loctet se trouvant dans le registre W.
Le rsultat est rang dans W.

- Un OR exclusif permet dinverser un tat logique.

- Un OR exclusif permet dinverser un tat logique.

Exemple :
Exemple :

Soit au dpart loctet 11111111.


Si le XOR se fait avec 00000000 , rien ne change ;
le rsultat est : 11111111.

Soit au dpart loctet 11111111.


Si le XOR se fait avec 00000000 , rien ne change ;
le rsultat est :
11111111.
Si par contre le XOR se fait avec 00000001, le rsultat est :
11111110
(Alors que les zros ne font rien changer, les 1 provoquent un
basculement dtat).

Si par contre le XOR se fait avec 00000001, le rsultat est :


11111110.
(Alors que les zros ne font rien changer, les 1 provoquent un
basculement dtat).
- Cette instruction affecte le bit Z du registre dtat

- Cette instruction affecte le bit Z du registre dtat

- 1 cycle dhorloge

- 1 cycle dhorloge

- Encodage de linstruction:

- Encodage de linstruction:

Pourquoi cette instruction dans le set du 16F84 ? A quoi sert-elle


pratiquement ?
Elle sert lorsque dans un octet on a besoin dinverser un bit en
particulier (ou certains bits en particulier).
Pour cela il suffit de prparer un masque, cest dire on octet
compos de 0 (aux emplacements o se trouvent les bits ignorer)
et de 1 (aux emplacements o se trouvent les bits quon veut
inverser).
Exemple : on souhaite inverser les bits 7, 6, 5 et 4 de loctet
01111010.
On prpare alors le masque 11110000 et on fait un OU logique
entre loctet et le masque. Comme ceci :
01111010 (octet)
11110000 (masque)
Ce qui donne : 10001010 (rsultat)
Linstruction XORLW a donc bien invers ltat logique des bits 7, 6,
5 et 4 de loctet se trouvant dans W. Les bits qui taient 0 sont
passs 1, et inversement.

Pourquoi cette instruction dans le set du 16F84? A quoi sert-elle


pratiquement?
Elle sert essentiellement lorsque dans un octet on a besoin
dinverser un bit en particulier (ou certains bits en particulier).
Pour cela il suffit de prparer un masque, cest dire on octet
compos de 0 (aux emplacements o se trouvent les bits ignorer)
et de 1 (aux emplacements o se trouvent les bits quon veut
inverser).
Exemple : on souhaite inverser les bits 7, 6, 5 et 4 de loctet
01111010.
On prpare alors le masque 11110000 et on fait un OU logique
entre loctet et le masque. Comme ceci :
01111010 (octet)
11110000 (masque)
Ce qui donne : 10001010 (rsultat)
Linstruction XORWF a donc bien invers ltat logique des bits 7,
6, 5 et 4 de loctet en mmoire. Les bits qui taient 0 sont passs
1, et inversement.

OUATTARA ALI

23

Вам также может понравиться