Vous êtes sur la page 1sur 88

Ministre de lenseignement suprieur et de la recherche scientifique

Universit MENTOURI Constantine


Dpartement dlectrotechnique

Module : Informatique Industrielle 1

Code : ME17

Niveau : Master en lectrotechnique

Mthode denseignement : Cours/ TD / TP

Objectifs de la formation :
Contenu du module propos par ladministration :
Architecture, Microprocesseur usage gnrale, processeurs de traitement
numrique du signal DSP.
Programmation, exemple de proc.
Les chapitres proposs par le responsable de module :
Chapitre 1
: Historique et volution des ordinateurs et des microprocesseurs
Chapitre 2
: Le microprocesseur Intel 8086
Chapitre 3
: La programmation en assembleur du 8086
Chapitre 4
: Les interfaces dentres/sorties
Chapitre 5
: Les interruptions dans 8086
Chapitre 6
: Le Microcontrleur PIC16F84
Chapitre 6

: Les processeurs de traitement numrique du signal DSP.

Annexe

: Jeu dinstructions du 8086

Responsable de module : Mr MESSAOUDI Kamel

Matre assistant A

UMC

Ce document constitue le support du cours et ne prtend donc ni l'originalit, ni l'exhaustivit. Ces notes
doivent beaucoup aux emprunts faits de nombreux ouvrages et diffrents travaux de collgues. Ce
document s'adresse aux tudiants Master1 (Master en lectrotechnique), dpartement dlectrotechnique,
universit Mentouri de Constantine.

Anne Universitaire 2011-2012

Informatique Industrielle 1

ME17

Chapitre I : Historique et volution des ordinateurs et des microprocesseurs


I. Prface :
Apparus ds la cration des premiers circuits intgrs numriques, au dbut des annes
1970, les microprocesseurs constituent le coeur de presque toutes les ralisations lectroniques; on
en trouve dans tous les domaines, notamment : l'informatique (de la calculatrice l'ordinateur),
l'automobile (ABS, injection, ...), l'automatique (automates programmables, contrle de processus,
...), l'lectronique domestique (thermomtre, tlcommande, carte puce, ...).
Les performances des microprocesseurs sont lies aux possibilits offertes par la
technologie, en terme de capacit (nombre de portes logiques intgres) et de vitesse, et au choix
d'architectures adaptes (ou imposes pour cause de compatibilit ascendante); l'heure actuelle, on
trouve sur le march des microprocesseurs intgrant des millions de transistors, fonctionnant plus
de 3000 MHz et disposs dans des botiers de plusieurs centaines de broches, ils sont issus de
diffrentes approches architecturales : CISC, RISC, DSP et VLIW.
L'objectif de ce chapitre est de retracer l'volution des microprocesseurs, en liaison avec
celle de la technologie.
II. Prhistoire des ordinateurs :
Les premires machines calculer taient purement mcaniques : bouliers, abaques, ...
(antiquit). La premire vraie machine calculer est apparue en 1942 : (Pascal, machine
additionner). Une autre machine multiplier propose par Leibniz en 1694, base sur les travaux de
John Neper (1617, logarithmes). Vers les 18eme sicle, une autre machine programmable base
des cartes perfores est apparue (mtier tisser, Jacquard).
II.1. Machines lectromcaniques :
Machine calculer cartes perfores : Hermann Hollerith, 1885, facilite le recensement
amricain.
Machines industrielles pour la comptabilit et les statistiques. Ces machines sont base de
relais lectromcaniques (Aiken et Stibitz, 1936-1939).
II.2. Machines lectroniques :
Premire machine calculer lectronique : ENIAC, 1944, Eckert et Mauchly, 18000 tubes
lectroniques, machine programme cbl.
Machine programme enregistr : John Von Neumann, 1946, les instructions sont
enregistres dans la mmoire du calculateur : ordinateur.
Premier ordinateur commercialis : SSEC dIBM, 1948.
Ordinateur transistors : 1963, PDP5 de Digital Equipment Corporation (DEC),
introduction des mmoires ferrites : mini-ordinateurs.
Micro-ordinateurs : 1969-70, utilisation des circuits intgrs LSI.
Premier microprocesseur : Intel, 1971, microprocesseur 4004, puis 8008, premier
microordinateur : le Micral, 1973, France, puis lAltair, 1975, Etats-Unis.
Autres microprocesseurs : 8080 et 8085 dIntel, 6800 de Motorola, Z80 de Zilog :
microprocesseurs 8 bits, dbut des annes 1980.
Microprocesseurs 16 bits : 8086/8088 dIntel, 68000 de Motorola.
Microprocesseurs 32 bits en 1986 : 80386 dIntel et 68020 de Motorola.
Fabrication en grandes sries des micro-ordinateurs : 1977, Apple, Commodore, Tandy.
IBM PC + MS-DOS (Microsoft) en 1981.
II.3. Machines actuelles :
Les ordinateurs de nos jours sont de plus en plus puissants, bass sur des microprocesseurs
performants : Pentium, Power PC, ... ; Avec des nouvelles architectures de microprocesseurs :
RISC. Et avec des applications multimdia, rseaux, ....
De nos jours, est apparue aussi la notion des systmes embarqus : microcontrleurs,
processeurs de traitement de signal (DSP), les microprocesseurs configurables ...

Messaoudi K. - 2011/2012

Informatique Industrielle 1

ME17

III. Architecture et fonctionnement dun microprocesseur :


III.1 Structure dun calculateur :

Figure n1 : Structure dun calculateur


Llment de base dun calculateur est constitu par lunit centrale de traitement (UCT,
CPU: Central Processing Unit). LUCT est constitue :
Dune unit arithmtique et logique (UAL, ALU : Arithmetic and Logic Unit) : cest
lorgane de calcul du calculateur ;
De registres : zones de stockage des donnes de travail de lUAL (oprandes, rsultats
intermdiaires) ;
Dune unit de contrle (UC, CU : Control Unit) : elle envoie les ordres (ou
commandes) tous les autres lments du calculateur afin dexcuter un programme.
La mmoire centrale contient :
Le programme excuter : suite dinstructions lmentaires ;
Les donnes traiter.
Lunit dentres/sorties (E/S) est un intermdiaire entre le calculateur et le monde extrieur.
Lunit de transfert est le support matriel de la circulation des donnes.
Les changes dordres et de donnes dans le calculateur sont synchroniss par une horloge qui
dlivre des impulsions (signal dhorloge) des intervalles de temps fixes.
Dfinition : Un microprocesseur consiste en une unit centrale de traitement (UAL + registres +
unit de contrle) entirement contenue dans un seul circuit intgr. Un calculateur construit
autour dun microprocesseur est un microcalculateur ou un microordinateur. Un circuit intgr
qui inclut une UCT, de la mmoire et des priphriques est un microcontrleur.
III.2 Organisation de la mmoire centrale :
La mmoire peut tre vue comme un ensemble de cellules ou cases contenant chacune une
information : une instruction ou une donne. Chaque case mmoire est repre par un numro
dordre unique : son adresse. Une case mmoire peut tre lue ou crite par le microprocesseur (cas
des mmoires vives) ou bien seulement lue (cas des mmoires mortes). La figure suivante montre
le schma synoptique dune mmoire :

Figure n2 : Organisation de la mmoire centrale

Messaoudi K. - 2011/2012

Informatique Industrielle 1

ME17

III.3 Circulation de linformation dans un calculateur


La ralisation matrielle des ordinateurs est gnralement base sur larchitecture de
VonNeumann :

Figure n3 : Architecture de base de VonNeumann de transfert des donnes


Le microprocesseur change des informations avec la mmoire et lunit dE/S, sous forme
de mots binaires, au moyen dun ensemble de connexions appel bus. Un bus permet de transfrer
des donnes sous forme parallle, cest--dire en faisant circuler n bits simultanment.
Les microprocesseurs peuvent tre classs selon la longueur maximale des mots binaires
quils peuvent changer avec la mmoire et les E/S : microprocesseurs 8 bits, 16 bits, 32 bits, ... Le
bus peut tre dcompos en trois bus distincts :
Le bus dadresses permet au microprocesseur de spcifier ladresse de la case mmoire
lire ou crire ;
Le bus de donnes permet les transferts entre le microprocesseur et la mmoire ou les E/S ;
Le bus de commande transmet les ordres de lecture et dcriture de la mmoire et des E/S.

Figure n4 : Architecture dtall de VonNeumann de transfert des donnes.


Remarque : Les bus de donnes et de commande sont bidirectionnels, le bus dadresse est
unidirectionnel : seul le microprocesseur peut dlivrer des adresses (il existe une drogation pour
les circuits daccs direct la mmoire, DMA).
III.4. Description matrielle dun microprocesseur :
Un microprocesseur se prsente sous la forme dun circuit intgr muni dun nombre
gnralement important de broches. Exemples :
Intel 8085, 8086, Zilog Z80 : 40 broches, DIP (Dual In-line Package) ;
Motorola 68000 : 64 broches, DIP ;
Intel 80386 : 196 broches, PGA (Pin Grid Array).
La technologie de fabrication : NMOS, PMOS, CMOS. On peut reprsenter donc un
microprocesseur par son schma fonctionnel :

Figure n5 : Schma fonctionnel


dun microprocesseur

Messaoudi K. - 2011/2012

Informatique Industrielle 1

ME17

III.5 Fonctionnement dun microprocesseur :


Un microprocesseur excute un programme. Le programme est une suite dinstructions
stockes dans la mmoire. Une instruction peut tre code sur un ou plusieurs octets. Le format
dune instruction est donnes par :

Figure n6 : Format et arrangement dune instruction excute par un microprocesseur.


Pour excuter les instructions dans lordre tabli par le programme, le microprocesseur doit
savoir chaque instant ladresse de la prochaine instruction excuter. Le microprocesseur utilise
un registre contenant cette information. Ce registre est appel pointeur dinstruction (IP :
Instruction Pointer) ou compteur dinstructions ou compteur ordinal. La figure suivante illustre
un exemple dIP :

Figure n7 : Exemple dun pointeur dinstruction IP.


Remarque n1 :
La valeur initiale du pointeur dinstruction est fixe par le constructeur du microprocesseur.
Elle vaut une valeur bien dfinie chaque mise sous tension du microprocesseur ou bien lors dune
remise zro (reset).
Pour savoir quel type dopration doit tre excut (addition, soustraction, ...), le
microprocesseur lit le premier octet de linstruction pointe par le pointeur dinstruction (code
opratoire) et le range dans un registre appel registre dinstruction. Le code opratoire est dcod
par des circuits de dcodage contenus dans le microprocesseur. Des signaux de commande pour
lUAL sont produits en fonction de lopration demande qui est alors excute.
Messaoudi K. - 2011/2012

Informatique Industrielle 1

ME17

Remarque n2 : Pour excuter une instruction, lUAL utilise des registres de travail, exemple :
laccumulateur, registre temporaire recevant des donnes intermdiaires. Pendant que linstruction
est dcode, le pointeur dinstruction est incrment de faon pointer vers linstruction suivante :

Figure n8 : Incrmentation du pointeur dinstruction.


Ensuite le processus de lecture et de dcodage des instructions recommence. A la suite de
chaque instruction, un registre du microprocesseur est actualis en fonction du dernier rsultat :
cest le registre dtat du microprocesseur. Chacun des bits du registre dtat est un indicateur
dtat ou flag (drapeau). Exemple : Registre dtat du microprocesseur Z80 :

Figure n9 : Registre dtat du microprocesseur Z80.


Les indicateurs dtat sont activs lorsquune certaine condition est remplie, exemple : le
flag Z est mis 1 lorsque la dernire opration a donn un rsultat nul, le flag C est mis un lorsque
le rsultat dune addition possde une retenue, ...
Les indicateurs dtat sont utiliss par les instructions de saut conditionnels : en fonction de
ltat dun (ou plusieurs) flags, le programme se poursuit de manire diffrente.
Toutes ces tapes (lecture de linstruction, dcodage, excution) sont synchronises par un
squenceur qui assure le bon droulement des oprations :

Figure n10 : Synchronisation des tapes dexcution dune instruction.


Pour excuter le programme contenu dans la mmoire centrale, le squenceur du
microprocesseur excute lui-mme un programme appel micro-code, contenu dans une mmoire
morte lintrieur du microprocesseur.
Le squenceur est dirig par une horloge qui dlivre un signal de frquence donne
permettant denchaner les diffrentes tapes de lexcution dune instruction :

Messaoudi K. - 2011/2012

Informatique Industrielle 1

ME17

Figure n11 : Le signal Horloge et le cycle dinstruction.


Chaque instruction est caractrise par le nombre de priodes dhorloge (ou microcycles)
quelle utilise (donne fournie par le fabricant du microprocesseur). Exemple : horloge 5 MHz,
priode T = 1/f = 0, 2 s. Si linstruction sexcute en 3 microcycles, la dure dexcution de
linstruction est : 3 0,2 = 0, 6 s. Lhorloge est constitue par un oscillateur quartz dont les
circuits peuvent tre internes ou externes au microprocesseur.
La figure suivante montre la structure complte dun microprocesseur simple : pour
fonctionner, un microprocesseur ncessite donc au minimum les lments suivants :

Figure n12 : Structure complte dun microprocesseur.


IV. Les mmoires et les microprocesseurs :
IV.1. Mmoires ROM et RAM :
On distingue deux types de mmoires :
Les mmoires vives (RAM : Random Access Memory) ou mmoires volatiles. Elles
perdent leur contenu en cas de coupure dalimentation. Elles sont utilises pour stocker
temporairement des donnes et des programmes. Elles peuvent tre lues et crites par le
microprocesseur ;
Les mmoires mortes (ROM : Read Only Memory) ou mmoires non volatiles. Elles
conservent leur contenu en cas de coupure dalimentation. Elles ne peuvent tre que lues par
le microprocesseur (pas de possibilit dcriture). On les utilise pour stocker des donnes et
des programmes de manire dfinitive.
Les mmoires sont caractrises par leur capacit : nombre total de cases mmoire
contenues dans un mme botier.
IV.2. Schma fonctionnel dune mmoire :

Figure n13 : Schma fonctionnel dune mmoire.

Messaoudi K. - 2011/2012

Informatique Industrielle 1

ME17

Le nombre de lignes dadresses dpend de la capacit de la mmoire : n lignes dadresses


permettent dadresser 2n cases mmoire : 8 bits dadresses permettent dadresser 256 octets, 16 bits
dadresses permettent dadresser 65536 octets (= 64 Ko), ...etc. Exemple : mmoire RAM 6264,
capacit = 8K8 bits : 13 broches dadresses A0 `a A12, 213 = 8192 = 8 Ko.
IV.3. Interfaage microprocesseur/mmoire :

Figure n14 : Interfaage microprocesseur/mmoire.


Reprsentation condense (plus pratique) :

Figure n15 : Reprsentation condense de linterfaage microprocesseur/mmoire.


IV.4. Chronogrammes de lecture/criture en mmoire :
Une caractristique importante des mmoires est leur temps daccs : cest le temps qui
scoule entre linstant o ladresse de la case mmoire est prsente sur le bus dadresses et celui
o la mmoire place la donne demande sur le bus de donnes. Ce temps varie entre 50ns
(mmoires rapides) et 300ns (mmoires lentes).

Messaoudi K. - 2011/2012

Informatique Industrielle 1

ME17

Figure n16 : Chronogrammes de lecture/criture en mmoire.


IV.5. Classification des mmoires
Jusqu la fin des annes 1970, on utilisait des mmoires tores magntiques, lentes et de
faibles capacits. Actuellement, on nutilise plus que des mmoires semi-conducteurs.

Mmoires mortes :
ROM : Read Only Memory. Mmoire lecture seule, sans criture. Son contenu est
programm une fois pour toutes par le constructeur. Avantage : faible cot. Inconvnient :
ncessite une production en trs grande quantit.
PROM: Programmable Read Only Memory. ROM programmable une seule fois par
lutilisateur (ROM OTP : One Time Programming) en faisant sauter des fusibles. Ncessite
un programmateur spcialis : application dune tension de programmation (21 ou 25 V)
pendant 20 ms.
EPROM : Erasable PROM, appele aussi UVPROM. ROM programmable lectriquement
avec un programmateur et effaable par exposition un rayonnement ultraviolet pendant 30
minutes. Famille 27nnn, exemple : 2764 (8 Ko), 27256 (32 Ko). Avantage : reprogrammable
par lutilisateur.
EEPROM : Electrically Erasable PROM. ROM programmable et effaable lectriquement.
Lecture vitesse normale ( 100 ns). Ecriture (= effacement) trs lente ( 10 ms).
Application : les EEPROM contiennent des donnes qui peuvent tre modifies de temps en
temps, exemple : paramtres de configuration des ordinateurs. Avantage : programmation
sans extraction de la carte et sans programmateur. Inconvnient : cot lev.
Mmoires vives :
SRAM : Static Random Access Memory. Mmoire statique accs alatoire, base de
bascules semi-conducteurs deux tats (bascules RS). Famille 62nnn, exemple : 62128
(16 Ko). Avantage : trs rapide, simple dutilisation. Inconvnient : compliqu raliser.
DRAM : Dynamic RAM. Base sur la charge de condensateurs : condensateur charg = 1,
condensateur dcharg = 0. Avantage : intgration leve, faible cot. Inconvnient :
ncessite un rafrachissement priodique cause du courant de fuite des condensateurs.
Application : ralisation de la mmoire vive des ordinateurs (barrettes mmoire SIMM :
Single In-line Memory module).
Messaoudi K. - 2011/2012

Informatique Industrielle 1

ME17

Chapitre II : Le microprocesseur Intel 8086


I. Description physique du 8086 :
Le microprocesseur Intel 8086 est un microprocesseur 16 bits, apparu en 1978. Cest le
premier microprocesseur de la famille Intel 80x86 (8086, 80186, 80286, 80386, 80486, Pentium I,
PII, ...). Il se prsente sous la forme dun botier DIP (Dual In-line Package) 40 broches :

Botier DIP du microprocesseur 8086


Schma fonctionnel du 8086
Figure n1 : Botier DIP et schma fonctionnel du microprocesseur 8086.
II. Description et utilisation des signaux du 8086 :
CLK : entre du signal dhorloge qui cadence le fonctionnement du microprocesseur. Ce
signal provient dun gnrateur dHorloge : le 8284.

Figure n2 : Gnrateur dHorloge (8284) du microprocesseur 8086.


RESET : entre de remise zro du microprocesseur. Lorsque cette entre est mise ltat
haut pendant au moins 4 priodes dhorloge, le microprocesseur est rinitialis : il va excuter
linstruction se trouvant ladresse FFFF0H (adresse de bootstrap). Le signal de RESET est
fourni par le gnrateur dhorloge.
READY : entre de synchronisation avec la mmoire. Ce signal provient galement du
gnrateur dhorloge.
TEST : entre de mise en attente du microprocesseur dun vnement extrieur.
MN/MX : entre de choix du mode de fonctionnement du microprocesseur :
Mode minimum (MN/MX = 1) : le 8086 fonctionne de manire autonome, il gnre luimme le bus de commande (RD, WR, ...) ;
Mode maximum (MN/MX=0) : Ces signaux de commande sont produits par un
contrleur de bus, le 8288. Ce mode permet de raliser des systmes multiprocesseurs.

Messaoudi K. - 2011/2012

Informatique Industrielle 1

ME17

NMI et INTR : entres de demande dinterruption. INTR : interruption normale, NMI (Non
Maskable Interrupt) : interruption prioritaire.
INTA : Interrupt Acknowledge, indique que le microprocesseur accepte linterruption.
HOLD et HLDA : signaux de demande daccord daccs direct la mmoire (DMA).
S0 S7 : signaux dtat indiquant le type dopration en cours sur le bus.
A16/S3 A19/S6 : 4 bits de poids fort du bus dadresses, multiplexs avec 4 bits dtat.
AD0 AD15 : 16 bits de poids faible du bus dadresses, multiplexs avec 16 bits de donnes.
Le bus A/D est multiplex (multiplexage temporel) do la ncessit dun dmultiplexage
pour obtenir sparment les bus dadresses et de donnes :
16 bits de donnes (microprocesseur 16 bits) ;
20 bits dadresses, do 220 = 1 Mga adresses dans lespace mmoire adressable par le
8086.
Chronogramme du bus A/D :

Figure n3 : Chronogramme du bus A/D du microprocesseur 8086.


Le dmultiplexage des signaux AD0 AD15 (ou A16/S3 A19/S6) se fait en mmorisant
ladresse lorsque celle-ci est prsente sur le bus A/D, laide dun verrou (latch), ensemble de
bascules D. La commande de mmorisation de ladresse est gnre par le microprocesseur : cest
le signal ALE, Address Latch Enable.

Figure n4 : Circuit de dmultiplexage A/D du microprocesseur 8086.


Fonctionnement :
si ALE = 1, le verrou est transparent (Q = D) ;
si ALE = 0, mmorisation de la dernire valeur de D sur les sorties Q;
les signaux de lecture (RD) ou dcriture (WR) ne sont gnrs par le microprocesseur que
lorsque les donnes sont prsentes sur le bus A/D.

Messaoudi K. - 2011/2012

10

Informatique Industrielle 1

ME17

Exemples de bascules D : circuits 8282, 74373, 74573.

Figure n5 : Exemples de bascules D : circuits 8282.


RD : Read, signal de lecture dune donne.
WR : Write, signal dcriture dune donne.
M/IO : Memory/Input-Output, indique si le 8086 adresse la mmoire (M/IO = 1) ou les
entres/sorties (M/IO = 0).
DEN : Data Enable, indique que des donnes sont en train de circuler sur le bus A/D
(quivalent de ALE pour les donnes).
DT/R : Data Transmit/Receive, indique le sens de transfert des donnes :
DT/R = 1 : donnes mises par le microprocesseur (criture) ;
DT/R = 0 : donnes reues par le microprocesseur (lecture).

Figure n6 : Chronogramme de bascules D.


Les signaux DEN et DT/R sont utiliss pour la commande de tampons de bus (Buffers)
permettant damplifier le courant fourni par le microprocesseur sur le bus de donnes.
Exemples de tampons de bus : circuits transmetteurs bidirectionnels 8286 ou 74245.

Figure n7 : Circuits transmetteurs bidirectionnels 8286 ou 74245.

Messaoudi K. - 2011/2012

11

Informatique Industrielle 1

ME17

BHE : Bus High Enable, signal de lecture de loctet de poids fort du bus de donnes. Le 8086
possde un bus dadresses sur 20 bits, do la capacit dadressage de 1 Mo ou 512 Kmots de
16 bits (bus de donnes sur 16 bits).
Le mga-octet adressable est divis en deux banques de 512 Ko chacune : la banque
infrieure (ou paire) et la banque suprieure (ou impaire). Ces deux banques sont
slectionnes par :
A0 pour la banque paire qui contient les octets de poids faible ;
BHE pour la banque impaire qui contient les octets de poids fort.

Figure n8 : Banque infrieure (paire) et la banque suprieure (impaire) .


Seuls les bits A1 A19 servent dsigner une case mmoire dans chaque banque de 512
Ko. Le microprocesseur peut ainsi lire et crire des donnes sur 8 bits ou sur 16 bits :
BHE
A0
Octets transfrs
0
0
les deux octets (mot complet)
0
1
octet fort (adresse impaire)
1
0
octet faible (adresse paire)
1
1
aucun octet
Remarque : Le 8086 ne peut lire une donne sur 16 bits en une seule fois, uniquement si loctet de
poids fort de cette donne est rang une adresse impaire et loctet de poids faible une adresse
paire (alignement sur les adresses paires), sinon la lecture de cette donne doit se faire en deux
oprations successives, do une augmentation du temps dexcution du transfert d un mauvais
alignement des donnes.
Ralisation des deux banques avec plusieurs botiers mmoire :

Messaoudi K. - 2011/2012

12

Informatique Industrielle 1

ME17

Figure n9 : Ralisation des deux banques avec plusieurs botiers mmoire.


Cration du bus systme du 8086 :

Figure n10 : Cration du bus systme du 8086.


III. Organisation interne du 8086 :
Le 8086 est constitu de deux units fonctionnant en parallle :
Lunit dexcution (EU : Excution Unit) ;
Lunit dinterface de bus (BIU : Bus Interface Unit).

Messaoudi K. - 2011/2012

13

Informatique Industrielle 1

ME17

Figure n11 : Lunit dexcution et lunit dinterface du 8086.


Rle des deux units :
Lunit dinterface de bus (BIU) recherche les instructions en mmoire et les range dans une
file dattente ;
Lunit dexcution (EU) excute les instructions contenues dans la file dattente.
Les deux units fonctionnent simultanment, do une acclration du processus dexcution
dun programme (fonctionnement selon le principe du pipe-line).
Le microprocesseur 8086 contient 14 registres rpartis en 4 groupes :
Registres gnraux : 4 registres sur 16 bits.
AX = (AH,AL) ;
BX = (BH,BL) ;
CX = (CH,CL) ;
DX = (DH,DL).
Ils peuvent tre galement considrs comme 8 registres sur 8 bits. Ils servent contenir
temporairement des donnes. Ce sont des registres gnraux mais ils peuvent tre utiliss pour des
oprations particulires. Exemple : AX = accumulateur, CX = compteur.
Registres de pointeurs et dindex : 4 registres sur 16 bits.
Pointeurs :
SP : Stack Pointer, pointeur de pile (la pile est une zone de sauvegarde de donnes en
cours dexcution dun programme) ;
BP : Base Pointer, pointeur de base, utilis pour adresser des donnes sur la pile.
Index :
SI : Source Index ;
DI : Destination Index.
Ils sont utiliss pour les transferts de chanes doctets entre deux zones mmoire. Les
pointeurs et les index contiennent des adresses de cases mmoire.
Pointeur dinstruction et indicateurs (flags) : 2 registres sur 16 bits.
Le pointeur dinstruction : IP, contient ladresse de la prochaine instruction excuter.
Le registre des indicateurs (flags)

Messaoudi K. - 2011/2012

14

Informatique Industrielle 1

ME17

C : indicateur de retenue (carry) ;


P : indicateur de parit ;
A : indicateur de retenue auxiliaire ;
Z : indicateur de zro ;
S : indicateur de signe ;
T : indicateur dexcution pas pas (trap) ;
I : indicateur dautorisation dinterruption ;
D : indicateur de dcrmentation ;
O : indicateur de dpassement (overflow).
Figure n12 : Le registre falgs du 8086.
Registres de segments : 4 registres sur 16 bits.
CS : Code Segment, registre de segment de code ;
DS : Data Segment, registre de segment de donnes ;
SS : Stack Segment, registre de segment de pile ;
ES : Extra Segment, registre de segment supplmentaire pour les donnes ;
Les registres de segments, associs aux pointeurs et aux index, permettent au
microprocesseur 8086 dadresser lensemble de la mmoire.
IV. Gestion de la mmoire par le 8086 :
Lespace mmoire adressable par le 8086 est de 220 = 1 048 576 octets = 1 Mo (20 bits
dadresses). Cet espace est divis en segments. Un segment est une zone mmoire de 64 Ko (65
536 octets) dfinie par son adresse de dpart qui doit tre un multiple de 16.
Dans une telle adresse, les 4 bits de poids faible sont zro. On peut donc reprsenter
ladresse dun segment avec seulement ses 16 bits de poids fort, les 4 bits de poids faible tant
implicitement 0.
Pour dsigner une case mmoire parmi les 216 = 65 536 contenues dans un segment, il suffit
dune valeur sur 16 bits.
Ainsi, une case mmoire est repre par le 8086 au moyen de deux quantits sur 16 bits :
Ladresse dun segment ;
Un dplacement ou offset (appel aussi adresse effective) dans ce segment.
Cette mthode de gestion de la mmoire est appele segmentation de la mmoire.

Figure n13 : Segmentation de mmoire du 8086.


La donne dun couple (segment,offset) dfinit une adresse logique, note sous la forme
segment : offset.
Ladresse dune case mmoire donne sous la forme dune quantit sur 20 bits (5 digits
hexa) est appele adresse physique car elle correspond la valeur envoye rellement sur le bus
dadresses A0 - A19.

Messaoudi K. - 2011/2012

15

Informatique Industrielle 1

ME17

Figure n14 : Correspondance entre adresse logique et adresse physique.


Ainsi, ladresse physique se calcule par lexpression :
Adresse physique = 16 segment + offset
Car le fait dinjecter 4 zros en poids faible du segment revient effectuer un dcalage de 4
positions vers la gauche, cest dire une multiplication par 24 = 16.
A un instant donn, le 8086 a accs 4 segments dont les adresses se trouvent dans les
registres de segment CS, DS, SS et ES. Le segment de code contient les instructions du programme,
le segment de donnes contient les donnes manipules par le programme, le segment de pile
contient la pile de sauvegarde et le segment supplmentaire peut aussi contenir des donnes.
Le registre CS est associ au pointeur dinstruction IP, ainsi la prochaine instruction
excuter se trouve ladresse logique CS : IP.

Figure n15 :.
De mme, les registres de segments DS et ES peuvent tre associs un registre dindex.
Exemple : DS : SI, ES : DI. Le registre de segment de pile peut tre associ aux registres de
pointeurs : SS : SP ou SS : BP. Mmoire accessible par le 8086 un instant donn :

Figure n16 : .

Messaoudi K. - 2011/2012

16

Informatique Industrielle 1

ME17

Remarque : les segments ne sont pas ncessairement distincts les uns des autres, ils peuvent se
chevaucher ou se recouvrir compltement.

Figure n17 : .
Le nombre de segments utilis dfinit le modle mmoire du programme. Contenu des
registres aprs un RESET du microprocesseur :
IP = 0000H
CS = FFFFH
DS = 0000H
ES = 0000H
SS = 0000H
Puisque CS contient la valeur FFFFH et IP la valeur 0000H, la premire instruction excute
par le 8086 se trouve donc ladresse logique FFFFH : 0000H, correspondant ladresse physique
FFFF0H (bootstrap). Cette instruction est gnralement un saut vers le programme principal qui
initialise ensuite les autres registres de segment.

Messaoudi K. - 2011/2012

17

Informatique Industrielle 1

ME17

Chapitre III : La programmation en assembleur du microprocesseur 8086


I. Gnralits :
Chaque microprocesseur reconnat un ensemble dinstructions appel jeu dinstructions
(Instruction Set) fix par le constructeur. Pour les microprocesseurs classiques, le nombre
dinstructions reconnues varie entre 75 et 150 (microprocesseurs CISC : Complex Instruction Set
Computer). Il existe aussi des microprocesseurs dont le nombre dinstructions est trs rduit
(microprocesseurs RISC : Reduced Instruction Set Computer) : entre 10 et 30 instructions,
permettant damliorer le temps dexcution des programmes.
Une instruction est dfinie par son code opratoire, valeur numrique binaire difficile
manipuler par ltre humain. On utilise donc une notation symbolique pour reprsenter les
instructions : les mnmoniques. Un programme constitu de mnmoniques est appel programme
en assembleur.
Les instructions peuvent tre classes en groupes :
Instructions de transfert de donnes ;
Instructions arithmtiques ;
Instructions logiques ;
Instructions de branchement ...
II. Les instructions de transfert :
Elles permettent de dplacer des donnes dune source vers une destination :
Registre vers mmoire ;
Registre vers registre ;
Mmoire vers registre.
Syntaxe : MOV destination, source
Remarques :
- Le microprocesseur 8086 nautorise pas les transferts de mmoire vers mmoire (pour ce
faire, il faut passer par un registre intermdiaire).
- MOV est labrviation du verbe to move : dplacer.
II.1. Mode dadressage :
Il existe diffrentes faons de spcifier ladresse dune case mmoire dans une instruction
(ce sont les modes dadressage).
Exemples de modes dadressage simples :
mov ax,bx : charge le contenu du registre BX dans le registre AX. Dans ce cas, le transfert
se fait de registre registre : adressage par registre ;
mov al,12H : charg le registre AL avec la valeur 12H. La donne est fournie
immdiatement avec linstruction : adressage immdiat.
mov bl,[1200H] : transfre le contenu de la case mmoire dadresse effective (offset) 1200H
vers le registre BL. Linstruction comporte ladresse de la case mmoire o se trouve la
donne : adressage direct. Ladresse effective reprsente loffset de la case mmoire dans
le segment de donnes (segment dont ladresse est contenue dans le registre DS) : segment
par dfaut.

Figure n1 : adressage direct.


Messaoudi K. - 2011/2012

18

Informatique Industrielle 1

ME17

On peut changer le segment lors dun adressage direct en ajoutant un prfixe de segment,
exemple : mov bl,es :[1200H]. On parle alors de forage de segment.

Figure n2 : Forage de segment.


Remarque : Dans le cas de ladressage immdiat de la mmoire, il faut indiquer le format de la
donne : octet ou mot (2 octets) car le microprocesseur 8086 peut manipuler des donnes sur 8 bits
ou 16 bits. Pour cela, on doit utiliser un spcificateur de format :
mov byte ptr [1100H],65H : transfre la valeur 65H (sur 1 octet) dans la case mmoire
doffset 1100H ;
mov word ptr [1100H],65H : transfre la valeur 0065H (sur 2 octets) dans les cases mmoire
doffset 1100H et 1101H.

Figure n3 : Spcification de format lors de ladressage direct.


Remarque : Les microprocesseurs Intel rangent loctet de poids faible dune donne sur plusieurs
octets ladresse la plus basse (format Little Endian).
II.2. Modes dadressage volus :
Adressage bas : loffset est contenu dans un registre de base BX ou BP.
Exemples :
- mov al,[bx] : transfre la donne dont loffset est contenu dans le registre de base
BX vers le registre AL. Le segment associ par dfaut au registre BX est le segment
de donnes : on dit que ladressage est bas sur DS;
- mov al,[bp] : le segment par dfaut associ au registre de base BP est le segment de
pile. Dans ce cas, ladressage est bas sur SS.

Figure n4 : Adressage bas.


adressage index : semblable ladressage bas, sauf que loffset est contenu dans un
registre dindex SI ou DI, associs par dfaut au segment de donnes.
Exemples :
- mov al,[si] : charge le registre AL avec le contenu de la case mmoire dont loffset
est contenu dans SI ;

Messaoudi K. - 2011/2012

19

Informatique Industrielle 1

ME17

mov [di],bx : charge les cases mmoire doffset DI et DI + 1 avec le contenu du


registre BX.
Remarque : Une valeur constante peut ventuellement tre ajoute aux registres de base ou dindex
pour obtenir loffset. Exemple :
mov [si+100H],ax
qui peut aussi scrire
mov [si][100H],ax
ou encore
mov 100H[si],ax
Les modes dadressage bass ou indexs permettent la manipulation de tableaux rangs en
mmoire. Exemple :
mov si,0
mov word ptr table[si],1234H
mov si,2
mov word ptr table[si],5678H
Dans cet exemple, table reprsente loffset du premier lment du tableau et le registre SI
joue le rle dindice de tableau :
-

Figure n5 : Adressage index.


Adressage bas et index : loffset est obtenu en faisant la somme dun registre de base,
dun registre dindex et dune valeur constante. Exemple :
mov ah,[bx+si+100H]
Ce mode dadressage permet ladressage de structures de donnes complexes :
matrices, enregistrements, ... Exemple :
mov bx,10
mov si,15
mov byte ptr matrice[bx][si],12H
Dans cet exemple, BX et SI jouent respectivement le rle dindices de ligne et de
colonne dans la matrice.
III. Les instructions arithmtiques :
Les instructions arithmtiques de base sont laddition, la soustraction, la multiplication et
la division qui incluent diverses variantes. Plusieurs modes dadressage sont possibles.
III.1. Laddition :
ADD oprande1,oprande2
Lopration effectue est : oprande1 oprande1 + oprande2.
Exemples :
add ah,[1100H] : ajoute le contenu de la case mmoire doffset 1100H laccumulateur AH
(adressage direct) ;
add ah,[bx] : ajoute le contenu de la case mmoire pointe par BX laccumulateur AH
(adressage bas) ;
add byte ptr [1200H],05H : ajoute la valeur 05H au contenu de la case mmoire doffset
1200H (adressage immdiat).
III.2. La soustraction :
SUB oprande1,oprande2
Lopration effectue est : oprande1 oprande1 oprande2.

Messaoudi K. - 2011/2012

20

Informatique Industrielle 1

ME17

III.3. La multiplication :
MUL oprande, o oprande est un registre ou une case mmoire.
Cette instruction effectue la multiplication du contenu de AL par un oprande sur 1 octet ou
du contenu de AX par un oprande sur 2 octets. Le rsultat est plac dans AX si les donnes
multiplier sont sur 1 octet (rsultat sur 16 bits), dans (DX,AX) si elles sont sur 2 octets (rsultat sur
32 bits).
Exemples :
mov al,51
mov bl,32
mul bl
AX = 51 32
mov ax,4253
mov bx,1689
mul bx
(DX, AX) = 4253 1689
mov al,43
mov byte ptr [1200H],28
mul byte ptr [1200H]
AX = 43 28
mov ax,1234
mov word ptr [1200H],5678
mul word ptr [1200H]
(DX, AX) = 1234 5678
III.4. La division :
DIV oprande, o oprande est un registre ou une case mmoire.
Cette instruction effectue la division du contenu de AX par un oprande sur 1 octet ou le
contenu de (DX,AX) par un oprande sur 2 octets. Rsultat : si loprande est sur 1 octet, alors
AL = quotient et AH = reste ; si loprande est sur 2 octets, alors AX = quotient et DX = reste.
Exemples :
mov ax,35
mov bl,10
div bl
AL = 3 (quotient) et AH = 5 (reste)
mov dx,0
mov ax,1234
mov bx,10
div bx
AX = 123 (quotient) et DX = 4 (reste)
III.5. Autres instructions arithmtiques :
ADC : addition avec retenue ;
SBB : soustraction avec retenue ;
INC : incrmentation dune unit ;
DEC : dcrmentation dune unit ;
IMUL : multiplication signe ;
IDIV : division signe.
IV. Les instructions logiques :
Ce sont des instructions qui permettent de manipuler des donnes au niveau des bits. Les
oprations logiques de base sont :
ET;
OU;

Messaoudi K. - 2011/2012

21

Informatique Industrielle 1

ME17

OU exclusif ;
Complment 1;
Complment 2;
Dcalages et rotations.
Les diffrents modes dadressage sont disponibles.
IV.1. ET logique :
AND oprande1,oprande2
Lopration effectue est : oprande1 oprande1 ET oprande2.
Application : masquage de bits pour mettre zro certains bits dans un mot.
Exemple 01 :
mov al,10010110B
mov bl,11001101B
and al, bl
AL= 1 0 0 1 0 1 1 0
BL= 1 1 0 0 1 1 0 1
AL= 1 0 0 0 0 1 0 0
Exemple 02 : masquage des bits 0, 1, 6 et 7 dans un octet :
76543210
01010111
0 0 1 1 1 1 0 0 masque
00010100
IV.2. OU logique :
OR oprande1,oprande2
Lopration effectue est : oprande1 oprande1 OU oprande2.
Application : mise 1 dun ou de plusieurs bits dans un mot.
Exemple : dans le mot 10110001B on veut mettre 1 les bits 1 et 3 sans modifier les autres bits.
76543210
10110001
0 0 0 0 1 0 1 0 masque
10111011
Les instructions correspondantes peuvent scrire :
mov ah,10110001B
or ah,00001010B
IV.3. Complment 1 :
NOT oprande
Lopration effectue est : oprande NOT(oprande).
Exemple :
mov al,10010001B
not al
AL = 10010001B
AL = 01101110B
IV.4. Complment 2 :
NEG oprande
Lopration effectue est : oprande NOT(oprande) + 1.
Exemple :
mov al,25
mov bl,12
neg bl
add al,bl
AL = 25 + (12) = 13

Messaoudi K. - 2011/2012

22

Informatique Industrielle 1

ME17

IV.5. OU exclusif :
XOR oprande1,oprande2
Lopration effectue est : oprande1 oprande1 oprande2.
Exemple : mise zro dun registre :
mov al,25
xor al,al
AL = 0
IV.6. Instructions de dcalages et de rotations :
Ces instructions dplacent dun certain nombre de positions les bits dun mot vers la gauche
ou vers la droite.
Dans les dcalages, les bits qui sont dplacs sont remplacs par des zros. Il y a les
dcalages logiques (oprations non signes) et les dcalages arithmtiques (oprations signes).
Dans les rotations, les bits dplacs dans un sens sont rinjects de lautre ct du mot.
IV.6.1. Dcalage logique vers la droite (Shift Right) :
SHR oprande,n
Cette instruction dcale loprande de n positions vers la droite.
Exemple 01 :
mov al,11001011B
shr al,1

entre dun 0 la place du bit de poids fort ; le bit sortant passe travers
lindicateur de retenue CF.
Remarque : si le nombre de bits dcaler est suprieur 1, ce nombre doit tre plac dans le
registre CL ou CX.
Exemple 02 : dcalage de AL de trois positions vers la droite :
mov cl,3
shr al,cl
IV.6.2. Dcalage logique vers la gauche (Shift Left) :
SHL oprande,n
Cette instruction dcale loprande de n positions vers la droite.
Exemple :
mov al,11001011B
shl al,1

entre dun 0 la place du bit de poids faible ; le bit sortant passe travers
lindicateur de retenue CF.
Mme remarque que prcdemment si le nombre de positions dcaler est suprieur 1.
IV.6.3. Dcalage arithmtique vers la droite :
SAR oprande,n
Ce dcalage conserve le bit de signe bien que celui-ci soit dcal.
Exemple :
mov al,11001011B
sar al,1

Messaoudi K. - 2011/2012

23

Informatique Industrielle 1

ME17

le bit de signe est rinject.


IV.6.4. Dcalage arithmtique vers la gauche :
SAR oprande,n
Identique au dcalage logique vers la gauche.
IV.6.5. Applications des instructions de dcalage :
Cadrage droite dun groupe de bits.
Exemple : on veut avoir la valeur du quartet de poids fort du registre AL :
mov al,11001011B
mov cl,4
shr al,cl
AL = 00001100B
Test de ltat dun bit dans un mot.
Exemple : on veut dterminer ltat du bit 5 de AL :
mov cl,6
shr al,cl
ou
mov cl,3
shl al,cl
avec un dcalage de 6 positions vers la droite ou 4 positions vers la
gauche, le bit 5 de AL est transfr dans lindicateur de retenue CF. Il suffit donc de
tester cet indicateur.
Multiplication ou division par une puissance de 2 : Un dcalage droite revient faire
une division par 2 et un dcalage gauche, une multiplication par 2.
Exemple :
mov al,48
mov cl,3
shr al,cl
AL = 48/23 = 6
IV.6.6. Rotation droite (Rotate Right) :
ROR oprande,n
Cette instruction dcale loprande de n positions vers la droite et rinjecte par la gauche les
bits sortant.
Exemple :
mov al,11001011B
ror al,1

rinjection du bit sortant qui est copi dans lindicateur de retenue CF.
IV.6.7. Rotation gauche (Rotate Left) :
ROL oprande,n
Cette instruction dcale loprande de n positions vers la gauche et rinjecte par la droite les
bits sortant.

Messaoudi K. - 2011/2012

24

Informatique Industrielle 1

ME17

Exemple :
mov al,11001011B
rol al,1

rinjection du bit sortant qui est copi dans lindicateur de retenue CF.
IV.6.8. Rotation droite avec passage par lindicateur de retenue (Rotate Right through Carry)
RCR oprande,n
Cette instruction dcale loprande de n positions vers la droite en passant par lindicateur
de retenue CF.
Exemple :
mov al,11001011B
rcr al,1

le bit sortant par la droite est copi dans lindicateur de retenue CF et la valeur
prcdente de CF est rinjecte par la gauche.
IV.6.9. Rotation gauche avec passage par lindicateur de retenue (Rotate Left through Carry) :
RCL oprande,n
Cette instruction dcale loprande de n positions vers la gauche en passant par lindicateur
de retenue CF.
Exemple :
mov al,11001011B
rcl al,1

le bit sortant par la gauche est copi dans lindicateur de retenue CF et la valeur
prcdente de CF est rinjecte par la droite.
V. Les instructions de branchement :
Les instructions de branchement (ou saut) permettent de modifier lordre dexcution des
instructions du programme en fonction de certaines conditions. Il existe 3 types de saut :
Saut inconditionnel ;
Sauts conditionnels ;
Sppel de sous-programmes.
V.1. Instruction de saut inconditionnel : JMP label
Cette instruction effectue un saut (jump) vers le label spcifi. Un label (ou tiquette) est
une reprsentation symbolique dune instruction en mmoire :

Messaoudi K. - 2011/2012

25

Informatique Industrielle 1

ME17

Exemple :

Remarque : linstruction JMP ajoute au registre IP (pointeur dinstruction) le nombre doctets


(distance) qui spare linstruction de saut de sa destination. Pour un saut en arrire, la distance est
ngative (code en complment 2).
V.2. Instructions de sauts conditionnels : condition label
Un saut conditionnel nest excut que si une certaine condition est satisfaite, sinon
lexcution se poursuit squentiellement linstruction suivante.
La condition du saut porte sur ltat de lun ou des indicateurs dtat (flags) du
microprocesseur :

Remarque1 : les indicateurs sont positionns en fonction du rsultat de la dernire opration.


Exemple1 :

Remarque2 : il existe un autre type de saut conditionnel, les sauts arithmtiques. Ils suivent en
gnral linstruction de comparaison : CMP oprande1,oprande2

Exemple2 :

Messaoudi K. - 2011/2012

26

Informatique Industrielle 1

ME17

V.3. Exemple dapplication des instructions de sauts conditionnels :


On veut additionner deux nombres signs N1 et N2 se trouvant respectivement aux offsets
1100H et 1101H. Le rsultat est rang loffset 1102H sil est positif, loffset 1103H sil est
ngatif et loffset 1104H sil est nul :

VI. Appel de sous-programmes :


Pour viter la rptition dune mme squence dinstructions plusieurs fois dans un
programme, on rdige la squence une seule fois en lui attribuant un nom (au choix) et on lappelle
lorsquon en a besoin. Le programme appelant est le programme principal. La squence appele
est un sous-programme ou procdure.
VI.1. Ecriture dun sous-programme :

Remarque : une procdure peut tre de type NEAR si elle se trouve dans le mme segment ou de
type FAR si elle se trouve dans un autre segment. Exemple :
VI.2. Appel dun sous-programme par le programme principal : CALL procdure

Lors de lexcution de linstruction CALL, le pointeur dinstruction IP est charg avec


ladresse de la premire instruction du sous-programme. Lors du retour au programme appelant,
linstruction suivant le CALL doit tre excute, cest--dire que IP doit tre recharg avec
ladresse de cette instruction.

Messaoudi K. - 2011/2012

27

Informatique Industrielle 1

ME17

Avant de charger IP avec ladresse du sous-programme, ladresse de retour au programme


principal, cest--dire le contenu de IP, est sauvegarde dans une zone mmoire particulire appele
pile. Lors de lexcution de linstruction RET, cette adresse est rcupre partir de la pile et
recharge dans IP, ainsi le programme appelant peut se poursuivre.
VI.3. Fonctionnement de la pile :
La pile est une zone mmoire fonctionnant en mode LIFO (Last In First Out : dernier
entre, premier sortie). Deux oprations sont possibles sur la pile :
Empiler une donne : placer la donne au sommet de la pile ;
Dpiler une donne : lire la donne se trouvant au sommet de la pile.
Le sommet de la pile est repr par un registre appel pointeur de pile (SP : Stack Pointer)
qui contient ladresse de la dernire donne empile.
La pile est dfinie dans le segment de pile dont ladresse de dpart est contenue dans le
registre SS.

Remarque :
La pile et le programme croissent en sens inverse pour diminuer le risque de collision entre
le code et la pile dans le cas o celle-ci est place dans le mme segment que le code (SS = CS).
Lors de lappel un sous-programme, ladresse de retour au programme appelant (contenu
de IP) est empile et le pointeur de pile SP est automatiquement dcrment. Au retour du sousprogramme, le pointeur dinstruction IP est recharg avec la valeur contenue sommet de la pile et
SP est incrment.

La pile peut galement servir sauvegarder le contenu de registres qui ne sont pas
automatiquement sauvegards lors de lappel `a un sous programme :
Instruction dempilage : PUSH oprande
Instruction de dpilage : POP oprande
o oprande est un registre ou une donne sur 2 octets (on ne peut empiler que des mots de
16 bits).
Exemple :

Messaoudi K. - 2011/2012

28

Informatique Industrielle 1

ME17

Remarque : la valeur de SP doit tre initialise par le programme principal avant de pouvoir
utiliser la pile.
VI.4. Utilisation de la pile pour le passage de paramtres :
Pour transmettre des paramtres une procdure, on peut les placer sur la pile avant lappel
de la procdure, puis celle-ci les rcupre en effectuant un adressage bas de la pile en utilisant le
registre BP.
Exemple :
Soit une procdure effectuant la somme de deux nombres et retournant le rsultat dans le
registre AX :
Programme principal :

Procdure somme :

Linstruction ret 4 permet de retourner au programme principal et dincrmenter le pointeur


de pile de 4 units pour dpiler les paramtres afin de remettre la pile dans son tat initial.
Etat de la pile :

VII. Mthodes de programmation :


VII.1. Etapes de la ralisation dun programme :
Dfinir le problme rsoudre : que faut-il faire exactement ?
Dterminer des algorithmes, des organigrammes : comment faire ? Par quoi commencer,
puis poursuivre ?
Rdiger le programme (code source) :
- Utilisation du jeu dinstructions (mnmoniques) ;
- cration de documents explicatifs (documentation).
Tester le programme en rel ;
Corriger les erreurs (bugs) ventuelles : dboguer le programme puis refaire des tests
jusqu obtention dun programme fonctionnant de manire satisfaisante.
VII.2. Langage machine et assembleur :
Langage machine : codes binaires correspondant aux instructions ;
Assembleur : logiciel de traduction du code source crit en langage assembleur
(mnmoniques).

Messaoudi K. - 2011/2012

29

Informatique Industrielle 1

ME17

VII.3. Ralisation pratique dun programme :


Rdaction du code source en assembleur laide dun diteur (logiciel de traitement de texte
ASCII) :
- edit sous MS-DOS,
- notepad (bloc-note) sous Windows,
Assemblage du code source (traduction des instructions en codes binaires) avec un
assembleur :
- MASM de Microsoft,
- TASM de Borland,
- A86 disponible en shareware sur Internet, ...
- SIM 8086
Pour obtenir le code objet : code machine excutable par le microprocesseur ;
Chargement en mmoire centrale et excution : rle du systme dexploitation (ordinateur)
ou dun moniteur (carte de dveloppement base de microprocesseur).
Pour la mise au point (dbogage) du programme, on peut utiliser un programme daide la
mise au point (comme DEBUG sous MS-DOS) permettant :
Lexcution pas pas;
La visualisation du contenu des registres et de la mmoire ;
La pose de points darrt ...
VII.4. Structure dun fichier source en assembleur :
Pour faciliter la lisibilit du code source en assembleur, on le rdige sous la forme suivante :

VII.5. Directives pour lassembleur :


Origine du programme en mmoire : ORG offset
Exemple : org 1000H
Dfinitions de constantes : nom constante EQU valeur
Exemple : escape equ 1BH
Rservation de cases mmoires :
DB : Define Byte, rservation dun octet ;
DW : Define Word, rservation dun mot (2 octets).
Exemples :

Messaoudi K. - 2011/2012

30

Informatique Industrielle 1

ME17

Chapitre IV : Les interfaces dentres/sorties


I. Dfinitions :
Une interface dentres/sorties est un circuit intgr permettant au microprocesseur de
communiquer avec lenvironnement extrieur (priphriques) : clavier, cran, imprimante, modem,
disques, processus industriel, ...
Les interfaces dE/S sont connectes au microprocesseur travers les bus dadresses, de
donnes et de commandes.

Les points daccs aux interfaces sont appels ports.


Exemples :

Schma synoptique dun circuit dE/S :

II. Adressage des ports dE/S :


Un circuit dE/S possde des registres pour grer les changes avec les priphriques :
Registres de configuration ;
Registres de donnes.
A chaque registre est assign une adresse : le microprocesseur accde un port dE/S en
spcifiant ladresse de lun de ses registres.
Le microprocesseur peut voir les adresses des ports dE/S de deux manires :
Adressage cartographique : les adresses des ports dE/S appartiennent au mme espace
mmoire que les circuits mmoire (on dit que les E/S sont mappes en mmoire) :

Messaoudi K. - 2011/2012

31

Informatique Industrielle 1

ME17

Consquences :
- Lespace dadressage des mmoires diminue ;
- Ladressage des ports dE/S se fait avec une adresse de mme longueur (mme nombre de
bits) que pour les cases mmoires ;
- Toutes les instructions employes avec des cases mmoires peuvent tre appliques aux
ports dE/S : les mmes instructions permettent de lire et crire dans la mmoire et les ports
dE/S, tous les modes dadressage tant valables pour les E/S.
Adressage indpendant : le microprocesseur considre deux espaces distincts :
- Lespace dadressage des mmoires ;
- Lespace dadressage des ports dE/S.
Cest le cas du microprocesseur 8086 :

Consquences :
- Contrairement ladressage cartographique, lespace mmoire total adressable nest pas
diminu ;
- Ladressage des port dE/S peut se faire avec une adresse plus courte (nombre de bits
infrieur) que pour les circuits mmoires ;
- Les instructions utilises pour laccs la mmoire ne sont plus utilisables pour laccs aux
ports dE/S : ceux-ci disposent dinstructions spcifiques ;
- Une mme adresse peut dsigner soit une case mmoire, soit un port dE/S : le
microprocesseur doit donc fournir un signal permettant de diffrencier ladressage de la
mmoire de ladressage des ports dE/S.
Remarque : Ladressage indpendant des ports dE/S nest possible que pour les microprocesseurs
possdant un signal permettant de diffrencier ladressage de la mmoire de ladressage des ports
dE/S ainsi que les instructions spcifiques pour laccs aux ports dE/S. Par contre, ladressage
cartographique est possible pour tous les microprocesseurs.
III. Gestion des ports dE/S par le 8086 :
Le 8086 dispose dun espace mmoire de 1 Mo (adresse dune case mmoire sur 20 bits) et
dun espace dE/S de 64 Ko (adresse dun port dE/S sur 16 bits).
Le signal permettant de diffrencier ladressage de la mmoire de ladressage des ports
dE/S est la ligne M/IO :
- Pour un accs la mmoire, M/IO = 1 ;
- Pour un accs aux ports dE/S, M/IO = 0.
Ce signal est utilis pour valider le dcodage dadresse dans les deux espaces :

Messaoudi K. - 2011/2012

32

Informatique Industrielle 1

ME17

Les instructions de lecture et dcriture dun port dE/S sont respectivement les instructions
IN et OUT. Elles placent la ligne M/IO 0 alors que linstruction MOV place celle-ci 1.
III.1. Lecture dun port dE/S :
- Si ladresse du port dE/S est sur un octet :
IN AL,adresse : lecture dun port sur 8 bits ;
IN AX,adresse : lecture dun port sur 16 bits.
- Si ladresse du port dE/S est sur deux octets :
IN AL,DX : lecture dun port sur 8 bits ;
IN AX,DX : lecture dun port sur 16 bits.
O le registre DX contient ladresse du port dE/S lire.
III.2. Ecriture dun port dE/S :
- Si ladresse du port dE/S est sur un octet :
OUT adresse,AL : criture dun port sur 8 bits ;
OUT adresse,AX : criture dun port sur 16 bits.
- Si ladresse du port dE/S est sur deux octets :
OUT DX,AL : criture dun port sur 8 bits ;
OUT DX,AX : criture dun port sur 16 bits.
O le registre DX contient ladresse du port dE/S crire.
Exemples :
Lecture dun port dE/S sur 8 bits ladresse 300H :
mov dx,300H
in al,dx
Ecriture de la valeur 1234H dans le port dE/S sur 16 bits ladresse 49H :
mov ax,1234H
out 49H,ax
IV. Linterface parallle 8255 :
Le rle dune interface parallle est de transfrer des donnes du microprocesseur vers des
priphriques et inversement, tous les bits de donnes tant envoys ou reus simultanment.

Messaoudi K. - 2011/2012

33

Informatique Industrielle 1

ME17

Le 8255 est une interface parallle programmable : elle peut tre configure en entre et/ou
en sortie par programme.

Brochage du 8255

Schma fonctionnel :

Le 8255 contient 4 registres :


Trois registres contenant les donnes prsentes sur les ports A, B et C;
Un registre de commande pour la configuration des ports A, B et C en entres et/ou en
sorties.
IV.1. Accs aux registres du 8255 :
Les lignes dadresses A0 et A1 dfinissent les adresses des registres du 8255 :

Remarque : Le registre de commande est accessible uniquement en criture, la lecture de ce


registre nest pas autorise.
IV.2. Configuration du 8255 :
Les ports peuvent tre configurs en entres ou en sorties selon le contenu du registre de
commande. De plus le 8255 peut fonctionner selon 3 modes : mode 0, mode 1 ou mode 2.
Le mode 0 est le plus simple : les ports sont configurs en entres/sorties de base. Les
donnes crites dans les registres correspondants sont mmorises sur les lignes de sorties ; ltat
des lignes dentres est recopi dans les registres correspondants et nest pas mmoris.
Les modes 1 et 2 sont plus complexes. Ils sont utiliss pour le dialogue avec des
priphriques ncessitant un asservissement.

Messaoudi K. - 2011/2012

34

Informatique Industrielle 1

ME17

IV.3. Structure du registre de commande :

Connexion du 8255 sur les bus du 8086 : le bus de donnes du 8255 est sur 8 bits alors que
celui du microprocesseur 8086 est sur 16 bits. On peut donc connecter le bus de donnes du 8255
sur les lignes de donnes de poids faible du 8086 (D0 - D7) ou sur celles de poids fort (D8 - D15).
Une donne est envoye (ou reue) par le microprocesseur 8086 :
Sur la partie faible du bus de donnes lorsque ladresse crire (ou lire) est paire :
validation par A0 ;
Sur la partie haute lorsque ladresse est impaire : validation par BHE. Ainsi lun de ces deux
signaux A0 ou BHE doit tre utilis pour slectionner le 8255 :

Consquence : les adresses des registres du 8255 se trouvent des adresses paires
(validation par A0) ou impaires (validation par BHE).
Le dcodeur dadresses dtermine ladresse de base du 8255 ; les lignes A1 et A2
dterminent les adresses des registres du 8255.
Exemple : connexion du 8255 sur la partie faible du bus de donnes du 8086, avec dcodage
dadresses incomplet (les lignes dadresses A3 - A15 ne sont pas toutes utilises) :

IV.4. Dtermination de ladresse du 8255 :

A2 = 0 et A1 = 0 : adresse du port A = adresse de base + 0 = 300H ;


A2 = 0 et A1 = 1 : adresse du port B = adresse de base + 2 = 302H ;
A2 = 1 et A1 = 0 : adresse du port C = adresse de base + 4 = 304H ;
A2 = 1 et A1 = 1 : adresse du registre de commande = adresse de base + 6 = 306H.

Messaoudi K. - 2011/2012

35

Informatique Industrielle 1

ME17

Remarque : le dcodage dadresses tant incomplet, le 8255 apparat dans plusieurs plages
dadresses selon les valeurs des bits dadresses non dcods (A7 - A13 et A12 - A15). Dans cet
exemple, ladresse de base 300H correspond la premire adresse possible (bits dadresses non
dcods tous gaux 0).
Remarque : si on veut que le 8255 possde des adresses conscutives (par exemple 300H, 301H,
302H et 303H), on peut utiliser le schma suivant qui exploite tout le bus de donnes (D0 - D15) du
8086 :

Exemple de programmation : soit le montage suivant :

On veut que la Led sallume lorsquon a la combinaison : K0 = 1 et K1 = 0 et K2 = 1.


Programme :

Messaoudi K. - 2011/2012

36

Informatique Industrielle 1

ME17

V. Linterface srie 8250 :


Une interface srie permet dchanger des donnes entre le microprocesseur et un
priphrique bit par bit.

Avantage : diminution du nombre de connexions (1 fil pour lmission, 1 fil pour la rception).
Inconvnient : vitesse de transmission plus faible que pour une interface parallle.
Il existe deux types de transmissions sries :
Asynchrone : chaque octet peut tre mis ou reu sans dure dtermine entre un octet et le
suivant ;
Synchrone : les octets successifs sont transmis par blocs spars par des octets de
synchronisation.
La transmission asynchrone la plus utilise est celle qui est dfinie par la norme RS232.
Exemple : transmission du caractre E (code ASCII 45H = 01000101B) sous forme srie selon la
norme RS232 :

Ltat 1 correspond une tension ngative comprise entre 9 et 15 V, ltat 0 une tension
positive comprise entre +9 et +15 V. Au repos, la ligne est ltat 1 (tension ngative) ;
Le bit de start marque le dbut de la transmission du caractre ;
Les bits de donnes sont transmis lun aprs lautre en commenant par le bit de poids
faible. Ils peuvent tre au nombre de 5, 6, 7 ou 8. Chaque bit est maintenu sur la ligne
pendant une dure dtermine T. Linverse de cette dure dfinit la frquence de bit =
nombre de bits par secondes = vitesse de transmission. Les vitesses normalises sont : 50,
75, 110, 134.5, 150, 300, 600, 1200, 2400, 4800, 9600 bits/s ;
Le bit de parit (facultatif) est un bit supplmentaire dont la valeur dpend du nombre de
bits de donnes gaux 1. Il est utilis pour la dtection derreurs de transmission ;
Les bits de stop (1, 1.5 ou 2) marquent la fin de la transmission du caractre.
V.1. Principe dune interface srie :

Messaoudi K. - 2011/2012

37

Informatique Industrielle 1

ME17

Un circuit intgr dinterface srie asynchrone sappelle un UART : Universal


Asynchronous Receiver Transmitter) ; une interface srie synchrone/asynchrone est un USART.
V.2. Exemples dinterfaces sries :
8251 (Intel) ;
8250 (National Semiconductor) ;
6850 (Motorola).
Connexion de deux quipements par une liaison srie RS232 : les quipements qui peuvent
tre connects travers une liaison srie RS232 sont de deux types :
Les quipements terminaux de donnes (DTE : Data Terminal Equipment) qui gnrent les
donnes transmettre, exemple : un ordinateur ;
Les quipements de communication de donnes (DCE : Data Communication Equipment)
qui transmettent les donnes sur les lignes de communication, exemple : un modem.
Pour connecter ces quipements, on utilise des connecteurs normaliss DB9 ou DB25 :

Diffrents signaux sont transports par ces connecteurs :

Seuls les 2 signaux TxD et RxD servent transmettre les donnes. Les autres signaux sont
des signaux de contrle de lchange de donnes.
V.3. Connexion entre DTE et DCE :

Dialogue entre DTE et DCE :

(les signaux de contrle sont actifs ltat bas = tension positive)

Messaoudi K. - 2011/2012

38

Informatique Industrielle 1

ME17

Quand le DTE veut transmettre des donnes, il active le signal DTR. Si le DCE est prt
recevoir les donnes, il active le signal DSR puis le signal DCD : la communication peut
dbuter ;
Lorsque le DTE a une donne mettre, il active le signal RTS. Si le DCE peut recevoir la
donne, il active CTS : le DTE envoie la donne sur la ligne TxD;
Si le DCE veut demander une pause dans la transmission, il dsactive CTS : le DTE arrte la
transmission jusqu ce que CTS soit ractiv. Cest un contrle matriel du flux de
donnes;
Lorsque la transmission est termine, les signaux RTS, CTS, DTR, DCD et DSR sont
successivement dsactivs.
V.4. Applications des liaisons sries :
Transmission de donnes travers une ligne tlphonique :

Le modem transforme les signaux numriques produits par linterface srie en signaux analogiques
accepts par la ligne tlphonique et inversement (modulations numriques FSK, PSK, ...)
Liaison srie directe entre deux DTE :
Liaison simple 3 fils : rebouclage (strapping) des signaux de contrle :

Ce cblage ne permet pas le contrle matriel du flux entre les deux DTE.
Liaison complte : cble Null Modem :

Ce cblage simule la prsence dun modem (DCE) en croisant les signaux de contrle et permet le
contrle matriel du flux.
V.5. Mise en oeuvre dune interface srie, lUART 8250 :

Brochage du 8250 :

Messaoudi K. - 2011/2012

39

Informatique Industrielle 1

ME17

Schma fonctionnel :

Accs aux registres du 8250 : le 8250 possde 11 registres. Comme il ny a que 3 bits dadresses
(A0, A1 et A2), plusieurs registres doivent se partager la mme adresse :

En fonction de ltat de DLAB (Divisor Latch Access Bit = bit de poids fort du registre LCR), on a
accs soit au registre dmission/rception, soit au diviseur dhorloge, soit au masque
dinterruptions.
Structure des registres :
Line Control Register (LCR) :
bits 0 et 1 : longueur du mot transmis,

Messaoudi K. - 2011/2012

40

Informatique Industrielle 1

ME17

bit 2 : nombre de bits de stop, 0 1 bit de stop,


1 1.5 bits de stop si 5 bits sont
transmis, 2 bits de stop sinon ;
bit 3 : autorisation de parit, 0 pas de parit,
1 parit gnre et vrifie ;
bit 4 : slection de parit,
0 parit impaire,
1 parit paire;
bit 5 : forage de parit,
0 parit non force
1 parit fixe;
bit 6 : contrle de ltat de la ligne TxD,
0 ligne en fonctionnement normal,
1 forage de TxD ltat 0 (break) ;
bit 7 : DLAB (Divisor Latch Access bit), 0 accs aux registres dmission,
de rception et IER,
1 accs au diviseur dhorloge.
Line Status Register (LSR) :
bit 0 : 1 donne reue ;
bit 1 : 1 erreur dcrasement de caractre ;
bit 2 : 1 erreur de parit ;
bit 3 : 1 erreur de cadrage (bit de stop non valide) ;
bit 4 : 1 dtection dun tat logique 0 sur RxD pendant
une dure suprieure la dure dun mot ;
bit 5 : 1 registre de transmission vide ;
bit 6 : 1 registre dcalage vide ;
bit 7 : non utilis, toujours 0.
Modem Control Register (MCR) :

Modem Status Register (MSR) :

Diviseur dhorloge (DLM,DLL) : la vitesse de transmission est fixe par la valeur du


diviseur dhorloge :

Exemple de calcul : vitesse de transmission dsire = 1200 bit/s, frquence dhorloge =


1.8432 MHz, dtermination de la valeur du diviseur dhorloge :

Messaoudi K. - 2011/2012

41

Informatique Industrielle 1

ME17

Receiver Buffer Register (RBR) : contient la donne reue.


Transmitter Holding Register (THR) : contient la donne transmettre.
Interrupt Identification Register (IIR) :

Interrupt Enable Register (IER) : autorisation des interruptions

Scratch Register (SCR) : registre usage gnral pouvant contenir des donnes
temporaires.
Exemple de programmation : soit un UART 8250 dont le bus de donnes est connect sur la
partie faible du bus de donnes du microprocesseur 8086. Ladresse de base du 8250 est fixe la
valeur 200H par un dcodeur dadresses. La frquence dhorloge du 8250 est de 1.8432 MHz. On
veut :
Ecrire une procdure init qui initialise le 8250 avec les paramtres suivants : 2400 bits/s,
8 bits par caractre, parit paire, 1 bit de stop (2400, 8, P, 1) ;
Ecrire une procdure envoi qui met un message contenu dans la zone de donnes msg.
Lmission sarrte lorsque le caractre EOT (End Of Text, code ASCII = 03H) est
rencontr ;
Ecrire une procdure rception qui reoit une ligne de 80 caractres et la range dans une
zone de donnes appele ligne. En cas derreur de rception, envoyer le caractre NAK
(No Acknowledge, code ASCII = 15H) sinon envoyer le caractre ACK (Acknowledge,
code ASCII = 06H).
Programme :

Messaoudi K. - 2011/2012

42

Informatique Industrielle 1

Messaoudi K. - 2011/2012

ME17

43

Informatique Industrielle 1

Messaoudi K. - 2011/2012

ME17

44

Informatique Industrielle 1

ME17

Chapitre V : Les interruptions


I. Dfinition dune interruption :
Soit un microprocesseur qui doit changer des informations avec un priphrique :

Il y a deux mthodes possibles pour recevoir les donnes provenant des priphriques :
Scrutation priodique (ou polling) : le programme principal contient des instructions qui lisent
cycliquement ltat des ports dE/S.
Avantage : facilit de programmation.
Inconvnients :
perte de temps sil y a de nombreux priphriques interroger ;
de nouvelles donnes ne sont pas toujours prsentes ;
des donnes peuvent tre perdues si elles changent rapidement.
Interruption : lorsquune donne apparat sur un priphrique, le circuit dE/S le signale au
microprocesseur pour que celui-ci effectue la lecture de la donne : cest une demande
dinterruption (IRQ : Interrupt Request) :

Avantage : le microprocesseur effectue une lecture des ports dE/S seulement lorsquune donne est
disponible, ce qui permet de gagner du temps et dviter de perdre des donnes.
Exemples de priphriques utilisant les interruptions :
Clavier : demande dinterruption lorsquune touche est enfonce ;
Port srie : demande dinterruption lors de larrive dun caractre sur la ligne de
transmission.
Remarque : les interruptions peuvent tre gnres par le microprocesseur lui-mme en cas de
problmes tels quune erreur dalimentation, une division par zro ou un circuit mmoire
dfectueux (erreurs fatales). Dans ce cas, la demande dinterruption conduit larrt du
microprocesseur.
II. Prise en charge dune interruption par le microprocesseur :
A la suite dune demande dinterruption par un priphrique :
Le microprocesseur termine lexcution de linstruction en cours ;
Il range le contenu des principaux registres sur la pile de sauvegarde : pointeur dinstruction,
flags, ...
Il met un accus de rception de demande dinterruption (Interrupt Acknowledge)
indiquant au circuit dE/S que la demande dinterruption est accepte :

Remarque : le microprocesseur peut refuser la demande dinterruption : celle-ci est alors


masque. Le masquage dune interruption se fait gnralement en positionnant un flag dans
Messaoudi K. - 2011/2012

45

Informatique Industrielle 1

ME17

le registre des indicateurs dtat. Il existe cependant des interruptions non masquables qui
sont toujours prises en compte par le microprocesseur.
Il abandonne lexcution du programme en cours et va excuter un sous-programme de
service de linterruption (ISR : Interrupt Service Routine) ;
Aprs lexcution de lISR, les registres sont restaurs partir de la pile et le
microprocesseur reprend lexcution du programme quil avait abandonn :

Remarque : la dernire instruction dun sous-programme de service dinterruption doit tre


linstruction IRET : retour dinterruption.
Si plusieurs interruptions peuvent se produire en mme temps, on doit leur affecter une
priorit pour que le microprocesseur sache dans quel ordre il doit servir chacune dentre elle.
III. Adresses des sous-programmes dinterruptions :
Lorsquune interruption survient, le microprocesseur a besoin de connatre ladresse du
sous-programme de service de cette interruption. Pour cela, la source dinterruption place sur le bus
de donnes un code numrique indiquant la nature de linterruption. Le microprocesseur utilise ce
code pour rechercher dans une table en mmoire centrale ladresse du sous-programme
dinterruption excuter. Chaque lment de cette table sappelle un vecteur dinterruption :

Lorsque les adresses des sous-programmes dinterruptions sont gres de cette manire, on
dit que les interruptions sont vectorises.
Avantage de la vectorisation des interruptions : lemplacement dune ISR peut tre
nimporte o dans la mmoire, il suffit de spcifier le vecteur dinterruption correspondant.
IV. Les interruptions du 8086 :
Le microprocesseur 8086 peut grer jusqu 256 interruptions. Chaque interruption reoit un
numro (compris entre 0 et 255) appel type de linterruption.
Trois sortes dinterruptions sont reconnues par le 8086 :
Interruptions matrielles produites par lactivation des lignes INTR et NMI du
microprocesseur ;
Interruptions logicielles produites par linstruction INT n, o n est le type de linterruption ;
Messaoudi K. - 2011/2012

46

Informatique Industrielle 1

ME17

Interruptions processeur gnres par le microprocesseur en cas de dpassement, de division


par zro ou lors de lexcution pas pas dun programme.
Les interruptions du 8086 sont vectorises. La table des vecteurs dinterruptions doit
obligatoirement commencer ladresse physique 00000H dans la mmoire centrale.
Chaque vecteur dinterruption est constitu de 4 octets reprsentant une adresse logique du
type CS : IP.

Remarque : correspondance entre le type de linterruption et ladresse du vecteur correspondant :


adresse vecteur dinterruption = 4 type de linterruption
Exemple : interruption 20H, adresse du vecteur = 4 20H = 80H.
La table des vecteurs dinterruptions est charge par le programme principal (carte
microprocesseur) ou par le systme dexploitation (ordinateur) au dmarrage du systme.
Elle peut tre modifie en cours de fonctionnement (dtournement des vecteurs
dinterruptions).
V. Le contrleur programmable dinterruptions 8259 :
Le microprocesseur 8086 ne dispose que de deux lignes de demandes dinterruptions
matrielles (NMI et INTR). Pour pouvoir connecter plusieurs priphriques utilisant des
interruptions, on peut utiliser le contrleur programmable dinterruptions 8259 dont le rle est de :
Recevoir des demandes dinterruptions des priphriques ;
Rsoudre les priorits des interruptions ;
Gnrer le signal INTR pour le 8086 ;
Emettre le numro de linterruption sur le bus de donnes.
Un 8259 peut grer jusqu 8 demandes dinterruptions matrielles.

Messaoudi K. - 2011/2012

47

Informatique Industrielle 1

ME17

Brochage du 8259

Schma fonctionnel :

Remarque : si le nombre de demandes dinterruptions est suprieur 8, on peut placer plusieurs


8259 en cascade :

Messaoudi K. - 2011/2012

48

Informatique Industrielle 1

ME17

Chapitre VI : Le Microcontrleur PIC16F84

I. Introduction :
Un microcontrleur est une unit de traitement de l'information de type microprocesseur laquelle
nous ajoutons des priphriques internes permettant de raliser des montages sans ncessiter lajout
de composants annexes. Un microcontrleur peut donc fonctionner de faon autonome aprs
programmation. Un microcontrleur est ralis en technologie CMOS, en le regardant pour la
premire fois, il fait davantage penser un banal circuit intgr logique TTL ou MOS, plutt qu
un microcontrleur.
Un PIC (Programmable Interface Controler) est un microcontrleur fabriqu par la Socit
amricaine Arizona MICROCHIP Technology. Les PIC sont drivs du PIC1650 dvelopp
l'origine par la division microlectronique de General Instrument.
Un PIC est fourni en botier DIL (Dual In Line) de 2x9 pattes. En dpit de sa petite taille, ils sont
caractriss par une architecture interne qui lui confre une souplesse et une vitesse incomparables.
Ses caractristiques principales sont :
Sparation des mmoires de programme et de donnes (architecture Harvard) : On obtient
ainsi une meilleure bande passante et des instructions et des donnes pas forcment codes
sur le mme nombre de bits.
Communication avec l'extrieur seulement par des ports : il ne possde pas de bus
d'adresses, de bus de donnes et de bus de contrle comme la plupart des microprocesseurs.
Utilisation d'un jeu d'instructions rduit, d'o le nom de son architecture : RISC (Reduced
Instructions Set Construction). Les instructions sont ainsi codes sur un nombre rduit de
bits, ce qui acclre l'excution (1 cycle machine par instruction sauf pour les sauts qui
requirent 2 cycles). En revanche, leur nombre limit oblige se restreindre des instructions
basiques, contrairement aux systmes d'architecture CISC (Complex Instructions Set
Construction) qui proposent plus d'instructions donc codes sur plus de bits mais ralisant
des traitements plus complexes.
Il existe trois familles de PIC :
- Base-Line : Les instructions sont codes sur 12 bits ;
- Mid-Line : Les instructions sont codes sur 14 bits ;
- High-End : Les instructions sont codes sur 16 bits.
Par rapport des systmes lectroniques base de microprocesseurs et autres composants spars,
les microcontrleurs permettent de diminuer la taille, la consommation lectrique et le cot des
produits. Ils sont frquemment utiliss dans les systmes embarqus, comme les contrleurs des
moteurs automobiles, les tlcommandes, les appareils de bureau, l'lectromnager, les jouets, la
tlphonie mobile, etc.
II. Le PIC16F84 de Microchip
Le PIC16F84 est un microcontrleur 8 bits 18 pattes. Le numro 16 signifie qu'il fait partie de la
famille "MID-RANGE". La lettre F indique que la mmoire programme de ce PIC est de type
"Flash". Les deux derniers chiffres permettent d'identifier prcisment le PIC, ici c'est un PIC de
type 84. La rfrence 16F84 peut avoir un suffixe du type "-XX" dans lequel XX reprsente la
frquence d'horloge maximal que le PIC peut recevoir.
Remarque : La lettre L indique que le PIC peut fonctionner avec une plage de tension beaucoup
plus tolrante. La lettre C indique que la mmoire programme est une EPROM ou plus rarement
une EEPROM et la lettre CR indique une mmoire de type ROM. Notez ce niveau que seule une
mmoire FLASH ou EEPROM est susceptible dtre efface.

Messaoudi K. - 2011/2012

49

Informatique Industrielle 1

ME17

Tableau n1: Liste des composants prsents dans la documentation technique n DS30430C du PIC.

II.1. Dtails des principales caractristiques du PIC16F84


Les principales caractristiques dun PIC16F84 sont :
- 35 instructions (composant RISC) ;
- 2Ko de mmoire Flash pour le programme (RAM de 1019 mots de 14 bits pour les
instructions), cette mmoire allant de ladresse 005 ladresse 3FF ;
- 68 octets de RAM (Donnes sur 8 bits) allant de ladresse 0C ladresse 4F) ;
- Une mmoire RAM de 2x12 emplacements rserve aux registres spciaux
- 64 octets de d'EEprom ;
- 1 compteur/timer de 8 bits ;
- Une horloge interne, avec pr diviseur et chien de garde (Watch dog) ;
- 4 sources d'interruption ;
- 13 entres/sorties configurables individuellement, rparties en un port de 5 lignes (Port A) et
un port de 8 lignes (Port B) ;
- Mode SLEEP ;
- 1 cycle machine par instruction, sauf pour les sauts (2 cycles machine) ;
- Vitesse maximum 10 MHz soit une instruction en 400 ns (1 cycle machine = 4 cycles
d'horloge) ;
- 1000 cycles d'effacement/criture pour la mmoire flash, 10.000.000 pour la mmoire de
donne EEPROM ;
- Vecteur de Reset situ ladresse 000 ;
- Bus dadresses de 13 lignes ;
- Alimentation sous 5 Volts.

En plus des caractristiques suivantes :


- Architecture interne rvolutionnaire lui confrant une extraordinaire rapidit ;
- Possibilit dtre programm in-circuit, cest dire sans quil soit ncessaire de le retirer du
support de lapplication ;
Messaoudi K. - 2011/2012

50

Informatique Industrielle 1

ME17

Un vecteur dinterruption, situ ladresse 004 ;


Prsence dun code de protection permettant den empcher la duplication ;
Facilit de programmation ;
Simplicit ;
Une faible consommation lectrique ;
Faible prix.

II.2. Brochage du PIC16F84


Le PIC16F84 est un microcontrleur ralis en technologie CMOS. Les signaux sont compatibles
TTL.
VSS et VDD : broches d'alimentation (3 5,5V) ;
OSC1 et OSC2 : signaux d'horloges, ces broches peuvent recevoir un circuit RC ou un
rsonateur ;
CLKIN : peut tre connecte une horloge externe (0 4, 10 ou 20 MHz) ;
MCLR : Reset (Master Clear) ;
RA0, ... , RA4 : 5 entres/sorties du port A ;
RB0, ... , RB7 : 8 entres/sorties du port B ;
T0CKI : Entre d'horloge externe du timer TMR0 ;
INT : entre d'interruption externe.

Remarque1: RA = Register A, RB = Register B.


Remarque2: 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).
Remarque3: Le 16F84 possde 13 entres/sorties (5 dans le port A et 8 dans le port B). Chaque
entre/sortie est configurable individuellement (en entre ou bien en sortie). On peut par exemple
configurer les broches RB0, RA2 et RA3 en entre et les broches RB1, RB2, RB3, RA0 et RA1 en
sortie. Le choix de la configuration des entres/sorties non utilises n'a videmment aucune
importance. Notez le cas particulier de la broche RA4 configure en sortie. Cette broche possde
une sortie de type drain ouvert. Cela veut dire qu'elle ne peut pas fournir de courant. Par contre, elle
peut en consommer :

II.3. Vitesse des PIC


Tous les PIC Mid-Range ont un jeu de 35 instructions, stockent chaque instruction dans un seul mot
de programme, et excutent chaque instruction (sauf les sauts) en 1 cycle. On atteint donc des trs
grandes vitesses, et les instructions sont de plus trs rapidement assimiles. Lexcution en un seul
cycle est typique des composants RISC.

Messaoudi K. - 2011/2012

51

Informatique Industrielle 1

ME17

Lhorloge fournie au PIC est prdivise par 4 au niveau de celle-ci. Cest cette base de temps qui
donne la dure dun cycle. Si on utilise par exemple un quartz de 4MHz, on obtient donc 1000000
de cycles/seconde, or, comme le PIC excute pratiquement 1 instruction par cycle, hormis les sauts,
cela vous donne une puissance de lordre de 1MIPS (1 Million dInstructions Par Seconde). Pensez
que les PIC peuvent monter 20MHz. Cest donc une vitesse de traitement plus quhonorable.
II.4. Fonctionnement dun PIC16F84
Indpendamment de ce quon veut faire des 13 lignes (que lon dfinit par 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,
conomique, utilisable dans les cas ne demandant pas une extrme prcision de
cadencement) ;
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 - quil convient de considrer comme des invariants devant ncessairement figurer
dans tout montage - reprsentent le cortge obligatoire de tout microcontrleur PIC 16F84, de la
mme faon - pourrais-je dire - quun transistor demande, pour fonctionner, une rsistance de Base
et une rsistance de Collecteur. Les applications type sont celles des deux pages suivantes :

Pilotage par quartz

Pilotage par oscillateur RC

III. Organisation du PIC16F84


La Figure suivante prsente l'architecture gnrale du circuit. Il est constitu des lments suivants :
Un systme d'initialisation la mise sous tension (power-up timer, ) ;
Un systme de gnration d'horloge partir du quartz externe (timing gnration) ;
Une unit arithmtique et logique (ALU) ;
Une mmoire flash de programme de 1k "mots" de 14 bits ;
Un compteur de programme (program counter) et une pile (stack) ;
Un bus spcifique pour le programme (program bus) ;
Un registre contenant le code de l'instruction excuter ;
Un bus spcifique pour les donnes (data bus) ;
Une mmoire RAM contenant :
Les SFR ;
68 octets de donnes ;

Messaoudi K. - 2011/2012

52

Informatique Industrielle 1

ME17

Une mmoire EEPROM de 64 octets de donnes ;


2 ports d'entres/sorties ;
Un compteur (timer) ;
Un chien de garde (watchdog).

Diagramme blocs dun PIC16F84

III.1. Organisation de la mmoire du PIC16F84


Le PIC contient de la mmoire de programme et de la mmoire de donnes. La structure Harvard
des PICs fournit un accs spar chacune. Ainsi, un accs aux deux est possible pendant le mme
cycle machine. La mmoire du PIC16F84 est rpartie en trois espaces, logs sur la mme pastille de
silicium :
III.1.1. La mmoire programme
La mmoire programme est constitue de 1K mots de 14 bits. Cest une mmoire EEPROM de type
flash, de 1 K mots de 14 bits, allant de ladresse 0000 ladresse 03FF. Cest dans cette zone que
nous allons crire notre programme do le nom mmoire programme. Ce dernier est tlcharg par
une liaison srie. Ceci explique aussi pourquoi les fichiers sur un PC font 2Ko (1 Kibioctets). Le
plan de cette mmoire est le suivant :
5 adresses rserves au C
(adresses ne pas utilise)

1019 adresses restantes,


disponibles pour y loger
les instructions de programme

Messaoudi K. - 2011/2012

000
001
002
003
004
005
.
.
.
.
.
.
.
3FF

53

Vecteur de Reset

Vecteur dInterruption
Dbut du programme utilisateur

Fin de lespace mmoire disponible

Informatique Industrielle 1

ME17

La Figure suivante montre encore l'organisation de la mmoire programme. Elle contient 1k "mots"
de 14 bits dans le cas du PIC 16F84, mme si le compteur de programme (PC) de 13 bits peut en
adresser 8k. Il faut se mfier des adresses images ! L'adresse 0000h contient le vecteur du reset,
l'adresse 0004h l'unique vecteur d'interruption du PIC. La pile contient 8 valeurs. Comme le
compteur de programme, elle n'a pas d'adresse dans la plage de mmoire. Ce sont des zones
rserves par le systme.

Organisation de la mmoire de programme et de la pile

a) Ladresse 000 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.
b) ladresse 004 correspond au vecteur dinterruption :
Cest ladresse point de rencontre dfinie par le fabricant, laquelle systme et utilisateur se
rendent lorsquun problme surgit, pour se dire ce quil se passe et quel sont les remdes durgence
apporter.
III.1.2. La mmoire de donnes
Elle se dcompose en deux parties de RAM (RAM statique SRAM) et une troisime zone
EEPROM. La premire contient les SFRs (Special Function Registers) qui permettent de contrler
les oprations sur le circuit. La seconde contient des registres gnraux, libres pour l'utilisateur. La
dernire contient 64 octets que nous pouvons lire et crire depuis notre programme. Ces octets sont
conservs aprs une coupure de courant et sont trs utiles pour conserver des paramtres semipermanents. Leur utilisation implique une procdure spciale, car ce nest pas de la RAM, mais bien
une ROM de type spcial. Il est donc plus rapide de la lire que dy crire.

Messaoudi K. - 2011/2012

54

Informatique Industrielle 1

ME17

Les instructions orientes octets ou bits contiennent une adresse sur 7 bits pour dsigner l'octet avec
lequel l'instruction doit travailler. D'aprs la Figure suivante, l'accs au registre TRISA d'adresse
85h, par exemple, est impossible avec une adresse sur 7 bits. C'est pourquoi le constructeur a dfini
deux banques. Le bit RP0 (et RP1 pour dautre PICs) du registre d'tat (STATUS) permet de choisir
entre les deux. Ainsi, une adresse sur 8 bits est compose de RP0 en poids fort et des 7 bits
provenant de l'instruction excuter.
RP1:RP0 = 00 pour la slection Bank0 ;
RP1:RP0 = 01 pour la slection Bank1.
(RP1 est utilis pour la compatibilit avec dautres PICS de la famille et restera 0 sur le 16F84.)
Adr.
00h
01h
02h
03h
04h
05h
06h
07h
08h
09h
0Ah
0Bh
0Ch - 4Fh
50h - 7Fh

Banque0
Indirect addr.
TMR0
PCL
STATUS
FSR
PORTA
PORTB
-EEDATA
EEADR
PCLATH
INTCON
68 cases mmoires
Inutilis

Banque1
Indirect addr.
OPTION_REG
PCL
STATUS
FSR
TRISA
TRISB
-EECON1
EECON2
PCLATH
INTCON
idem banque 0
inutilis

Adr.
80h
82h
84h
86h
88h
8Ah
8Ch CFH
D0H FFH

RAM et Registres du 16F84


a) Registres internes
Les registres SFR (Registres internes Fonctions Spciales) sont rpartis en deux banques. Cette
partie de mmoire est suivie par 68 registres d'usage gnral pouvant tre utiliss comme mmoire
simple qui sont identiques sur les deux banques. Ensuite vient une srie de registre gnraux qui
eux dpendent de la banque mmoire choisie et qui ne sont pas implment dans le 16F84 original.
Les SFR vont de 00h 0Bh en Bank0 et de 80h 8Bh en Bank1. Certains registres sont accessibles
en Bank0 et galement en Bank1 (ils sont remapps). La fonction de chacun des bits de ces registres
est dtaille dans lannexe A3.
Bank 0
00h INDF
Utilis en adressage indirect avec FSR, il ne sagit pas dun registre physique
01h TMR0
Timer/Compteur 8 bits
02h PCL
Poids faible du compteur programme (PC)
03h STATUS Registre dtat dont les bits sont : IRP RP1 RP0 TO PD Z DC C
04h FSR
Pointeur dadresse en adressage indirect.
05h PORTA
Port dEntre/Sortie A dont les bits sont : x x x RA4/T0CKI RA3 RA2 RA1 RA0
06h PORTB
Port dEntre/Sortie B dont les bits sont: RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0/INT
07h Pas utilis
08h EEDATA Registre de donnes de l Eeprom
09h EEADR
Registre dadresses de l Eeprom
0Ah PCLATH 5 bits de poids fort du compteur programme
0Bh INTCON Registre des Interruptions dont les bits sont: GIE EEIE T0IE INTE RBIE T0IF INTF RBIF
Bank 1
80h INDF
Utilis en adressage indirect avec FSR, il ne sagit pas dun registre physique
81h OPTION_REG
Registre doptions, bits : RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0
82h PCL
Poids faible du compteur programme (PC)
83h STATUS Registre dtat dont les bits sont : IRP RP1 RP0 TO PD Z DC C
84h FSR
Pointeur dadresse en adressage indirect.
85h TRISA
Registre de Direction du Port A
86h TRISB
Registre de Direction du Port B
87h Pas utilis
88h EECON1 Registre de Contrle n1 de l Eeprom : x x x EEIF WRERR WREN WR RD
89h EECON2 Registre de contrle n2 de l Eeprom (il ne sagit pas dun registre physique)
0Ah PCLATH 5 bits de poids fort du compteur programme
0Bh INTCON Registre des ITs dont les bits sont: GIE EEIE T0IE INTE RBIE T0IF INTF RBIF

Messaoudi K. - 2011/2012

55

Informatique Industrielle 1

ME17

b) La RAM
La RAM GPR (RAM utilisateur dusage Gnral ou encore General Purpose Registers) de 68 octets
va de 0Ch 4Fh, soient 68 octets disponibles pour les variables du programme. Cette RAM est
remappe en Bank0 et Bank1, il sagit donc des mmes emplacements mmoires qui sont
accessibles par les deux Banks deux adresses diffrentes. Ceci permet dviter davoir changer
de bank avant daccder une variable ou une autre.
Lors de la programmation il faut toujours indiquer ladresse de la zone RAM partir de laquelle le
C doit commencer crire, ainsi que le nombre demplacements rserver pour chaque variable.
Comme par exemple :
ORG OC
Compteur RES 3
Ce qui revient dire : rserve trois emplacements la variable Compteur, dans lordre suivant :
Compteur ladresse 0C
Compteur+1 ladresse 0D
Compteur+2 ladresse 0E .
Ainsi, par exemple, pour effacer les donnes de ladresse OE, on crira :
CLRF Compteur+2.
c) La mmoire EEPROM
La mmoire EEPROM de 64 octets est indirectement mappe dans la zone de donnes et est donc
accessible par un pointeur dadresse indirect (accessibles en lecture et en criture par le
programme). On peut y sauvegarder des valeurs, qui seront conserves mme si l'alimentation est
teinte, et les rcuprer lors de la mise sous tension. Cette mmoire de donnes est une mmoire de
type flash de 64 emplacements 8 bits, 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 et EECON2 (EEprom CONtrol) permettant de dfinir le mode de fonctionnement
de cette mmoire.
III.1.3. La mmoire EEPROM rserves au microcontrleur
Une autre petite mmoire EEPROM, contenant seulement 8 cases, de ladresse 2000 ladresse
2007, est rserve au microcontrleur. 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 mots 14 bits). Ladresse 2007 correspond au registre
de configuration du microcontrleur.
III.2. Les Ports d'entres/sorties
Le PIC 16F84 est dot de deux ports d'entres/Sorties appels PortA et PortB.
III.2.1. Le Port A: RA0 RA4
Il comporte 5 pattes d'entre/sortie bi-directionnelles, notes RAx avec x={0,1,2,3,4}. Le registre
PORTA, d'adresse 05h dans la banque 0, permet d'y accder en lecture ou en criture (une copie des
lignes RA0..RA4). En effet, lire le PORTA revient lire ltat des pins alors quune criture place
le niveau correspondant sur les pins qui auront t configures en sorties (dans une squence interne
au PIC de Read-modify-write). Le registre TRISA, d'adresse 85h dans la banque 1, permet de
choisir le sens de chaque patte (entre ou sortie) : un bit 1 positionne le port en entre, un bit 0
positionne le port en sortie.
Les lignes RA0 .. RA3 sont des entres niveaux compatibles TTL et des sorties CMOS standards.
La ligne RA4 est une entre Trigger de Schmitt et une sortie drain ouvert qui est multiplexe
avec lentre de Timer TMR0.

Messaoudi K. - 2011/2012

56

Informatique Industrielle 1

ME17

Il ny a aucune instruction permettant dcrire directement dans le registre TRISA (ou TRISB pour
le port B) : 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 TRISA (ou
TRISB).
Exemple
MOVLW 00000001
MOVWF TRISA

;(en binaire, sinon 01 en hexa)

Le bit 0 du port A est dfini comme entre, tandis que les sept autres lignes sont dfinies
comme sorties.
Exemple de configuration du PORTA
BSF
MOVLW
MOVWF
BCF

BCF
BSF

STATUS, RP0
0xFB
TRISA
STATUS, RP0

; Acces Bank1
; TRISA.b2 0 pour RA2 en sortie

STATUS, RP0
PORTA, RA2

; Acces Bank0
; Allume la Led connecte la ligne RA2

(% 1111.1011)

; Acces Bank0

III.2.1. Le Port B: RB0 RB7


Il comporte 8 pattes d'entre/sortie bi-directionnelles, notes RBx avec x={0,1,2,3,4,5,6,7}. Le
registre PORTB, d'adresse 06h dans la banque 0, permet d'y accder en lecture ou en criture. Le
registre TRISB, d'adresse 86h dans la banque 1, permet de choisir le sens de chaque patte (entre ou
sortie) : un bit 1 positionne le port en entre, un bit 0 positionne le port en sortie.
Le cblage interne d'une porte du port B ressemble beaucoup celui du port A. On peut noter la
fonction particulire pilote par le bit RBPU (OPTION_REG.7) qui permet d'alimenter (RBPU=0)
ou non (RBPU=1) les sorties.
Les quatre bits de poids fort (RB7-RB4) peuvent tre utiliss pour dclencher une interruption sur
changement d'tat. RB0 peut aussi servir d'entre d'interruption externe.
III.2. Les registres spciaux
Nous avons dit que dans lespace mmoire RAM que Microchip appelle Register File, une zone est
rserve aux registres spciaux. Le mot registre est utilis ici pour dsigner un emplacement
mmoire, tandis que le mot file signifie groupement. 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. Celui
qui veut crire ne ft-ce quun petit programme de quelques lignes, ne peut pas les ignorer.
A. Dtail du registre STATUS (Bank 0 en 03h et Bank 1 en 83h)
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). Les
dtails des diffrents bits du registre STATUS sont donns comme ci-aprs. Ces bits refltent le
status de lALU du PIC, ils permettent galement de basculer dune Bank de registres une autre.

b7:
b6-5:

IRP
RP1 RP0

b4:

TO\

Messaoudi K. - 2011/2012

non utilis dans le 16F84


Slection de la bank de registres active
00: Bank0
01: Bank1
10: non utilis sur le 16F84
11: non utilis sur le 16F84
Sert slectionner lune des deux pages de registres (Page 0 ou Page 1).
Time Out du watch dog

57

Informatique Industrielle 1

ME17
1: aprs un dmarrage, CLRWDT ou SLEEP.
0: aprs un time-out du watch dog
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.

b3:

PD\

b2:

b1:

DC

b0:

Power down bit


1: aprs un dmarrage ou aprs linstruction CLRWDT
0: aprs lexcution de linstruction SLEEP
Mise en veilleuse de lalimentation, effectue par linstruction SLEEP. Passe 1
lorsquon utilise linstruction CLWDT, ou la mise sous tension.
bit Zero
1: Rsultat de lopration prcdente nul
0: Rsultat de lopration non nul
Ce flag passe 1 si le rsultat dune opration (arithmtique ou logique) est 0.
Digital carry / borrow\
1: Dbordement du 4 bit du rsultat de lopration prcdente
0: Pas de dbordement
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.
Carry / borrow\
1: Dbordement bit du rsultat de lopration prcdente
0: Pas de dbordement
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.

B. Dtail du registre OPTION_REG (Bank 1 en 81h)


Permet de configurer les rsistances de rappel internes du PortB, et aussi lINT externe, le Timer0 et
le prescaler du Timer0 ou du watch-dog
b7:

RBPU\

b6:

INTEDG

b5:

TOCS

b4:

TOCE

b3:

PSA

b2-b1-b0:
Valeurs du prescaler
PS2:PS1:PS0
000
001
010
011
100
101
110
111

Rsistances de rappel des entres du PortB


1: Les rsistances sont dsactives
0: Les rsistances du PortB sont actives
Slection du front actif de lINT externe
1: Interruption sur le front montant de RB0/INT
0: Interruption sur le front descendant de RB0/INT
Source de lhorloge du Timer0
1: Comptage sur la pin RA4/TOCKI
0: Comptage sur lhorloge interne CLKOUT
Slection du front actif pour le comptage sur RA4/TOCKI
1: Comptage sur front descendant
0: Comptage sur front montant
Assignation du Prescaler
1: Prescaler assign au chien de garde WDT
0: Assign au Timer TMR0
PS2:PS1:PS0
Valeur du Prescaler du TMR0 ou du WDT
Prescaler TMR0
1/2
1/4
1/8
1/16
1/32
1/64
1/128
1/256

Prescaler WDT
1/1
1/2
1/4
1/8
1/16
1/32
1/64
1/128

C. Dtail du registre INTCON (Bank 0 en 0Bh et Bank 1 en 8Bh)


Bits dautorisation et Flags dinterruptions
b7:

GIE

b6:

EEIE

b5:

TOIE

b4:

INTE

b3:

RBIE

b2:

TOIF

b1:

INTF

Messaoudi K. - 2011/2012

Autorisation Globale des Interruptions


1: Autorise toutes les interruptions
0: Interdit toutes les interruptions
Autorisation de linterruption de fin dcriture en Eeprom
1: Autorise linterruption de fin dcriture en Eeprom
0: Interdit linterruption de fin dcriture en Eeprom
Autorisation de linterruption de dbordement de TMR0
1: Autorise linterruption de TMR0
0: Interdit linterruption de TMR0
Autorisation de linterruption sur RB0/INT
1: Autorise linterruption sur RB0/INT
0: Interdit linterruption sur RB0/INT
Autorisation de linterruption lors dun changement dtat sur le PortB
1: Autorise linterruption sur RB7:RB4
0: Interdit linterruption sur RB7:RB4
Flag de dbordement de TMR0
1: Le TMR0 a dbord ( effacer par programme)
0: Le TMR0 na pas dbord
Flag dinterruption sur RB0/INT
1: Il y a eu une demande dinterruption sur RB0/INT
0: Il ny a pas dinterruption sur RB0/INT

58

Informatique Industrielle 1
b0:

RBIF

ME17
Flag dinterruption sur le PortB
1: Au moins une pin RB7:RB4 a chang dtat (doit tre effac par
0: Il ny a pas de changement dtat sur RB7:RB4

programme)

D. EEADR (EEprom ADRess)


Registre dans lequel on crit ladresse de la mmoire de donnes EEPROM (mmoire flash de 64
octets, allant de ladresse 00 ladresse 3F) 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.
E. EECON1 (EEprom CONtrol 1)
Cest un registre de contrle permettant de dfinir le mode de fonctionnement de la mmoire de
donnes EEPROM (mmoire flash de 64 octets, allant de ladresse 00 ladresse 3F). En plus, cest
registre 8 bits, mais dont 5 seulement sont utiliss:
Bit 0 : RD (ReaD) : Normalement 0. Il se met dans cet tat de lui-mme. Le programmeur ne peut
y crire que un 1. Naccepte pas dtre programm zro.
Bit 1 : WR (WRite) : Normalement 0. Il se met dans cet tat de lui-mme. Le programmeur ne
peut crire que un 1. Naccepte pas dtre programm zro.
Bit 2 : WREN (WRite ENable) : Mis zro, interdit toute criture en mmoire. Mis 1, autorise
une criture en mmoire.
Bit 3 : WRERR (WRite ERRor) : Flag derreur. Normalement zro. Passe 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).
Bit 4 : EEIF (EEprom Interrupt Flag) : Flag dinterruption. Il est automatiquement mis 1 lorsque
la programmation de lEEPROM de donnes est termine. Doit tre mis zro par programmation.
F. EECON2 (EEprom CONtrol 2)
Registre nayant aucune consistance physique, et dont le seul rle consiste obliger le
programmeur vrifier les donnes quil envoie dans lEEPROM.
G. 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 y
crire.
H. FSR (File Select Register)
Sert slectionner la mmoire de donnes, pour pouvoir y accder.
I. INTCON (INTerrupt CONtrol)
Cest le registre qui prside au fonctionnement des interruptions. 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, de la
mme faon que ladresse 000 a t prdfinie pour la fonction Reset).
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.
Linterruption peut tre commande soit par un flanc montant, soit par un flanc descendant : cela
dpend de la faon dont on a pralablement programm le bit 6 (INTEDG) du registre OPTION :
1 = linterruption est gnre lapparition dun front montant ;
0 = linterruption est gnre lapparition dun front descendant.
Messaoudi K. - 2011/2012

59

Informatique Industrielle 1

ME17

Les quatre sources dinterruption possibles sont :


1) la fin dune programmation de lEEPROM de donnes ;
2) le dbordement du timer interne ;
3) une commande externe applique sur la pin 6 (RB0/INT) ;
4) 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.
J. 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).
K. 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.
L. 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 diviseur 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 T0IF).
En programmation on peut crire :
1) pour le lire :
MOVF TMR0 ,W - (porte la valeur de TMR0 dans W)
2) pour lui donner une valeur de dpart :
MOVLW valeur
MOVWF TMR0
3) pour le mettre zro :
CLRF TMR0

Messaoudi K. - 2011/2012

60

Informatique Industrielle 1

ME17

Chapitre VI : Le jeu dinstructions dun PIC16F84


I.

Introduction

Les PIC 16F84A, 16F628A, 16F88, 16F876A, 16F886 (famille mid-range) ont le mme jeu
d'instructions, constitu de seulement 35 instructions (architecture RISC : Reduced Instruction-Set
Computer). Une instruction est code par un mot de 14 bits. La mmoire programme (de type
Flash) a une taille de :
1792 octets (16F84A)
3584 octets (16F628A)
7168 octets (16F88)
14 336 octets (16F876A - 16F886)
Ce qui permet de stocker un programme de :
1024 instructions (16F84A)
2048 instructions (16F628A)
4096 instructions (16F88)
8192 instructions (16F876A - 16F886)
Une instruction ncessite 1 cycle, ou bien 2 cycles dans le cas d'une instruction de branchement
(GOTO, CALL ...). Avec une horloge quartz de 20 MHz, un cycle correspond 4/(20.106) = 200
nanosecondes. Le microcontrleur peut donc excuter jusqu' 5 millions d'instructions par seconde
(5 MIPS) !
Vous pouvez exprimenter ces instructions avec MPLAB et son simulateur, en insrant ces
instructions aprs ltiquette start de votre programme.
Sur le tableau 5.1, nous prsentons l'ensemble des 35 instructions du PIC 16F84 codes sur 14 bits.
Vous trouverez en colonne de gauche le code binaire de l'instruction, les mnmoniques des
instructions se trouvant au centre puis une courte explication de ce que fait l'instruction. Les
oprandes peuvent tre de plusieurs types:
f : adresse mmoire de registres (register file address) de 00 7F
W : registre de travail
d : slection de destination : d=0 vers W, d=1 vers f
pp : numro de PORT entre 1 et 3 sur deux bits
bbb : adresse de bit dans un registre 8 bits (sur 3 bits)
k : champ littral (8, ou 11 bits)
PC compteur programme
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00

Opcode (binary)
0000 0xx0 0000
0000 0110 0011
0000 0110 0100
1000 dfff ffff
0000 1fff ffff
0001 0xxx xxxx
0001 1fff ffff
0010 dfff ffff
0011 dfff ffff
0100 dfff ffff
0101 dfff ffff
0110 dfff ffff
0111 dfff ffff
1000 dfff ffff
1001 dfff ffff

Messaoudi K. - 2011/2012

Mnemonic
NOP
SLEEP
CLRWDT
MOVF f,d
MOVWF
CLRW
CLRF f
SUBWF f, d
DECF f, d
IORWF f, d
ANDWF f, d
XORWF f, d
ADDWF f, d
MOVF f, d
COMF f, d

Description
Pas d'opration
arrte le processeur
Reset du timer watchdog
Recopie de W dans f (adressage direct)
dplacement de W vers f
Positionne W 0 (idem CLR x, W)
Positionne f 0 (idem CLR f, F)
Soustrait W de (d = f W)
Dcrment f (d = f 1)
OU Inclusif W avec F (d = f OR W)
ET entre W et F (d = f AND W)
OU Exclusif W avec F (d = f XOR W)
Additionne W avec F (d = f + W)
recopie F (d = f)
Complement f (d = NOT f)

61

Informatique Industrielle 1
00
00
00
00
00
00
01
01
01
01
11
10
00
00
10
11
11
11
11
11
11

1010
1011
1100
1101
1110
1111
00bb
01bb
10bb
11bb
01xx
0kkk
0000
0000
1kkk
111x
110x
00xx
1000
1001
1010

dfff
dfff
dfff
dfff
dfff
dfff
bfff
bfff
bfff
bfff
kkkk
kkkk
0000
0000
kkkk
kkkk
kkkk
kkkk
kkkk
kkkk
kkkk

ME17
ffff
ffff
ffff
ffff
ffff
ffff
ffff
ffff
ffff
ffff
kkkk
kkkk
1001
1000
kkkk
kkkk
kkkk
kkkk
kkkk
kkkk
kkkk

INCF f, d
DECFSZ f, d
RRF f, d
RLF f, d
SWAPF f, d
INCFSZ f, d
BCF f, b
BSF f, b
BTFSC f, b
BTFSS f, b
RETLW k
CALL k
RETFIE
RETURN
GOTO k
ADDLW k
SUBLW k
MOVLW k
IORLW k
ANDLW k
XORLW k

Incrment f (d = f + 1)
Decrment f (d = f 1) et saut si zero
Rotation droite F (rotation droite avec la retenue)
Rotation gauche F (rotation gauche avec la retenue)
change de groupes 4-bit de f (d = lsb:f msb:f)
Incrment f (d = f + 1) et saut si zero
RaZ d'un bit de f (Clear bit b of f)
Mise 1 d'un bit de f (Set bit b of f)
test de bit de f, saute si zro (Test bit b of f)
test de bit de f, saute si un (Test bit b of f)
Positionne W k et retour
Sauve l'adresse de retour, charge PC avec k
retour d'interruption
retour de sous-programme
saut l'adresse k (9 bits!)
Addition de W et k
Soustraction de W et k
Chargement littral de W (W = k)
OU Inclusif littral avec W (W = k OR W)
ET littral avec W (W = k AND W)
OU exclusif or littral avec W (W = k XOR W)

Tableau 5.1. Jeu d'instructions 14-bit pour PIC 16F84.


Exemples
addlw k
addwf f,d
andlw k
andwf f,d
bcf f,b
bsf f,b
btfsc f,b
btfss f,b
call k
clrf f
clrw
clrwdt
comf f,d
decf f,d
decfsz f,d
goto k
incf f,d
incfsz f,d
iorlw k
iorwf f,d
movf f,d
rlf f,d
rrf f,d
sleep
sublw k
subwf f,d
swapf f,d
xorlw k
xorwf f,d
const

;ajoute une constante k W. Rsultat dans W


;ajoute W f. Rsultat dans W si d=0 ou dans f si d=1
;effectue un ET entre une la constante k et W. Rsultat dans W
;effectue un ET entre W et f. Rsultat dans W si d=0 ou dans f si
d=1
;fait passer le bit b de f 0
;fait passer le bit de f 1
;teste le bit b de f. Incrmente PC si b=0
;teste le bit b de f. Incrmente PC si b=1
;empile PC et affecte PC de l'adresse d'un sous programme
;place zero dans f
;place zero dans W et fait passer STATUS.Z 1
;initialise le timer du chien de garde
;complemente f 1. Rsultat dans W si d=0 ou dans f si d=1
;dcrmente f. Rsultat dans W si d=0 ou dans f si d=1
;dcrmente f. Si f=0, incrmente PC. Rsultat dans W ou dans f
;charge une adresse dans PC
;incrmente F
;inrmente f. Rsultat dans W si d=0 ou dans f si d=1
;effectue un OU entre une constante et W
;effectue un OU entre W et f. Rsultat dans W si d=0 ou dans f si
d=1
;si d=0, crit f dans W , sinon rcrit f dans f
;effectue une rotation de bits gauche travers Carry
;effectue une rotation de bits droite travers Carry
;fait passer le PIC en mode veille
;sustrait W de d'une constante k . ( W := k-W )
;soustrait W de f. Rsultat dans W si d=0 ou dans f si d=1
;permute les deux quartets de f. Rsultat dans W si d=0 ou dans f
si d=1
;effectue un OU exclusif entre une constante et W. Resultat dans W
;OU exclusif entre W et f. Rsultat dans W si d=0 ou dans f si d=1
;est obsolte : ne plus l'utiliser

Messaoudi K. - 2011/2012

62

Informatique Industrielle 1

ME17

II. Les types dinstructions


Pour la programmation du PIC16F84, il existe 4 types dinstructions :
II.1. Les instructions orientes octet
Ce sont des instructions qui manipulent les donnes sous forme doctets. Elles sont codes de la
manire suivante :
6 bits pour linstruction : logique, car comme il y a 35 instructions, il faut 6 bits pour
pouvoir les coder toutes ;
1 bit de destination(d) pour indiquer si le rsultat obtenu doit tre conserv dans le registre
de travail de lunit de calcul (W pour Work) ou sauv dans loprande (F pour File) ;
Reste 7 bits pour encoder loprande (File).
Remarque : premier problme, 7 bits ne donnent pas accs la mmoire RAM totale, donc voici
ici lexplication de la division de la RAM en deux banques en utilisant le bit RP0 du registre
STATUS.
II.2. Les instructions orientes bits
Ce sont des instructions destines manipuler directement des bits dun registre particulier. Elles
sont codes de la manire suivante :
4 bits pour linstruction (dans lespace rest libre par les instructions prcdentes) ;
3 bits pour indiquer le numro du bit manipuler (bit 0 7 possible), et de nouveau ;
7 bits pour indiquer loprande.
II.3. Les instructions gnrales
Ce sont les instructions qui manipulent des donnes qui sont codes dans linstruction directement.
Nous verrons ceci plus en dtail lorsque nous parlerons des modes dadressage. Elles sont codes de
la manire suivante :
Linstruction est code sur 6 bits
Elle est suivie dune valeur IMMEDIATE code sur 8 bits (donc de 0 255).
II.4. Les sauts et appels de sous-routines
Ce sont les instructions qui provoquent une rupture dans la squence de droulement du
programme. Elles sont codes de la manire suivante :
Les instructions sont codes sur 3 bits
La destination code sur 11 bits
Nous pouvons dj en dduire que les sauts ne donnent accs qu 2Ki de mmoire programme
(211). Ceci ne pose aucun problme, le 16F84 ne disposant que de 1K mots de mmoire. Pour coder
une adresse de saut lintrieur de la mmoire programme, il faut donc 10 bits (210 = 1024 = 1Ki).
III. Panoramique des instructions
Le tableau suivant vous permet dun simple regard de vous informer de la manire dont fonctionne
chaque instruction du PIC16F84. La premire colonne indique le MNEMONIQUE et les
OPERANDES pour chaque opration. Les mnmoniques sont des mots rservs (donc que vous ne
pouvez utiliser que pour cet usage) compris et interprts par le programme dassemblage.
Notez ici la confusion de langage commune pour le terme ASSEMBLEUR, quon utilise la fois
pour indiquer le programme qui permet dassembler le code (programme dassemblage), et le
langage utilis dans lditeur (langage dassemblage).
La syntaxe doit tre la suivante pour lassembleur MPLAB (dans lordre) :
Etiquette (facultative)
Espace(s) ou tabulation(s)
Mnmonique (en majuscules ou minuscules)
Tabulation ou Espace(s)

Messaoudi K. - 2011/2012

63

Informatique Industrielle 1

ME17

Oprande ou la valeur
Virgule ventuelle de sparation
Bit de destination W ou F ou ventuellement numro du bit de 0 7 si ncessaire
Espace(s) ou tabulation(s)
Point-virgule. (facultatif si pas de commentaire)
Commentaire. (facultatif)

Notez que le mnmonique ne peut pas se trouver en premire colonne, et que tout ce qui suit le
point-virgule est ignor de lassembleur (donc cest de la zone commentaire). La premire colonne
est rserve pour les tiquettes (repres). Vous disposez galement de la possibilit dinsrer un ou
plusieurs espace(s) ou tabulation(s) de chaque ct de la virgule.
Voici titre dexemple deux lignes valides, les mots en vert sont des mots rservs, en bleu
linstruction, ceux en jaune tant libres, le reste est du commentaire :

Messaoudi K. - 2011/2012

64

Informatique Industrielle 1
Ma_ligne
MOVF STATUS,W

ME17
; Ceci est une tiquette
; charge le registre status dans le registre de travail

La seconde colonne du tableau donne un bref descriptif de linstruction. La troisime colonne donne
le nombre de cycles ncessaires pour excuter linstruction. Notez que toutes les instructions
ncessitent un seul cycle, sauf les sauts qui en ncessitent 2, et les oprations de test avec saut,
lorsque le rsultat du test engendre le saut (instructions notes 1(2)).
La 4me colonne du tableau donne ce quon appelle lOPCODE, cest dire le mot binaire que
MPLAB va gnrer pour vous au dpart du mnmonique. Vous ne vous en servirez donc pas, mais
sachez que vous pourriez programmer directement le PIC sans passer par un assembleur,
directement en construisant un fichier .hex et en entrant les valeurs trouves ici. Cette technique
pour construire des programmes auto-modifis pour cause de restriction mmoire.
La 5me colonne du tableau est primordiale, car elle donne les INDICATEURS DETATS ou
STATUS FLAGS affects (modifis) une fois linstruction effectue.
La dernire colonne renvoie des notes en bas de page. La note 1 est trs importante, elle fait
allusion la mthode lecture/modification/criture propre aux ports dentres/sortie (I/O). La
note 2 indique quune modification dun timer remet zro son prdiviseur. La troisime note
indique que si vous vous servez de linstruction pour modifier le compteur de programme, il y aura
un cycle supplmentaire. Cest logique car cela quivaut un saut.
IV. Les indicateurs dtat
Ces indicateurs sont indispensables pour la programmation. Il est donc absolument ncessaire
davoir compris leur fonctionnement (du moins pour Z et C). Tous les indicateurs sont des bits du
registre STATUS. Nous aborderons ici les flags Z et C.
IV.1. Lindicateur dtat Z
Cest lindicateur Zro, il fonctionne de la manire suivante : Si le rsultat dune opration POUR
LEQUEL IL EST AFFECTE, donne un rsultat gal 0, le flag Zro passe 1. Donc, dire si Z=1
correspond dire si rsultat = 0. La colonne 5 du tableau prcdent indique les instructions qui
modifient Z.
Donc, si vous faites une addition avec ADDWF et que le rsultat obtenu est 0, le bit Z sera 1. Si le
rsultat est <>0 (diffrent de 0), le bit Z vaudra 0. Dans les 2 cas il est modifi.
Par contre, si vous stockez une valeur avec linstruction MOVWF, le bit Z ne sera pas modifi,
mme si la valeur vaut 0. Ces remarques sont valables pour les autres flags.
IV.2. Lindicateur dtat C
Cest lindicateur pour Carry (report). Si le rsultat dune opration entrane un dbordement, le bit
C sera positionn 1. Il sagit en fait du 9me bit de lopration. Exemple :
Si vous ajoutez B11111110 (254)
+ B00000011 (3)
Vous obtenez B100000001, (257) donc 9 bits.
Comme les registres du PIC ne font que 8 bits, vous obtiendrez B00000001 (1) et C positionn 1
V. Dtails des instruction du PIC16F84
V.1. Linstruction GOTO (aller )
Cette instruction effectue ce quon appelle un saut inconditionnel, encore appel rupture de
squence synchrone inconditionnelle. Rappelez-vous que linstruction goto contient les 11 bits de
lemplacement de destination. Les 2 bits restants sont chargs depuis le registre PCLATH.
Rappelez-vous en effet la manire dont est construit le PC dans le cas des sauts. On ne peut sauter
qu lintrieur dune mme PAGE de 211, soit 2048 mots. Ceci na aucune espce dimportance
pour le 16F84, qui ne dispose que de 1Ki mots de mmoire programme, mais devra tre considr
pour les PIC de plus grande capacit (16F876). Voici en rsum le fonctionnement du goto :
Ladresse de saut sur 11 bits est charge dans le PC ;
Les 2 bits manquants sont chargs depuis PCLATH (b3 et b4), pas pour le 16F84 ;
Messaoudi K. - 2011/2012

65

Informatique Industrielle 1

ME17

Le rsultat donne ladresse sur 13 bits (10 bits pour le 16F84) ;


La suite du programme seffectue la nouvelle adresse du PC.
Souvenez-vous, que pour le 16F84 : Adresse de saut = adresse relle. Vous ne devez donc vous
proccuper de rien. Pour les autres, en cas de dbordement, MPLAB vous le signalera.
Syntaxe
goto etiquette

Exemple
Start
goto plusloin
xxxxxxxx
plusloin
xxxxxxxx

; le programme saute linstruction qui suit ltiquette plusloin


; instruction excute aprs le saut : le programme se poursuit ici

Remarquez que vous pouvez sauter en avant ou en arrire. goto ncessite 2 cycles dhorloge, comme
pour tous les sauts.
V.2. Linstruction INCF (INCrement File)
Cette instruction provoque lincrmentation de lemplacement spcifi (encore appel File).
Syntaxe
incf f,d

Comme pour toutes les instructions, f reprsente File , cest dire lemplacement mmoire
concern pour cette opration, d , quant lui: reprsente la Destination. Sauf spcification
contraire, d vaut toujours, au choix :
f (la lettre f) : dans ce cas le rsultat est stock dans lemplacement mmoire.
W (la lettre w) : dans ce cas, le rsultat est laiss dans le registre de travail accumulateur,
et le contenu de lemplacement mmoire nest pas modifi.
La formule est donc (f) + 1 (d) : Les parenthses signifient le contenu de . Soit, en franais :
Le contenu de lemplacement spcifi est incrment de 1, le rsultat est plac dans lemplacement
dsign par d . Emplacement qui pourra tre soit lemplacement spcifi par f , soit
laccumulateur, (f) restant dans ce cas inchang.
Bit du registre STATUS affect : Le seul bit affect par cette opration est le bit Z.
Etant donn que la seule manire, en incrmentant un octet, dobtenir 0, est de passer de 0xFF
0x00. Le report nest pas ncessaire, puisquil va de soi. Si, aprs une incrmentation, vous obtenez
Z=1, cest que vous avez dbord. Z vaudra donc 1 si (f) avant lexcution valait 0xFF.
Exemples
incf mavariable , f
incf mavariable , w

; le contenu de ma variable est augment de 1


; le rsultat est stock dans mavariable.
; Le contenu de mavariable est charg dans w et ; augment de 1. W
; contient donc le contenu de mavariable + 1. mavariable nest pas modifie

V.3. Linstruction DECF (DECRement File)


Dcrmente lemplacement spcifi. Le fonctionnement est strictement identique linstruction
prcdente.
Syntaxe
decf f , d ; (f) 1 -> (d)

Bit du registre STATUS affect : Le seul bit affect par cette opration est le bit Z. Si avant
linstruction, (f) vaut 1, Z vaudra 1 aprs lexcution (1-1 = 0)
Exemples
decf mavariable , f
decf mavariable , w

; dcrmente mavariable, rsultat dans mavariable


; prends (mavariable) 1 et place le rsultat dans w

V.4. Linstruction MOVLW (MOVe Literal to W)


Cette instruction charge la valeur spcifie (valeur littrale, ou encore valeur immdiate), dans le
registre de travail W.
Syntaxe
movlw k

; k-> w : k reprsente une valeur de 0x00 0xFF.

Bit du registre STATUS affect : Aucun (donc mme si vous chargez la valeur 0.)
Exemple
movlw 0x25

; charge 0x25 dans le registre w

Messaoudi K. - 2011/2012

66

Informatique Industrielle 1

ME17

V.5. Linstruction MOVF (MOVe File)


Charge le contenu de lemplacement spcifi dans la destination
Syntaxe
movf f , d

; (f) -> (d)

Bit du registre STATUS affect : Une fois de plus, seul le bit Z est affect (si f vaut 0, Z vaut 1).
Exemple 1
Pour cette instruction, je vais me montrer beaucoup plus explicite. Vous allez comprendre pourquoi
movf mavariable,w

; charge le contenu de mavariable dans w.

ATTENTION
Il est impratif ici de bien faire la distinction entre movlw k et movf f,w.
Dans le premier cas, cest la VALEUR qui est charge dans w, dans le second cest le CONTENU
de lemplacement spcifi. Si nous excutons linstruction suivante :
movlw mavariable

Lassembleur va traduire en remplaant mavariable par sa VALEUR. Attention, la valeur, ce nest


pas le contenu. Nous parlerons dans ce cas dun ADRESSAGE IMMEDIAT. Le droulement est du
type f -> (d) (f nest pas entre parenthses).
Si nous excutons par contre linstruction suivante :
movf mavariable , w

Lassembleur va traduire galement en remplaant mavariable par sa valeur. Nous parlerons ici
dun ADRESSAGE DIRECT.
Exemple 2
movf mavariable , f

Elle place le CONTENU de mavariable dans mavariable. Dire que cela ne sert rien est tentant
mais prmatur. En effet, si le contenu de mavariable reste bien inchang, par contre le bit Z est
positionn 1. Cette instruction permet donc de vrifier si (mavariable) = 0.
V.6. Linstruction MOVWF (MOVe W to File)
Permet de sauvegarder le contenu du registre de travail W dans un emplacement mmoire.
Syntaxe
movwf f ; (W) -> (f)

Bit du registre STATUS affect : Aucun


Exemple
movlw 0x50 ; charge 0x50 dans W
movwf mavariable ; mavariable contient maintenant 0x50.

V.7. Linstruction ADDLW (ADD Literal and W)


Cette opration permet dajouter une valeur littrale (adressage immdiat) au contenu du registre de
travail W.
Syntaxe
addlw k ; (W) + k -> (W)

Bits du registre STATUS affects :


Z : Si le rsultat de lopration vaut 0, Z vaudra 1
C : Si le rsultat de lopration est suprieur 0xFF (255) , C vaudra 1
DC : Si le rsultat de lopration entrane en report du bit 3 vers le bit 4, DC vaudra 1
DC nest utilis que pour les oprations sur les quartets, par exemple, les nombres Binary Coded
Decimal.
Exemple
movlw 253
addlw 4
addlw 255

; charger 253 en dcimal dans W


; Ajouter 4. W contient 1, Z vaut 0, C vaut 1(dborde)
; ajouter 255. W vaut 0, C vaut 1, Z vaut 1

V.8. Linstruction ADDWF (ADD W and F)


Ne pas confondre avec linstruction prcdente. Une nouvelle fois, il sagit ici dun ADRESSAGE
DIRECT. Le CONTENU du registre W est ajout au CONTENU du registre F
Syntaxe
addwf f , d ; (w) + (f) -> (d)

Messaoudi K. - 2011/2012

67

Informatique Industrielle 1

ME17

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


Exemple
movlw
movwf
movlw
addwf

12
mavariable
25
mavariable,f

;
;
;
;
;

charger 12
mavariable
charger 25
rsultat :
rsultat =

dans W
vaut maintenant 12
dans W
(W) + (mavariable), donc 25+12
37 sauv dans mavariable (,f).

V.9. Linstruction SUBLW (SUBtract W from Literal)


Attention, ici il y a un pige. Linstruction aurait du sappeler SUBWL. En effet, on soustrait W de
la valeur littrale, et pas linverse.
Syntaxe
sublw k ; k (W) -> (W)

Bits du registre STATUS affects : C, DC, Z


Notez ici que le bit C fonctionne de manire inverse que pour laddition. Ceci est commun la
plupart des microprocesseurs du march. Les autres utilisent parfois un bit spcifique pour la
soustraction, bit le plus souvent appel borrow (emprunt).
Si le rsultat est positif, donc, pas de dbordement : C =1. Sil y a dbordement, C est forc 0.
Ceci est logique, et sexplique en faisant une soustraction manuelle. Le bit C reprsente le 9me bit
ajout doffice la valeur initiale. Si on effectue une soustraction manuelle donnant une valeur <0,
on obtient donc une valeur finale sur 8 bits, le report obtenu venant soustraire le bit C. Si le rsultat
est >0, il ny a pas de report, le rsultat final reste donc sur 9 bits.
La formule de la soustraction est donc : k prcd dun neuvime bit 1 contenu de W = rsultat
sur 8 bits dans W avec 9me bit dans C.
Exemple 1
movlw 0x01
sublw 0x02

;
;
;
;

charger 0x01 dans W


soustraire W de 2
rsultat : 2 (W) = 2-1 = 1
Z = 0, C = 1, donc rsultat positif

Effectuons cette opration manuellement :

Comment procder ? Et bien, comme pour une soustraction dcimale. On commence par les bits de
droite : 0-1, a ne passe pas, donc on emprunte 10 (not en exposant violet), et on soustraira
videmment une unit supplmentaire au bit b1. On a donc :B 10 B1, car souvenez-vous quon
a emprunt 10 en BINAIRE. Rsultat 1. On soustrait ensuite les b1 : on aura 1 0 lemprunt,
donc 1-0-1 = 0. On continue de droite gauche jusquau 9me bit qui est le carry. Rsultat final :
B00000001 et carry 1, C.Q.F.D.
Exemple 2
movlw 0x02
sublw 0x02

; charger 0x02 dans W


; soustraire W de 2

On procde toujours de la mme manire.


Exemple 3
movlw 0x03
sublw 0x02

; charger 0x03 dans W


; soustraire W de 2

Messaoudi K. - 2011/2012

68

Informatique Industrielle 1

ME17

Procdons de la mme manire, et nous obtenons B11111111, avec le bit C 0. Et l, me ditesvous, B11111111, cest FF, pas 1. Et bien, rappelez-vous ceci : Vous DEVEZ lire le bit C pour
interprter le rsultat de votre soustraction.
Comme ce dernier vaut 0, vous tes AVERTI que le rsultat de lopration est ngatif. Or, comment
savoir la valeur absolue dun nombre ngatif ? En prenant son complment 2.
Rappelez-vous :
Complment 1 de B11111111 = B00000000 (on inverse tous les bits)
La preuve, si vous ajoutez 1 1, vous obtenez B11111111 + B00000001 = B00000000 = 0.
Vous matrisez maintenant les soustractions. Certains auront sans doute pens que jexpliquais trop
en dtail, mais mon exprience ma appris que les soustractions reprsentaient souvent un cueil
dans la ralisation de trop de programmes.
Encore un dernier dtail : Pour effectuer une soustraction de 1, vous pouvez bien entendu effectuer
une addition de 1. Le rsultat sera strictement le mme, votre charge dinterprter les bits Z et C.
Je vous laisse le faire vous-mme pour vous convaincre.
V.10. Linstruction SUBWF (SUBtract W from F)
Nous restons dans les soustractions, mais, cette fois, au lieu dun adressage immdiat, nous avons
un ADRESSAGE DIRECT.
Syntaxe :
subwf f , d ; (f) (W) -> (d)

Bits du registre STATUS affects : C , DC , Z


Exemple
movlw
movwf
movlw
subwf

0x20
mavariable
0x1F
mavariable,w

movwf autrevariable

;
;
;
;
;
;
;

charger 0x20 dans w


mettre w dans (mavariable) (0x20)
charger 0x1F dans w
(mavariable) - (w) -> (w)
0x20 0x1F = 0x01
rsultat dans w, C=1, Z=0
sauver 0x01 dans une autre variable

V.11. Linstruction ANDLW (AND Literal with W)


Cette instruction effectue une opration AND BIT A BIT entre le contenu de W et la valeur
littrale qui suit.
Syntaxe
andlw k ; avec k = octet : (w) AND k -> (w)

Bit du registre STATUS affect : Z


Exemple
movlw B11001101 ; charger w
andlw B11110000 ; effectuer un and (&)

Rappelez-vous quon effectue un AND entre chaque bit de mme rang. Seuls restent donc
positionns 1 les bits dont les 2 oprandes valent 1. Donc, le fait deffectuer un AND avec la
valeur B11110000 MASQUE les bits 0 3, et ne laisse subsister que les bits 4 7.
Tant que vous ne jonglerez pas avec lhexadcimal, je vous conseille de toujours traduire les
nombres en binaires pour toutes les instructions concernant les bits.
V.12. Linstruction ANDWF (AND W with F)
Maintenant, vous devriez avoir bien compris. De nouveau la mme opration, mais en
ADRESSAGE DIRECT. Je vais donc acclrer les explications.
Syntaxe
andwf f , d ; (f) AND (w) -> (d)

Bit du registre STATUS affect : Z

Messaoudi K. - 2011/2012

69

Informatique Industrielle 1

ME17

Exemple
movlw
movwf
movlw
andwf

0xC8 ; charger 0XC8 dans w


mavariable ; sauver dans mavariable
0xF0 ; charger le masque
mavariable,f ; (mavariable) = 0xC0 (on a limin le quartet faible)

V.13. Linstruction IORLW (Inclusive OR Literal with W)


Et oui, les mmes instructions, mais pour le OU inclusif. Inclusif signifie simplement le contraire
dexclusif, cest dire que le bit de rsultat vaudra 1 si un des bits, OU LES DEUX BITS,
oprandes =1.
Syntaxe
iorlw k ; (w) OR k -> (w)

Bit du registre STATUS affect : Z


Exemple
movlw 0xC3 ; charger 0xC3 dans W
iorlw 0x0F ; FORCER les bits 0 3
; rsultat ; (w) = 0xCF

Donc, avec un ou inclusif (OR), on peut FORCER nimporte quel bit 1 (pour rappel, avec AND,
on peut forcer nimporte quel bit 0).
V.14. Linstruction IORWF (Inclusive OR W with File)
Effectue un OR entre (w) et lemplacement spcifi. Cest donc une instruction en ADRESSAGE
DIRECT. Je ne donnerai pas dexemple, vous devriez avoir compris.
Syntaxe
iorwf f , d ; (w) OR (f) -> (d)

Bit du registre STATUS affect : Z


V.15. Linstruction XORLW (eXclusive OR Literal with W)
Par opposition au ou inclusif, voici maintenant le OU EXCLUSIF. Sa table de vrit est la mme
que le ou inclusif, except que lorsque les 2 bits sont 1, le rsultat est 0.
Cette instruction peut donc servir INVERSER nimporte quel bit dun octet. En effet, si vous
effectuez 1 xor 0 , vous obtenez 1, si vous effectuez 0 xor 0 , vous obtenez 0.
Donc, si vous appliquez xor 0, la valeur de dpart est inchange.
Si par contre vous appliquez 0 xor 1 , vous obtenez 1, et avec 1 xor 1 , vous obtenez 0. En
appliquant xor 1, vous inversez le bit, quelque soit son tat initial.
Maintenant, vous pouvez donc FORCER un bit 1 avec OR, MASQUER un bit (le mettre 0) avec
AND, et lINVERSER avec XOR.
Syntaxe
xorlw k ; (w) xor k -> (w)

Bit du registre STATUS affect : Z


Exemple
movlw B11000101
xorlw B00001111

;
;
;
;

charger W
xor avec la valeur
rsultat : B 11001010
les 4 bits de poids faible ont t inverss

Remarquez que tous les bits de loctet initial ont t inverss par chaque bit du second oprande qui
tait 1.
V.16. Linstruction XORWF (eXclusive OR W with F)
Cest exactement la mme opration que XORLW, mais en ADRESSAGE DIRECT.

Messaoudi K. - 2011/2012

70

Informatique Industrielle 1

ME17

Syntaxe
xorwf f , d ; (w) xor (f) -> (d)

Bit du registre STATUS affect : Z


V.17. Linstruction BSF (Bit Set F)
Cest une instruction qui permet tout simplement de forcer directement un bit dun emplacement
mmoire 1.
Syntaxe
bsf f , b

; le bit n b est positionn dans la case mmoire (f)


; b est videmment compris entre 0 et 7

Bit du registre STATUS affect : Aucun


Exemples
bsf STATUS , C
bsf mavariable , 2

; positionne le bit C 1 dans le registre STATUS


; positionne bit 2 de (mavariable) 1

V.18. Linstruction BCF (Bit Clear F)


Cest une instruction qui permet tout simplement de forcer directement un bit dun emplacement
mmoire 0.
Syntaxe
bcf f , b

; le bit n b est mis 0 dans la case mmoire (f)


; b est videmment compris entre 0 et 7

Bit du registre STATUS affect : Aucun


Exemples
bcf STATUS , C ; positionne le bit C 0 dans le registre STATUS
bcf mavariable , 2 ; positionne b2 de (mavariable) 0

V.19. Linstruction RLF ( Rotate Left through Carry)


Rotation vers la gauche en utilisant le carry. Les oprations de dcalage sont des oprations trs
souvent utilises. Les PIC ont la particularit de ne disposer que dinstructions de ROTATION.
Vous allez voir quavec ces instructions, on peut trs facilement raliser des dcalages.
Lopration de rotation effectue lopration suivante : Le bit de carry C est mmoris. Ensuite
chaque bit de loctet est dplac vers la gauche. Lancien bit 7 sort de loctet par la gauche, et
devient le nouveau carry. Le nouveau bit 0 devient lancien carry. Il sagit donc dune rotation sur 9
bits.
Syntaxe
rlf f , d ; (f) rotation gauche avec carry-> (d)

Bit du registre STATUS affect : C


Exemple1
Un petit exemple vaut mieux quun long discours.
bsf STATUS,C ; positionne le carry 1
movlw B00010111
; charge la valeur dans w
movwf mavariable
; initialise mavariable
rlf mavariable,f
; rotation vers la gauche

Vous voyez que tous les bits ont t dcals vers la gauche. C a t rintroduit dans b0. Le
rsultat reste sur 9 bits.
Exemple 2
bcf STATUS,C
movlw b00010111
movwf mavariable
rlf mavariable,f

;
;
;
;

positionne le carry 0
charge la valeur dans w
initialise mavariable
rotation vers la gauche

Si vous avez compris, le rsultat sera B00101110, avec le carry 0. Si le carry tait 0 au dpart,
on effectue un simple dcalage vers la gauche. Que se passe-t-il si, en dcimal, on effectue ce type
dopration ?

Messaoudi K. - 2011/2012

71

Informatique Industrielle 1

ME17

Prenons le nombre 125 et dcalons-le vers la gauche en dcimal, nous obtenons 1250. Nous avons
multipli le nombre par sa base (dcimal = base 10). Et bien cest la mme chose en binaire (une
fois de plus).
Prenons B00010111 , soit 23 en dcimal. Dcalons-le, nous obtenons B00101110, soit 46. Nous
avons donc effectu une multiplication par 2. Retenez ceci, cela vous sera trs utile par la suite.
V.20. Linstruction RRF ( Rotate Right through Carry)
Rotation vers la droite en utilisant le carry. Lopration de rotation vers la droite effectue
lopration suivante : Le bit de carry C est mmoris. Ensuite chaque bit de loctet est dplac
vers la droite. Lancien bit 0 sort de loctet par la droite, et devient le nouveau carry. Lancien carry
devient le nouveau bit7. Il sagit donc galement dune rotation sur 9 bits.
Syntaxe
rrf f , d ; (f) rotation droite avec carry-> (d)

Bit du registre STATUS affect : C


Exemple1
bsf STATUS,C
movlw B00010111
movwf mavariable
rrf mavariable,f

;
;
;
;

positionne le carry 1
charge la valeur dans w
initialise mavariable
rotation vers la droite

Vous voyez que tous les bits ont t dcals vers la droite. C a t rintroduit dans b7. Le rsultat
reste sur 9 bits.
Exemple 2
bcf STATUS,C
movlw b00010111
movwf mavariable
rrf mavariable,f

;
;
;
;

positionne le carry 0
charge la valeur dans w
initialise mavariable
rotation vers la droite

Si vous avez compris, le rsultat sera B00001011, avec le carry 1. Si le carry est 0 au dpart,
on effectue un simple dcalage vers la droite.
Que sest-il pass ? Et bien notre nombre de dpart, soit 23 en dcimal est devenu 11. Le carry
reprsente le bit -1 , donc, la moiti du bit 0, donc . En effet, en dcimal, le chiffre 1
derrire les units a comme valeur 1/base, donc 1/10. En binaire ce sera donc .
Si nous regardons alors les 9 bits, nous obtenons 11 . Nous avons donc effectu une DIVISION
PAR 2. Retenez ceci, cela vous sera galement trs utile par la suite.
V.21. Linstruction BTFSC (Bit Test F, Skip if Clear)
Traduit littralement, cela donne : Teste le bit de lemplacement mmoire et saute sil vaut 0. Il
sagit ici de votre premier SAUT CONDITIONNEL, ou RUPTURE DE SEQUENCE
SYNCHRONE CONDITIONNELLE. En effet, il ny aura saut que si la condition est remplie.
Notez que dans ce cas linstruction prendra 2 cycles, sinon, elle nutilisera quun cycle. De plus, il
faut retenir que pour tous ces types de saut, ON NE SAUTE QUE lINSTRUCTION SUIVANTE.
En effet, la syntaxe ne contient pas dadresse de saut, comme nous allons le voir
Syntaxe
btfsc f, b ; on teste le bit b de la mmoire (f).
; si ce bit vaut 0, on saute linstruction suivante, sinon
; on excute linstruction suivante.
Instruction excute si faux ; si le bit vaut 0, ne sera pas excute (skip)
Poursuite du programme ; le programme continue ici

Bit du registre STATUS affect : Aucun


Exemple1
Voici un exemple dans lequel on doit excuter une seule instruction supplmentaire si le bit vaut 1.
btfsc STATUS,C
bsf mavariable,2
xxxx

Messaoudi K. - 2011/2012

; tester si le bit C du registre STATUS vaut 0


; non (C=1), alors bit 2 de mavariable mis 1
; la suite du programme est ici dans les 2 cas

72

Informatique Industrielle 1

ME17

Exemple 2
Que faire si les traitements ncessitent plusieurs instructions ? Et bien, on combine les sauts
conditionnels avec les saut inconditionnels (par exemple goto).
movlw 0x12
subwf mavariable,f
btfsc STATUS,C
goto positif
xxxx

;
;
;
;
;

charger 12 dans le registre de travail


on soustrait 0x12 de mavariable
on teste si le rsultat est ngatif (C=0)
non, alors au saute au traitement des positifs
on poursuit ici si le rsultat est ngatif

Ces procdures sont les mmes pour tous les sauts inconditionnels, je ne les dtaillerai donc pas
avec autant dexplications.
V.22. Linstruction BTFSS (Bit Test F, Skip if Set)
Traduit littralement, cela donne : Teste le bit de lemplacement mmoire et saute sil vaut 1.
Toutes les remarques de linstruction BTFSC restent valables.
Syntaxe
btfss f, b

xxxx
xxxx

;
;
;
;
;
;

on teste le bit b de la mmoire (f).


si ce bit vaut 1, on saute linstruction
suivante, sinon
on excute linstruction suivante.
si le bit vaut 1, ne sera pas excute (skip)
Le programme continue ici

Bit du registre STATUS affect : Aucun


Exemple
btfss STATUS,C
bsf mavariable,2
xxxx

; tester si le bit C du registre STATUS vaut 1


; non (C=0), alors bit 2 de mavariable mis 1
; la suite du programme est ici dans les 2 cas

V.23. Linstruction DECFSZ (DECrement F, Skip if Z)


Nous poursuivons les sauts conditionnels avec une instruction trs utilise pour crer des boucles.
Cette instruction dcrmente un emplacement mmoire et saute linstruction suivante si le rsultat
de la dcrmentation donne une valeur nulle.
Syntaxe
decfsz f, d ; (f) 1 -> (d). Saut si (d) = 0

Bit du registre STATUS affect : Aucun


Exemple1
movlw 3
movwf compteur
movlw 0x5
boucle
addwf mavariable , f
decfsz compteur , f
goto boucle
movf mavariable , w

;
;
;
;
;
;
;
;

charger 3 dans w
initialiser compteur
charger 5 dans w
tiquette
ajouter 5 ma variable
dcrmenter compteur et tester sa valeur
si compteur pas 0, on boucle
on charge la valeur obtenue dans w

Comment crit-on ce type de programme ? Et bien tout simplement de la manire suivante :


- on initialise le compteur de boucles.
- on place une tiquette de dbut de boucle
- on crit les instructions qui doivent sexcuter plusieurs fois
- linstruction decfsz permet de dterminer la fin de la boucle
- linstruction goto permet de localiser le dbut de la boucle.
ATTENTION / Si vous aviez mis
ecfsz compteur , w ; dcrmenter compteur et tester sa valeur

La boucle naurait jamais de fin, car la variable compteur ne serait jamais modifie.
- Si vous placez 0 dans le compteur de boucles, elle sera excute 256 fois. Si vous ne dsirez pas
quelle soit excute dans cette circonstance, vous devez ajouter un test AVANT lexcution de la
premire boucle, comme dans lexemple suivant :
Exemple 2
movf compteur,f

Messaoudi K. - 2011/2012

; permet de positionner Z

73

Informatique Industrielle 1
btfsc STATUS , Z
goto suite
boucle
addwf mavariable , f
decfsz compteur , f
goto boucle
suite
movf mavariable , w

ME17
;
;
;
;
;
;
;
;

sauter si Z = 0, donc si compteur >0


compteur = 0, ne pas traiter la boucle
tiquette de dbut de boucle
ajouter 5 ma variable
dcrmenter compteur et tester sa valeur
si compteur pas 0, on boucle
on saute directement ici si compteur = 0
on charge la valeur obtenue dans w

V.24. Linstruction INCFSZ (INCrement F, Skip if Zero)


Je ne vais pas dtailler cette instruction, car elle est strictement identique la prcdente, hormis le
fait quon incrmente la variable au lieu de la dcrmenter.
Syntaxe
incfsz f , d ; (f) + 1 -> (d) : saut si (d) = 0

Bit du registre STATUS affect : Aucun


V.25. Linstruction SWAPF (SWAP nibbles in F)
Nous pouvons traduire cette instruction par inverser les quartets dans F . Cette opration inverse
simplement le quartet (demi-octet) de poids faible avec celui de poids fort.
Syntaxe
swapf f , d ; inversion des b0/b3 de (f) avec b4/b7 -> (d)

Bit du registre STATUS affect : Aucun : cette particularit nous sera trs utile lorsque nous
verrons les interruptions.
Exemple
movlw 0xC5
; charger 0xC5 dans w
movwf mavariable
; placer dans mavariable
swapf mavariable , f ; (mavariable) = 0x5C

V.26. Linstruction CALL (CALL subroutine)


Cette opration effectue un saut inconditionnel vers un sous-programme. Voyons ce quest un sousprogramme. Et bien, il sagit tout simplement dune partie de programme qui peut tre appel
depuis plusieurs endroits du programme dit principal .
Le point de dpart est mmoris automatiquement, de sorte quaprs lexcution du sousprogramme, le programme continue depuis lendroit o il tait arriv. Cela parat un peu ardu, mais
cest extrmement simple. Voyez les exemples dans la description de linstruction RETURN.
Syntaxe
call etiquette ; appel de la sous-routine ladresse etiquette.

Mcanisme
Lors de lexcution de linstruction, ladresse de linstruction suivante est sauvegarde sur le
sommet dune pile (exactement comme une pile dassiettes). Lorsque la sous-routine est termine,
ladresse sauvegarde est retire de la pile et place dans le PC. Le programme poursuit alors depuis
lendroit do il tait parti.
Notez que si le sous-programme (ou sous-routine) appelle lui-mme un autre sous programme,
ladresse sera galement sauve au dessus de la pile.
Attention, cette pile a une taille limite 8 emplacements. Il nexiste aucun moyen de tester la pile,
vous devez donc grer vos sous-programmes pour ne pas dpasser 8 emplacements, sinon, votre
programme se plantera.
Notez que lorsque vous sortez dun sous-programme, lemplacement est videmment libr. La
limite nest donc pas dans le nombre de fois que vous appelez votre sous- programme, mais dans le
nombre dimbrications (sous-programme qui en appelle un autre qui en appelle un autre) etc.
Bit du registre STATUS affect : Aucun
V.27. Linstruction RETURN (RETURN from subroutine)
Retour de sous-routine. Va toujours de pair avec une instruction call. Cette instruction indique la fin
de la portion de programme considre comme sous-routine (SR). Rappelez-vous que pour chaque
instruction call rencontre, votre programme devra rencontrer une instruction return.
Messaoudi K. - 2011/2012

74

Informatique Industrielle 1

ME17

Syntaxe
return

; fin de sous-routine. Le PC est recharg depuis la pile, le


; programme poursuit ladresse qui suit la ligne call.

Bit du registre STATUS affect : Aucun


Exemples
Comme ceci est un concept trs important, je vais dtailler un peu plus. Imaginons un programme
qui a besoin dune petite temporisation (comme chaque instruction prend du temps, on peut
sarranger pour en faire perdre volontairement au programme afin de retarder son fonctionnement.
Ecrivons-la :
movlw 0xCA
movwf compteur
boucle
decfsz compteur,f
goto boucle
xxx

; valeur du compteur
; initialiser compteur de boucles
; dcrmenter compteur, sauter si 0
; boucler si pas 0
; suite du programme

Imaginons maintenant que cette petite temporisation soit appele rgulirement par notre
programme principal. Ecrivons quoi ressemble le programme principal :
xxx
xxx
xxx
xxx
tempo
xxx
xxx
xxx
tempo
xxx
xxx
tempo
xxx

;
;
;
;
;
;
;
;
;
;
;
;
;

instruction quelconque
instruction quelconque
instruction quelconque
instruction quelconque
ici, on a besoin dune tempo
instruction quelconque
instruction quelconque
instruction quelconque
ici aussi
instruction quelconque
instruction quelconque
et encore ici
instruction quelconque

La premire chose qui vient lesprit, est deffectuer un copier/coller de notre temporisation. On
obtient donc un programme comme ceci :
xxx
; instruction quelconque
xxx
; instruction quelconque
xxx
; instruction quelconque
xxx
; instruction quelconque
movlw 0xCA ; valeur du compteur
movwf compteur
; initialiser compteur de boucles
boucle
decfsz compteur,f ; dcrmenter compteur, sauter si 0
goto boucle
; boucler si pas 0
xxx
; instruction quelconque
xxx
; instruction quelconque
xxx
; instruction quelconque
movlw 0xCA
; valeur du compteur
movwf compteur
; initialiser compteur de boucles
boucle2
decfsz compteur,f ; dcrmenter compteur, sauter si 0
goto boucle2
; boucler si pas 0
xxx
; instruction quelconque
xxx
; instruction quelconque
movlw 0xCA
; valeur du compteur
movwf compteur
; initialiser compteur de boucles
boucle3
decfsz compteur,f ; dcrmenter compteur, sauter si 0
goto boucle3
; boucler si pas 0

Ceci nest pas lgant, car, si nous devons changer la valeur de notre tempo, nous devons la changer
partout dans le programme, sans oublier un seul endroit. De plus, a prend beaucoup de place.

Messaoudi K. - 2011/2012

75

Informatique Industrielle 1

ME17

On peut galement se dire : utilisons une macro , qui, rappelez-vous, effectue une substitution au
moment de lassemblage. Cest vrai, qualors, il ny a plus quun endroit modifier, mais, dans
notre PIC, le code se retrouvera cependant autant de fois quon a utilis la temporisation. Que de
place perdue, surtout si la portion de code est grande et utilise plusieurs fois.
Pour remdier ceci, nous utiliserons la technique des sous-programmes. Premire tape, modifions
notre temporisation pour en faire une sous-routine :
tempo
movlw 0xCA
movwf compteur
boucle
decfsz compteur,f
goto boucle
return

; tiquette de dbut de la sous-routine


; valeur du compteur
; initialiser compteur de boucles
; dcrmenter compteur, sauter si 0
; boucler si pas 0
; fin de la sous-routine.

Deuxime tape, nous modifions notre programme principal pour que chaque fois que nous avons
besoin dune tempo, il appelle le sous-programme. Nous obtenons :
xxx
xxx
xxx
call tempo
xxx
xxx
xxx
call tempo
xxx
xxx
call tempo
xxx

;
;
;
;
;
;
;
;
;
;
;
;

instruction quelconque
instruction quelconque
instruction quelconque
appel du sous-programme
instruction quelconque, le programme continue ici
instruction quelconque
instruction quelconque
appel du sous-programme
instruction quelconque, le programme continue ici
instruction quelconque
appel du sous-programme
instruction quelconque, le programme continue ici

Dans ce cas, la routine tempo nest prsente quune seule fois en mmoire programme. On peut
amliorer : supposons que nous dsirons une temporisation dure variable. On modifie la sousroutine en supprimant la valeur dinitialisation, et on place celle-ci dans le programme principal.
Cela sappelle un sous-programme avec passage de paramtre(s).
Exemple, notre sous-programme devient :
tempo
movwf compteur
boucle
decfsz compteur,f
goto boucle
return

; tiquette de dbut de la sous-routine


; initialiser compteur de boucles
; dcrmenter compteur, sauter si 0
; boucler si pas 0
; fin de la sous-routine.

Quant notre programme principal :


xxx
xxx
xxx
xxx
movlw 0x25
call tempo
xxx
xxx
xxx
movlw 0x50
call tempo
xxx
xxx
movlw 0x10
call tempo
xxx

;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;

instruction quelconque
instruction quelconque
instruction quelconque
instruction quelconque
charger w avec 0x25
appel du sous programme
instruction quelconque,
instruction quelconque
instruction quelconque
charger w avec 0x50
appel du sous programme
instruction quelconque,
instruction quelconque
charger w avec 0x10
appel du sous programme
instruction quelconque,

tempo dune dure de 0x25


le programme continue ici

tempo dune dure de 0x50


le programme continue ici
tempo dune dure de 0x10
le programme continue ici

Voil, maintenant vous savez ce quest un sous-programme. Enfantin, nest-ce pas ?

Messaoudi K. - 2011/2012

76

Informatique Industrielle 1

ME17

V.28. Linstruction RETLW (RETurn with Literal in W)


Retour de sous-routine avec valeur littrale dans W. Cest une instruction trs simple : elle quivaut
linstruction return, mais permet de sortir dune sous-routine avec une valeur spcifie dans W.
Syntaxe
retlw k ; (w) = k puis return

Bit du registre STATUS affect : Aucun


Exemple
test ; tiquette de dbut de notre sous-programme
btfss mavariable,0 ; teste le bit 0 de mavariable
retlw 0 ; si vaut 0, fin de sous-programme avec (w)=0
retlw 1 ; sinon, on sort avec (w) = 1
Le programme qui a appel la sous-routine connat donc le rsultat de lopration en lisant le
registre w .
V.29. Linstruction RETFIE (RETurn From IntErrupt)
Cette instruction indique un retour dinterruption (nous verrons ultrieurement ce que sont les
interruptions). Cette instruction agit dune manire identique RETURN, except que les
interruptions sont remises automatiquement en service au moment du retour au programme
principal.
Syntaxe
retfie ; retour dinterruption

Bit du registre STATUS affect : Aucun


V.30. Linstruction CLRF (CLeaR F)
Cette instruction efface lemplacement mmoire spcifi
Syntaxe
clrf f ; (f) = 0

Bit du registre STATUS affect : Z : Vaut donc toujours 1 aprs cette opration.
Exemple
Clrf mavariable ; (mavariable) = 0

V.31. Linstruction CLRW (CLeaR W)


Cette instruction efface w
Syntaxe
clrw ; (w) = 0

Cest une instruction qui nest pas vraiment indispensable, car on pourrait utiliser linstruction
movlw 0 . Cependant, la diffrence de movlw 0, clrw positionne le bit Z.
Bit du registre STATUS affect : Z : Vaut donc toujours 1 aprs cette opration.
V.32. Linstruction CLRWDT (CLeaR WatchDog)
Remet 0 le chien de garde (watchdog) de votre programme. Nous aborderons la mise en uvre du
watchdog ultrieurement. Sachez cependant que cest un mcanisme trs pratique qui permet de
provoquer un reset automatique de votre PIC en cas de plantage du programme (parasite par
exemple).
Le mcanisme est simple comprendre : il sagit pour votre programme denvoyer cette instruction
intervalles rguliers. Si la commande nest pas reue dans le dlai imparti, le PIC redmarre
ladresse 0x00. Cest exactement le mcanisme utilis par les conducteurs de train qui doivent
presser un bouton intervalle rgulier. Si le bouton nest pas press, le train sarrte. On dtecte
ainsi si le conducteur est toujours dans ltat dattention requis.
Syntaxe
clrwdt ; remet le timer du watchdog 0

Bit du registre STATUS affect : Aucun

Messaoudi K. - 2011/2012

77

Informatique Industrielle 1

ME17

V.33. Linstruction COMF (COMplement F)


Effectue le complment 1 de lemplacement mmoire spcifi. Donc, inverse tous les bits de
loctet dsign.
Syntaxe
comf f , d ; NOT (f) -> (d)

Bit du registre STATUS affect : Z


Exemple
movlw B11001010
movwf mavariable
comf mavariable,w

;
;
;
;

charge valeur dans W


initialise mavariable
charge linverse de mavariable dans W
(W) = B00110101

Astuce : en utilisant cette instruction, on peut galement tester si mavariable vaut 0xFF. En effet, si
cest le cas, W vaudra 0 et Z vaudra donc 1.
V.34. Linstruction SLEEP (Mise en sommeil)
Place le PIC en mode de sommeil. Il ne se rveillera que sous certaines conditions que nous verrons
plus tard.
Syntaxe
sleep ; arrt du PIC

Bit du registre STATUS affect : T0, PD


V.35. Linstruction NOP (No Operation)
Comme vous devez tre fatigu, et moi aussi, je vous prsente linstruction qui ne fait rien, qui ne
positionne rien, et qui ne modifie rien. On pourrait croire quelle ne sert rien. En fait elle est
surtout utilise pour perdre du temps, par exemple pour attendre une ou deux instructions, le temps
quune acquisition ai pu se faire, par exemple. Nous lutiliserons donc loccasion.
Syntaxe
nop ; tout simplement

Ceci termine lanalyse des 35 instructions utilises normalement dans les PIC mid-range.
Ceci peut vous paratre ardu, mais en pratiquant quelque peu, vous connatrez trs vite toutes ces
instructions par coeur. Pensez pour vous consoler que certains processeurs CISC disposent de
plusieurs centaines dinstructions.
V.36. Les instructions obsoltes
Il reste 2 instructions qui taient utilises dans les prcdentes versions de PIC. Elles sont encore
reconnues par le PIC16F84 mais leur utilisation est dconseille par Microchip. En effet, leur
compatibilit future nest pas garantie. Il sagit de linstruction OPTION, qui place le contenu du
registre W dans le registre OPTION_REG, et de linstruction TRIS, qui place le contenu de W
dans le registre TRISA ou TRISB suivant quon utilise TRIS PORTA ou TRIS PORTB.
Ces instructions ne sont plus ncessaires actuellement, car ces registres sont dsormais accessibles
directement laide des instructions classiques. Je vous conseille donc fortement dviter de les
utiliser, sous peine de rencontrer des problmes avec les futures versions de PIC de Microchip.
Je ne vous les ai donc prsentes que pour vous permettre de comprendre un ventuel programme
crit par quelquun dautre qui les aurait utilises.
VI. Les modes dadressage
Les instructions utilisent toutes une manire particulire daccder aux informations quelles
manipulent. Ces mthodes sont appeles modes dadressage .
Je vais simplement donner un petit exemple concret de ce quest chaque mode dadressage.
Supposons que vous vouliez mettre de largent dans votre poche :
VI.1. Ladressage littral ou immdiat
Avec l ADRESSAGE IMMEDIAT ou ADRESSAGE LITTERAL, vous pouvez dire : je mets
100DA en poche. La valeur fait IMMEDIATement partie de la phrase. Jai donn
LITTERALlement la valeur concerne. Pas besoin dun autre renseignement.
Messaoudi K. - 2011/2012

78

Informatique Industrielle 1

ME17

Exemple
movlw 0x55 ; charger la valeur 0x55 dans W

VI.2. Ladressage direct


Avec l ADRESSAGE DIRECT, vous pouvez dire : je vais mettre le contenu du coffre numro 10
dans ma poche. Ici, lemplacement contenant la valeur utile est donn DIRECTement dans la
phrase. Mais il faut dabord aller ouvrir le coffre pour savoir ce que lon va effectivement mettre en
poche. On ne met donc pas en poche le numro du coffre, mais ce quil contient. Pour faire
lanalogie avec les syntaxes prcdentes, je peux dire que je mets (coffre 10) dans ma poche.
Exemple
movf 0x10 , W ; charger le contenu de lemplacement 0x10 dans W

VI.3. Ladressage indirect


Avec lADRESSAGE INDIRECT, vous pouvez dire : Le prpos du guichet numro 3 va me
donner le numro du coffre qui contient la somme que je vais mettre en poche. Ici, vous obtenez le
numro du coffre INDIRECTement par le prpos au guichet.
Vous devez donc allez demander ce prpos quil vous donne le numro du coffre que vous irez
ouvrir pour prendre largent. On ne met donc en poche, ni le numro du prpos, ni le numro du
coffre que celui-ci va vous donner. Il y a donc 2 oprations pralables avant de connatre la somme
que vous empocherez.
Cet adressage fait appel 2 registres, dont un est particulier, car il nexiste pas vraiment.
Examinons-les donc :
VI.3.1. Les registres FSR et INDF
Ceux qui suivent sont dj en train de chercher dans le tableau 4-2 aprs INDF. INDF signifie
INDirect File. Vous le voyez maintenant ? Et oui, cest le fameux registre de ladresse 0x00. Ce
registre nexiste pas vraiment, ce nest quun procd daccs particulier FSR utilis par le PIC
pour des raisons de facilit de construction lectronique interne.
Le registre FSR est ladresse 0x04 dans les 2 banques. Il nest donc pas ncessaire de changer de
banque pour y accder, quelle que soit la banque en cours dutilisation. Dans lexemple
schmatique prcdent, le prpos au guichet, cest le registre FSR. Ladressage indirect est un peu
particulier sur les PIC, puisque cest toujours la mme adresse que se trouvera ladresse de
destination. En somme, on peut dire quil ny a quun seul prpos (FSR) dans notre banque.
Comment cela se passe-t-il ?
Premirement, nous devons crire ladresse pointe dans le registre FSR. Ensuite, nous accdons
cette adresse pointe par le registre INDF. On peut donc dire que INDF est en fait le registre FSR
utilis pour accder la case mmoire. Donc, quand on veut modifier la case mmoire pointe, on
modifie FSR, quand on veut connatre ladresse de la case pointe, on accde galement FSR. Si
on veut accder au CONTENU de la case pointe, on accde via INDF. Nous allons voir tout ceci
par un petit exemple, mais avant,
ATTENTION
Le contenu du registre FSR pointe sur une adresse en 8 bits. Or, sur certains PIC, la zone RAM
contient 4 banques (16F876). Ladresse complte est donc une adresse sur 9 bits.
Ladresse complte est obtenue, en adressage DIRECT, par lajout des bits 7 et 8 sous forme de
RP0et RP1 (RP1 est inutilis pour le 16F84 car seulement 2 banques), et par lajout du bit IRP
dans le cas de ladressage INDIRECT (inutilis sur le 16F84). Veillez donc toujours laisser IRP
(dans le registre STATUS) et RP1 0 pour assurer la portabilit de votre programme.
Exemple
movlw 0x50
movwf mavariable
movlw mavariable
movwf FSR

Messaoudi K. - 2011/2012

; chargeons une valeur quelconque


; et plaons-la dans la variable mavariable
; on charge lADRESSE de mavariable, par ; exemple, dans
les leons prcdentes, ctait ; 0x0E. (W) = 0x0E
; on place ladresse de destination dans FSR.

79

Informatique Industrielle 1

movf INDF,w

ME17
; on dira que FSR POINTE sur mavariable
; charger le CONTENU de INDF dans W.

LE CONTENU DE INDF EST TRADUIT PAR LE PIC COMME ETANT LE CONTENU DE


LEMPLACEMENT MEMOIRE POINTE PAR FSR (W) = 0X50
VI.4. Quelques exemples
Pour les habitus des processeurs divers, excusez ces rptitions. Les registres sont initialiss avec
les valeurs prcdentes.
movlw mavariable

Cest de ladressage immdiat ou littral ; donc on charge la VALEUR de mavariable, ce qui


correspond en ralit son ADRESSE. Donc 0x0E est plac dans (W). Ceci se reconnat au l de
linstruction movlw. Attention, la valeur de mavariable ce nest pas son contenu.
movf mavariable , w

Cette fois, cest de ladressage DIRECT, donc, on va ladresse mavariable voir ce quil y a
lintrieur. On y trouve le CONTENU de mavariable, donc (w) = 0x50 (dans notre exemple). Pour
lassembleur, mavariable sera remplace par 0x0E , donc movf 0x0E,w
movf INDF , w

Maintenant, cest de ladressage INDIRECT. Ce mode dadressage se reconnat immdiatement par


lutilisation du registre INDF. Le PIC va voir dans le registre FSR, et lit ladresse contenue, dans ce
cas 0X0E. Il va ensuite lemplacement vis, et lit le CONTENU. Donc, dans (W) on aura le
contenu de 0x0E, soit 0x50.
movf FSR , w

Ceci est un pige. Cest en effet de ladressage DIRECT. On placera donc dans (W) le CONTENU
du registre FSR, donc 0X0E (ladresse pointe) sera mis dans (W).
Vous aurez donc constat quil n y a nulle part des modes dadressage de type index (pr et post,
avec ou sans offset). En fait, cest tout simplement parce que ce mode dadressage nexiste pas dans
les PIC de type 16F. Il vous faudra donc faire preuve dastuce pour compenser ces lacunes. Il est
logique que la facilit dapprentissage et de mise en uvre se paye par une moins grande souplesse
de cration des applications.

Messaoudi K. - 2011/2012

80

Informatique Industrielle 1

ME17

Annexe : Jeu dinstructions du 8086

MOV
PUSH
POP
XCHG
XLAT ou
XLATB

Transfert de donnes
Gnral
Dplacement dun octet ou dun mot
IN
Ecriture dun mot au sommet de la pile
OUT
Lecture dun mot au sommet de la pile
Echange doctets ou de mots
LEA
Traduction dun octet laide dune table
LDS
LES

Entres/Sorties
Lecture dun port dE/S
Ecriture dun port dE/S
Transfert dadresses
Chargement dune adresse effective
Chargement dun pointeur utilisant DS
Chargement dun pointeur utilisant ES

Transfert des flags


Transfert des 5 flags bas dans AH
LAHF
Transfert de AH dans les 5 flags bas
SAHF
PUSHF Sauvegarde des flags sur la pile
Restauration des flags partir de la pile
POPF
Instructions arithmtiques
Addition
Soustraction
Addition doctets ou de mots
Soustraction doctets ou de mots
ADD
SUB
Addition doctets ou de mots avec retenue
Soustraction doctets ou de mots avec retenue
ADC
SBB
Incrmentation de 1 dun octet / dun mot
Dcrmentation de 1 dun octet ou dun mot
INC
DEC
Ajustement ASCII de laddition
Complmentation 2 dun octet ou dun mot
AAA
NEG
Ajustement dcimal de laddition
Comparaison doctets ou de mots
DAA
CMP
Ajustement ASCII de la soustraction
Division
AAS
Division non signe doctets ou de mots
Ajustement dcimal de la soustraction
DIV
DAS
Division signe doctets ou de mots
IDIV
Multiplication
Ajustement ASCII de la division
Multiplication non signe doctets ou de mots
AAD
MUL
Conversion doctet en mot
Multiplication signe doctets ou de mots
CBW
IMUL
Conversion de mot en double mot
Ajustement ASCII de la multiplication
CWD
AAM
Instructions logiques
Logique
Dcalages
Complment 1 dun octet ou dun mot
NOT
SHL/SAL Dcalage gauche arithmtique ou logique
(octet ou mot)
ET logique de deux octets / deux mots
AND
OU logique de deux octets / deux mots
Dcalage logique droite dun octet ou dun
OR
SHR
mot
OU exclusif logique de 2 octets / 2 mots
XOR
Comparaison, laide dun ET, doctets
Dcalage arithmtique droite dun octet ou
TEST
SAR
ou de mots
dun mot
Rotations
Rotation gauche dun octet / dun mot
ROL
Rotation droite dun octet ou dun mot
ROR
Rotation gauche incluant CF (octet/mot)
RCL
Rotation droite incluant CF (octet/mot)
RCR
Instructions sur les chanes de caractres
Prfixes
Instructions
Rptition tant que CX nest pas nul
Dplacement de blocs doctets ou
REP
MOVS ou
MOVSB/MOVSW de mots
Rptition tant quil y a galit et que
Comparaison de blocs doctets ou
REPE ou
CMPS ou
CX nest pas nul
de mots
REPZ
CMPSB/CMPSW
Exploration dun bloc doctets ou
REPNE ou Rptition tant quil ny a pas galit et
SCAS ou
que CX nest pas nul
de mots
REPNZ
SCASB/SCASW
Transfert dun octet ou dun mot
LODS ou
dans AL ou AX
LODSB/LODSW
Chargement dun bloc doctets ou
STOS ou
de mots par AL ou AX
STOSB/STOSW

Messaoudi K. - 2011/2012

81

Informatique Industrielle 1

ME17

Instructions de branchements
Branchements inconditionnels
Contrles ditrations
Appel de procdure
Bouclage tant que CX _= 0
CALL
LOOP
Retour dune procdure
Bouclage tant que CX _= 0 et ZF = 1
RET
LOOPE ou
galit)
LOOPZ
Saut inconditionnel
JMP
Interruptions
LOOPNE ou Bouclage tant que CX _= 0 et ZF = 0
(ingalit) JCXZ Saut si CX est nul
LOOPNZ
Interruption logicielle
INT
Interruption si OF = 1 (overflow)
INTO
Retour dune interruption
IRET
Instructions de branchements conditionnels
Sauts conditionnels
Saut si suprieur (si CF + ZF = 0)
JA ou JNBE (1)
Saut si suprieur ou gal (si CF = 0)
JAE ou JNB (1)
Saut si infrieur (si CF = 1)
JB ou JNAE (1)
Saut si infrieur ou gal (si CF + ZF = 1)
JBE ou JNA (1)
Saut en cas de retenue (si CF = 1)
JC
Saut si gal ou nul (si ZF = 1)
JE ou JZ
JG ou JNLE (2)
Saut si plus grand (si (SF OF) + ZF = 0)
JGE ou JNL (2)
Saut si plus grand ou gal (si SF OF = 0)
JL ou JNGE (2)
Saut si plus petit (si SF OF = 1)
Saut si plus petit ou gal (si (SF OF) + ZF = 1)
JLE ou JNG (2)
Saut si pas de retenue (si CF = 0)
JNC
Saut si non gal ou non nul (si (ZF = 0)
JNE ou JNZ
Saut si pas de dpassement (si OF = 0)
JNO
Saut si parit impaire (si PF = 0)
JNP ou JPO
Saut si signe positif (si SF = 0)
JNS
Saut si dpassement (si OF = 1)
JO
Saut si parit paire (si PF = 1)
JP ou JPE
Saut si signe ngatif (si SF = 1)
JS
(1) concerne des nombres non signs. (2) concerne des nombres signs.
Instructions de contrle du 8086
Oprations sur les flags
Synchronisation avec lextrieur
Met le flag de retenue 1
Arrt du microprocesseur (sortie de cet tat
STC
HLT
par interruption ou reset)
Efface le flag de retenue
CLC
Inverse ltat du flag de retenue
Attente tant que TEST nest pas 0
CMC
WAIT
Met le flag de direction 1
Prfixe = instruction destine un
STD
ESC
(dcrmentation)
coprocesseur
Met le flag de direction 0
Prfixe= rservation du bus pour linstruction
CLD
LOCK
(incrmentation)
Autorise les interruptions sur INTR
STI
Pas dopration
Interdit les interruptions sur INTR
Pas dopration
CLI
NOP

Messaoudi K. - 2011/2012

82

Informatique Industrielle 1

ME17

Annexe 2 : Jeu dinstructions du 8086


Notes :
AL = 8-bit accumulateur
AX = 16-bit accumulateur
CX = Count register
DS = Data segment
ES = Extra segment
Above/Beow refers to unsigned value
Greater = more positive
Less = less positive (more negative) signed values
If d = 1 then to reg ; if d = 0 then from reg
If w = 1 then word instruction ; if w = 0 then byte instruction
If mod = 11 then r/m is treaded as a REG field
If mod = 00 then DISP = 0* ; disp-low and disp-high are absent
If mod = 01 then DISP = disp-low sign-extended to 16 bits, disp-high is absent
If mod = 10 then DISP = disp-high ; disp-low
If r/m = 000 then EA = (BX) + (SI) + DISP
If r/m = 001 then EA = (BX) + (DI) + DISP
If r/m = 010 then EA = (BP) + (SI) + DISP
If r/m = 011 then EA = (BX) + (DI) + DISP
If r/m = 100 then EA = (SI) + DISP
If r/m = 101 then EA = (DI) + DISP
If r/m = 110 then EA = (BP) + DISP*
If r/m = 111 then EA = (BX) + DISP
DISP follow 2nd byte of instruction (before data if required)
* except if mod = 00 and r/m = 110 then EA = disp-high ; disp-low
If sw = 01 then 16 bits of immediate data from the operand
If sw = 11 then an immediate data byte is sign extended to from the 16-bit operand
If v = 0 then count = 1 ; if v = 1 then count in (CL) x = dont care
Z is used for string primitives comparaison with ZF FLAG
001 reg 110
Segment override prefix
REG is assigned according to the following table ;
16-bit (w=1)
000 AX
001 CX
010 DX
011 BX
100 SP
101 BP
110 SI
111 DI

8-bit (w=0)
000 AL
001 CL
010 DL
011 BL
100 AH
101 CH
110 DH
111 BH

Segment
00 AL
01 CL
10 DL
11 BL

Instructions with reference the flag register file as a 16-bit object use the symbol FLAGS to
represent the file :
FLAGS = X :X :X :X (OF) : (DF) : (IF) : (SF) : (ZF) : X : (AF) : X : (PF) : X (CF)

Messaoudi K. - 2011/2012

83

Informatique Industrielle 1

ME17

Annexe A3 : Registres spciaux - SFRs


Ils permettent la gestion du circuit. Certains ont une fonction gnrale, d'autres un fonction
spcifique attache un priphrique donn. La Figure* III.3 donne la fonction de chacun des bits
de ces registres. Ils sont situs de l'adresse 00h l'adresse 0Bh dans la banque 0 et de l'adresse 80h
l'adresse 8Bh dans la banque 1. Les registres 07h et 87h n'existent pas.

Description des SFR.

INDF (00h - 80h) : Utilise le contenu de FSR pour l'accs indirect la mmoire (V.3).
TMR0 (01h) : Registre li au compteur (VII).
PCL (02h - 82h) : Contient les poids faibles du compteur de programmes (PC). Le registre
PCLATH (0Ah-8Ah) contient les poids forts.
STATUS (03h - 83h) : Il contient l'tat de l'unit arithmtique et logique ainsi que les bits de
slection des banques (Figure* III.4).
FSR (04h - 84h) : Permet l'adressage indirect (V.3)
PORTA (05h) : Donne accs en lecture ou criture au port A, 5 bits. Les sorties sont drain
ouvert. Le bit 4 peut tre utilis en entre de comptage.

Messaoudi K. - 2011/2012

84

Informatique Industrielle 1

ME17

PORTB (06h) : Donne accs en lecture ou criture au port B. Les sorties sont drain ouvert. Le
bit 0 peut tre utilis en entre d'interruption.
EEDATA (08h) : Permet l'accs aux donnes dans la mmoire EEPROM.
EEADR (09h) : Permet l'accs aux adresses de la mmoire EEPROM.
PCLATCH (0Ah - 8Ah) : Donne accs en criture aux bits de poids forts du compteur de
programme.
INTCON (0Bh - 8Bh) : Masque d'interruptions (VI).
OPTION_REG (81h) : Contient des bits de configuration pour divers priphriques.
TRISA (85h) : Indique la direction (entre ou sortie) du port A.
TRISB (86h) : Indique la direction (entre ou sortie) du port B.
EECON1 (88h) : Permet le contrle d'accs la mmoire EEPROM (VIII).
EECON2 (89h) : Permet le contrle d'accs la mmoire EEPROM (VIII).

Registre d'tai du PIC - STATUS.

Messaoudi K. - 2011/2012

85

Informatique Industrielle 1

ME17

Registre de configuration de priphriques - OPTION_REG.

Messaoudi K. - 2011/2012

86

Informatique Industrielle 1

ME17

Bibliographie

Le microprocesseur INTEL 8086 et ses priphriques (Architecture et programmation, M. T.


Benhabiles, A. FAROUKI, T. LAROUSSI, universit Mentouri Constantine.
MICROPROCESSEUR, Support de cours, J.Y. Haggge, Institut Suprieur des Etudes
Technologiques de Rads, 2003.
Architecture (1re partie), Serge Boada, Ecole dIngnieurs du Canton de Vaud, HES.SO
Haute Ecole Spcialise de Suisse Occidentale, Janvier 2003
Sites dInternet.

PIC16F8X, 18-pin Flash/EEPROM 8-Bit Microcontrollers. Documentation technique n


DS30430C du PIC. Microchip Technology Inc, 1998.

Messaoudi K. - 2011/2012

87