Uploaded by Elvis piano

Polycope Microproc Habilitation

advertisement
Université Hassiba Benbouali de Chlef ‐‐‐ Algérie
Faculté de Technologie
Département d’Electrotechnique
Les Microprocesseurs
&
Les Microcontrôleurs
__ Tome 01 __
Cours destiné aux Etudiants :
M1 & L3 Commande
M1 & L3 Génie Electrique et Informatiques Industrielle
Réalisé par : Docteur Abdallah Zegaoui
Maître de Conférences
Département ’Electrotechnique
Faculté de Technologie
Université Hassiba Benbouali de Chlef, Algérie
Avant‐propos
Ce cours est dédié aux étudiants d’Electrotechnique inscrits en troisièmes
année licence et première année Master (options Génie Electrique et
Informatique Industrielle et Commande Electrique). Il est enseigné en tant que
cours intégré en semestre 1pour les deux niveaux. Il porte sur des notions
élémentaires
et
avancées
de
l’étude
et
de
la
programmation
des
microprocesseurs, et en particuliers le 16F84 de Microchip, ainsi que sur des
notions de bases sur les microcontrôleurs.
Nous commençons le cours avec une présentation générale de l’historique
des microprocesseurs et des systèmes de numération suivis d’un résumé sur les
opérations arithmétiques des nombres signés et les opérations booliennes. Nous
traitons ensuite en détail ensuite de les architectures et les fonctions de base des
microprocesseurs, tout en induisant une explication des différents types de
mémoires. Une fois les connaissances de bases assimilées, nous continuant avec
l’étude et la programmation du PIC16F84 de Microchip ainsi que la manière dont
ce dernier s’interface avec les modules externes. Tous les modules composant ce
microcontrôleur sont introduit avec détail à savoir, le compteur de programme,
les timers, les mémoires, les ports d’entrée et de sortie, la pile du système etc.
Nous terminons ce cours avec l’étude de toutes les instructions permettant la
programmation du 16F84 en langage assembleur.
Enfin, ce cours sera publié entièrement sur le site Web de l’université
Hassiba Benbouali de Chlef.
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
I.
Table des matières
II. Historique ......................................................................................................................................... 6
III. Le système décimal .......................................................................................................................... 6
IV. Le système binaire ........................................................................................................................... 7
V. Le système hexadécimal .................................................................................................................. 8
VI. Opérations arithmétiques et nombres signés .................................................................................... 9
VII.
Les nombres signés : la soustraction ................................................................................. 10
VIII.
Les opérations booliennes ................................................................................................. 11
A.
Le complément logique ..................................................................................................... 11
B.
Le ET (AND) logique ........................................................................................................ 11
C.
Le OU (OR) logique .......................................................................................................... 12
D.
Le OU-EXCUSIF (Exclusif OR) ou XOR ........................................................................ 12
IX. Architecture basique d’un microprocesseur ................................................................................... 13
X. L'Unité Arithmétique et Logique ................................................................................................... 13
XI. L'accumulateur ou le registre de travail ......................................................................................... 14
XII.
L’unité de commande et de contrôle ................................................................................. 15
A.
l'horloge : ........................................................................................................................... 15
B.
Le compteur programme PC : ............................................................................................ 15
C.
Le registre d'instruction RI .............................................................................................. 16
D.
Le décodeur ....................................................................................................................... 16
E.
Le séquenceur .................................................................................................................... 16
XIII.
Le registre d'état ................................................................................................................ 16
XIV.
Le Compteur d'Instructions ............................................................................................... 16
XV.
Le registre d'adresses ......................................................................................................... 16
XVI.
Le Registre d'Instructions (RI) .......................................................................................... 17
XVII.
Le registre d'état ................................................................................................................ 17
XVIII.
Les registres généraux ....................................................................................................... 18
XIX.
Structure de la mémoire principale (MP) .......................................................................... 18
XX.
Exécution d’un programme ............................................................................................... 20
XXI.
Les mémoires ..................................................................................................................... 21
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
3
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
XXII.
Organisation d’une mémoire ............................................................................................. 21
XXIII.
Caractéristiques d’une mémoire ........................................................................................ 23
XXIV.
Types de mémoires ............................................................................................................ 24
A.
Mémoires mortes (ROMs) ................................................................................................. 24
B.
Mémoires vives (RAMs) : ................................................................................................. 25
C.
Les RAM statiques (SRAM) : ........................................................................................... 25
D.
Les RAM dynamiques (DRAM) : ..................................................................................... 26
XXV.
Les Microcontrôleurs : Le PIC 16F84 ............................................................................... 27
XXVI.
Introduction ....................................................................................................................... 28
XXVII.
Le Microcontrôleur 16F84................................................................................................. 28
XXVIII.
Brochage et fonctions des différentes pattes ..................................................................... 29
XXIX.
Architecture générale ......................................................................................................... 30
XXX.
Organisation de la mémoire ............................................................................................... 31
XXXI.
Mémoire de programme .................................................................................................... 31
XXXII.
Mémoire de données .......................................................................................................... 31
XXXIII.
Registres généraux ............................................................................................................. 32
A.
Registres spéciaux – SFRs (Special Function RegisterS) ................................................. 32
B.
Description des registres FSRs .......................................................................................... 33
C.
Détail des registres STATUS et OPTION ......................................................................... 34
XXXIV.
Mémoire EEPROM ........................................................................................................... 36
XXXV.
Jeu d'instructions ............................................................................................................... 36
XXXVI.
L'ALU et le registre W ...................................................................................................... 38
XXXVII.
L'Horloge ............................................................................................................... 39
XXXVIII.
Le port d' E/S PORTA ........................................................................................... 39
XXXIX.
Le port d' E/S PORTB ....................................................................................................... 40
XL.
Le Timer TMR0................................................................................................................. 40
XLI.
Le chien de garde (Le Watchdog Timer : WDT) ............................................................... 42
XLII.
Le mode SLEEP ................................................................................................................ 44
XLIII.
La mémoire EEPROM de configuration ........................................................................... 44
XLIV.
La mémoire EEPROM de données .................................................................................... 45
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
4
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
XLV.
Les interruptions ................................................................................................................ 46
XLVI.
Modes d'adressages ........................................................................................................... 46
A.
L'adressage indirect ........................................................................................................... 47
XLVII.
Le compteur programme ................................................................................................... 47
XLVIII.
Détail des 35 instructions du 16F84 .................................................................................. 48
XLIX.
Un mot sur TRIS : TRIState port....................................................................................... 61
L. ENCODAGE des INSTRUCTIONS ............................................................................................. 61
LI. Bibliographie .................................................................................................................................. 62
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
5
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
II.
Historique
En 1642, Pascale inventait la Pascaline qui est une calculatrice entièrement mécanique. Le télégraphe
optique fut inventé en 1792 par les frères Chappe. La première machine qui est un métier à tisser les cartes
perforées est inventé en 1801 par Jacquard, elle prenait en charge le langage binaire et l’enregistrement
des programmes. En 1932, le monde a vu la naissance du premier calculateur électronique qui était le
compteur à tubes. Le premier ordinateur ENIAC (Electronic Numerical Integrator And Computer) est
inventé en 1946, c’est une machine qui consommait 140kW et réalisait 5000 additions par seconde contre
500 multiplications. Les mémoires à tores magnétiques ont été réalisées en 1953 et la société Texas/Kilby
fut apparaitre le premier circuit intégré en 1957. L’entreprise américaine Intel Corporation a réalisé le
premier microprocesseur en date du 15 novembre 1971 ; c’était le fameux Intel 4040 qui embarquait 2250
transistors bipolaires, tournait à la vitesse d’horloge de 108Khz avec quatre bits. La même firme a doublé
les capacités d’Intel 4040 en un autre microprocesseur appelé Intel 8080 avec des mots de huit bits, 64
kilo Octets adressables et une horloge de 2Mhz.
L’an 1981 était le début de l’informatique grand public, dont Intel équipait le premier PC et le
MOTOROLA 68000 d’Appel II. Durant la période 1985 à 1990, le monde de l’électronique avait sur les
marchés les premiers microcontrôleurs industriels l’Intel 8051 et le MOTOROLA 68HC11. Dès 1995, la
puissance des ordinateurs permettait la vulgarisation des outils de CAO (Controller Access Object) et des
compilateurs C avec comme cible les microcontrôleurs.
Par la suite et dans les années 70 apparaissent de petites entreprises de fabrication de microprocesseurs
comme MOS Technologies avec son 6502 très inspiré du 6800 mais vendu seulement 25$ et ZILOG
avec son Z80 qui constitue une amélioration technique du 8080 (augmentation du nombre de
registres, simplification de l'alimentation...). Les autres grands constructeurs (TEXAS INSTRUMENT,
FAIRCHILD, RCA, SIGNETICS etc.) se lanceront aussi dans ce marché.
Rappel sur les systèmes de numérisation
III. Le système décimal
Pour rappel un système décimal est un système de numération qui utilise 10 chiffres (de 0 à 9) pour
générer des nombres, c’est un système en base 10. Mais dans un nombre la position des chiffres a
également une grande importance. Les chiffres les moins significatifs se situent à droite du nombre, et
leur importance augmente au fur et à mesure du déplacement vers la gauche. En effet, dans le nombre
502, le 5 à une plus grande importance que le 2. En réalité, chaque chiffre, que l’on peut appeler DIGIT,
à une valeur qui dépend de son RANG. Quel est ce rapport ? Il s’agit tout simplement de l’élévation de la
BASE utilisée élevé à la puissance de son RANG. Remarquez ici une chose très importante : le comptage
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
6
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
du rang s’effectue toujours de droite à gauche et en commençant par 0. Pour notre nombre 502, sa valeur
est donc en réalité : 502 = 2*10° + 0*101+5*10². Notez que le symbole * est utilisé pour indiquer une
opération de multiplication. Dans les microprocesseurs un nombre décimal est écrit tel quel ou sous la
forme D’xxxxxx’ dont x peut prendre les chiffres entre 0 et 9.
IV. Le système binaire
Pour un ordinateur il ne sait que distinguer entre deux niveaux : présence ou absence de tension ! Cela
veut dire que le système décimal est inadapté. Pour représenter deux niveaux logiques (niveau haut de
tension et niveau bas) il est donc obligatoire d’utiliser un système de numération à base de deux : le
système binaire qui utilise deux chiffres, le 0 et le 1 pour représenter n’importe quel nombre sous
formes d’une série de 0 et de 1. Chaque chiffre est appelé Bit (BInary uniT en anglais) et un ensemble
de huit bit est un Octet (Byte en anglais). En binaire, un nombre est représenté sous la forme B’xxxxxx’
dont x vaut un 0 ou un 1.
Comment représenter un nombre binaire !
Puissances de
216
215
214
213
212
211
210
29
28
27
26
25
24
23
22
21
20
65536
32768
16384
8192
4096
2048
1024
512
128
64
32
16
8
6
4
2
1
b16
b15
b14
b13
b12
b11
b10
b9
b8
b7
b6
b5
b4
b3
b2
b1
b0
x
x
2 (poids du
bit)
Equivalences
de puissances
de 2 en
décimal
Positions des
bits dans le
nombre
(poids du bit)
Donnée su 2
bits
Donnée sur 4
x
x
x
x
bits (quartet)
Donnée sur 8
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
bits (Octet)
Donnée sur
x
x
x
x
x
x
X
x
x
16 bits (mot =
2 octets)
Pour illustration, sur deux bits on ne peut représenter que B’00’, B’01’, B’10’ et B’11’ ce qui est
équivalent en binaire respectivement à 0, 1, 2 et 3 par une sommation des puissances de 2. A titre
d’exemple B’11’ = 1x20 + 1x21 = 3. Donc sur deux bits on ne peut représenter au maximum que le
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
7
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
nombre décimal 3. Par contre sur quatre bits (Quartet) on peut aller à B’1111’ ce qui est équivalent à
nombre 13 en décimal. A titre d’exemple le B’1001’ = 1x20 + 0x21 + 0x21 + 1x22 = 5 en décimal. Sur
quatre bits on ne peut coder en fait que les nombres naturels allant de 0 à 13 au maximum. Donc pour
coder un nombre décimal plus de 13 il nous faut plus de bits en binaire ! Une donnée, un nombre
décimal, codé sur 8 bits est appelé Octet. Donc sur un octet on peut représenter au maximum B’1111
1111’ = 1 + 2 + 4 + 8 + 16 + 32 + 64 = 127 en décimal et tout nombre supérieur à 127 nécessite plus
d’un octet pour être condé en binaire. Et sur 16 bit on peut coder un nombre décimal de moins de 65535
et plus de 65535 nécessite plus de 16 bits pour un codage en binaire.
V.
Le système hexadécimal
Ecrire des nombre en binaire par une succession de 1 et de 0 sur une taille élevée (plusieurs bits) n’est
pas facile à gérer et peut même être une source d’erreur d’écriture. Pour y remédier, il a été décidé de
scinder l’octet en deux quartets et que chaque quartet était représenté par un chiffre conformément au
tableau VVV. On a déjà vu qu’un quartet ne peut coder que les nombres décimaux de 0 à 15. Pour
qu’un quartet ne puisse être représenté que par un seul chiffre, il a été décidé de remplacer les 6
nombres de 10 à 15 par les premières lettres de l’alphabet : A, B, C, D, E et F. il est à signaler qu’un
nombre hexadécimal est précédé par le suffixe 0x. À titre d’exemple, le plus grand nombre qu’on peut
représenter sur un octet est 0xFFFF FFFF = Fx160 + Fx161 + Fx162 + Fx163 + Fx164 + Fx165 +
Fx166 + Fx167 = Fx (1+16+256+4096+65536+1048576+16777216+268435456) = 16x286331153=
4 581 298 448 c’est énorme comme nombre !
Tableau d’équivalence Binaire-Hexadécimal-Décimal :
Binaire
Hexadécimal
Décimal
B’0000’
0x0
0
B’0001’
0x1
1
B’0010’
0x2
2
B’0011’
0x3
3
B’0100’
0x4
4
B’0101’
0x5
5
B’0110’
0x6
6
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
8
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
B’0111’
0x7
7
B’1000’
0x8
8
B’1001’
0x9
9
B’1010’
0xA
10
B’1011’
0xB
11
B’1100’
0xC
12
B’1101’
0xD
13
B’1110’
0xE
14
B’1111’
0xF
15
Le codage d’un nombre sur n’importe quel système de numération ou d’un système de numération à
autre est facile à faire.
VI. Opérations arithmétiques et nombres signés
Quelque soit le système de numération adopté, les opérations arithmétique se font avec les mêmes règles
qu’en décimal.
Addition :
A titre d’exemple on fait l’addition (19+25)=44 mais en binaire.
B’
1
1 0 10 11 1’
+
B’
1 1 0 0
1’
=
B’ 1 0 1 1 0 0’
Comme indiqué sur le tableau ci-dessus :

On additionne les chiffres de droite, et on obtient : 1+1=10 car 2 n’existe pas en binaire, on écrit
0 et on reporte 1 ;
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
9
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)

On additionne 1+0+le report et on obtient 10. On écrit 0 et on reporte 1 ;

On additionne 0+0+le report et on obtient 1. On écrit 1 ;

On additionne 0+1 on obtient 1. On écrit 1 ;

On additionne 1+1+le report et on obtient 11. On écrit 1 et on reporte 1 ;

Reste le report que l’on écrit, soit 1.
La réponse est alors 101100 soit 44 en décimal. On remarque bien sûr que l’addition de deux nombres
codés sur cinq bits donne lieu à un résultat codé sur six bits. C’est normal parce que cinq bit ne suffisent
pas pour coder le nombre 44 !
On procède de la même manière pour les nombres codés en hexadécimal. Effectivement, en sachant que
0xF + 0x1 = 0x10, soit 15+1 = 16.
VII. Les nombres signés : la soustraction
Dans de nombreuses applications, on utilise la soustraction mais le signe « - » n’est pas représentable
électriquement car ce n’est qu’un concept.
Pour des nombres binaires représentés par un octet, sont considérés comme « signés » si le bit 7 représente
le signe. Dans les nombre signés, si le bit 7 est mis à 1 cela signifie que le nombre est négatif et est positif
dans le cas contraire. Cette façon de faire fait perdre un nombre, car le nombre 0 aura deux représentation,
à savoir : 10000000 (-0) et 00000000 (+0). La méthode du complément à deux nous permet d’éviter cette
perte.
En binaire, Pour rendre un nombre négatif
1) On inverse la totalité du nombre (le complément à 1).
2) On ajoute 1
On obtient alors ce qu’on appelle le COMPLEMENT A DEUX du nombre.
Pour exemple, comment avoir le nombre -5 en binaire :

On écrit 5 en binaire, soit : 00000101.

On inverse tous les bits, soit : 11111010

On ajoute 1, soit 11111010+00000001= 11111011

Et par conversion inverse, on aura :

On écrit 5 en binaire, soit : 11111011.

On inverse tous les bits, soit : 00000100

On ajoute 1, soit 00000100+00000001= 00000101 (le complément à2) ce qui donne +5 ; c’est
(le complément à 1).
(le complément à2).
(le complément à 1).
logique car -(-5)=5 !
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
10
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
Sur un octet, et dans le cas des nombres signés, on obtient les nouvelles limites suivantes :
La plus grande valeur est ‘b01111111’, soit +127.
La plus petite valeur est ‘b10000000’, soit -128.
Remarquez que les opérations continuent de fonctionner. Prenons –3 + 5
B ’11111101’ (-3)
+
B ’00000101’ (5)
----------------------------=
B’100000010’ (2)
Et là, on dit que ça ne fait pas 2 ? Et bien si, regardez bien, il y a 9 bits, or le processeur n’en gère que 8.
Le 9ème est donc tombé dans un bit spécial que nous verrons plus tard. Dans le registre du processeur, il
reste donc les 8 bits de droite, soit 2, qui est bien égal à (–3) + 5.
Maintenant, si vous avez bien suivi, vous êtes en train de vous poser la question suivante : Quand je vois
B’11111101’, est-ce que c’est –3 ou est-ce que c’est 253 ? Et bien vous ne pouvez pas le savoir sans
connaître le contexte.
Sachez que les nombres signifient uniquement ce que le concepteur du programme a décidé qu’ils
représentent. S’il travaille avec des nombres signés ou non, ou si cet octet représente tout autre chose. La
seule chose qui importe c’est de respecter les conventions que vous vous êtes fixées lors de la création de
cet octet. C’est donc au programmeur de décider de quoi il a besoin pour tel type de données.
VIII.Les opérations booliennes
Ce type d’opérations concerne ceux qui s’effectuent bit par bit sur un octet donné. Dans ce qui suit vous
trouvez un résumé des opérations indispensables à connaître dans la programmation de tout type
microcontrôleurs et essentiellement les PICs.
A.
Le complément logique
C’est la négation ou l’inversion logique, ou le NOT en anglais, mais plus précisément le complément
à 1. Elle est souvent notée « ! » devant le nombre à inverser. Son fonctionnement tout simple consiste à
inverser tous les bits de l’octet. Des 1 deviendront des 0 et vis versa. A titre d’exemple, le NOT
B’10001111’ donne ‘B01110000 ‘.
Il est à noter que pour simplifier, avant de complémenter à 1 un nombre quelconque, il faut avant
tout le coder en binaire. Le complément sert généralement à lire une valeur dont les niveaux actifs ont été
inversés dont il faut l’inverser pour avoir la vraie valeur, à réaliser des nombres négatifs …etc.
B.
Le ET (AND) logique
Un ET logique, AND et souvent noté &, est la multiplication bit à bit. Elle se réalise entre deux mots et elle multiplie chaque
bit du premier mot par le bit du même rang du second mot. D’où pour réaliser un opération ET logique, il faut disposer de
deux octets. La table de vérité d’une telle opération est présentée dans le tableau ci-après :
Bit1
0
0
1
1
Bit2
0
1
0
1
AND
0
0
0
1
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
11
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
Par simple examen de la table de vérité, on remarque que la seule possibilité pour obtenir un « 1 » est que le Bit1
AND le Bit2 soient à « 1 ». Ce qui se fait normalement par une multiplication. 1*1 = 1, 0*1 = 0, 1*0 = 0. A titre
d’exemple, b’11001100’ AND b’11110000’ donne b’11000000’. De cet exemple, on peut utiliser cette opération
pour préparer le deuxième octet de l’opération comme un masque en vu de masquer (les rendre des 0) les bits de
l’octet qui n’intéressent pas notre application. Le masque b’11110000’ choisi dans notre exemple a permet de
garder le quartet du poids le plus fort dans l’octet b’11000000’.
En résumé, on peut donc à l’aide de cette opération logique positionner un ou plusieurs bits dans un mot à 0 sans
connaître son contenu précédent.
C.
Le OU (OR) logique
Cette opération, notée généralement « | », manipule aussi deux octets et permet de positionner le résultat à 1 si
l’un des deux bits de même rang dans les deux octets est à1. Donc le bit du résultat est à 1 si le Bit1 OU le Bit2
est à 1.
La table de vérité de l’opération OR illustrant son fonctionnement est consignée dans le tableau suivant :
Bit1
0
0
1
1
Bit2
0
1
0
OR
0
1
1
1
1
Le ET logique sert, dans la programmation des microcontrôleurs, à forcer n’importe quel bit d’un octet à 1 via un
masque sans connaitre au préalable son contenu. A titre d’exemple, dans l’octet b’10001000’ on veut forcer son
sixième bit à 1 sans toucher le contenu restant. Pour cela on utilise l’opéartion avec comme masque l’octet
b’11000000’, et le résultat de l’opération sera bien sur b’11001000’.
D.
Le OU‐EXCUSIF (Exclusif OR) ou XOR
Le XOR (eXclusif OR) assume la même fonction logique OR avec un détail en plus : Pour obtenir 1, il faut que
le Bit1 soit à 1 OU que le Bit2 soit à 1 à l’EXCLUSION des deux bits ensemble. Donc si les 2 bits sont à 1, alors
le résultat sera 0 conformément à la table de vérité ci-après. Elle opère sur deux octets.
Bit1
0
0
1
1
Bit2
0
1
0
1
XOR
0
1
1
0
Cette opération sert tout simplement à inverser un ou plusieurs bits dans un mot sans toucher aux autres avec la
technique de masque dans le deuxième mot. Comme exemple b’10001000’ XOR b’11000000’ donne le résultat
b’01001000’. L’exemple illustre bien l’inversion de l’état logique des deux bits du poids fort dans le premier octet.
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
12
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
IX. Architecture basique d’un microprocesseur
Le microprocesseur ( M.P.U. : MicroProcessor Unit ; C.P.U. :
Central Processing Unit) est un circuit
intégré complexe (ensemble de millions de transistors) appartenant à la famille des Very Large Scale Intégration
(VLSI) capable d'effectuer séquentiellement et automatiquement des suites d'opérations élémentaires
(programme). Le microprocesseur remplit deux fonctions essentielles : le traitement des données et le contrôle du
système.
Le traitement de données se fait par l'unité de traitement (fonction est dédiée à l'U.A.L. : Unité Arithmétique et
Logique et ALU : Arithmetic and Logic Unit en anglais). Le traitement concerne la manipulation des données
sous formes de transfert (déplacement), opérations arithmétiques, opérations logiques.... Le contrôle du système
se traduit par des opérations de décodage et d'exécution des ordres exprimés sous forme d'instruction, c’est donc
le séquençage des opérations et c’est le rôle de l’unité de commande.
Un microprocesseur est qualifié par sa puissance qui est la capacité de traiter un grand nombre d'opérations par
seconde sur de grands nombres et en grande quantité. Cette puissance est principalement régie par les critères
suivants :
 La longueur des mots : données et instructions (on parle de largeur du bus des données).
 Le nombre d'octets que le microprocesseur peut adresser (on parle de largeur du bus des
adresses).
 La vitesse d'exécution des instructions liée à la fréquence de fonctionnement de l'horloge de
cadencement exprimée en MHZ.
Dans une unité de traitement on distingue généralement trois éléments logiques principaux :
❒ Une Unité Arithmétique et Logique (U.A.L.)
❒ Un Accumulateur. et
❒ Des registres que l'on nomme couramment : Le Compteur d'Instructions (C.I.), le Registre
d'état, le Registre d'Instructions (R.I.), le Registre d'Adresses (R.A.) et le registre
temporaire des données.
Cet ensemble est interconnecté au travers de différents bus. On trouve trois types de bus :
❒ Le bus des données (bi-directionnel)
❒ Le bus des adresses (uni-directionnel)
❒ Le bus de contrôle (bi-directionnel)
X.
LʹUnité Arithmétique et Logique
C’est un circuit complexe qui assure les fonctions logiques (ET, OU, comparaison …) ou arithmétiques (addition,
division, soustraction, …). Il permet donc de traiter et tester les données. Comme l’objectif est de développer un
programme qui gère une application voulue, toute instruction qui modifie une donnée fait toujours appel à l'UAL.
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
13
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
Comme indiqué sur la figure 01, l'entrée de L'UAL est connectée au bus interne par un ensemble de registres
"temporaires" et aussi par un registre particulier appelé "accumulateur" ou plus particulièrement le registre de travail
(Working Register, le Registre W). Alors que la sortie de l'UAL est connectée uniquement à l'entrée de
l'accumulateur. Il est à noter que les deux entrées sont précédées par une mémoire tampon appelée registres
tampons ou verrous. Ces registres, qui ne peuvent être manipulés par le programmeur et le sont totalement
transparents, permettent de stocker des octets aux entrées de l'U.A.L. c o m m e l 'UAL est constitué d'une logique
combinatoire, elle est dépourvue de moyens propres de stockage.
Figure 01: Schéma d’une ALU.
XI. Lʹaccumulateur ou le registre de travail
Le processeur utilise toujours des registres, qui sont des petites mémoires internes très rapides d'accès
utilisées pour stocker temporairement une donnée, une instruction ou une adresse. Chaque registre stocke 8,
16 ou 32 bits. Le nombre exact de registres dépend du type de processeur et varie typiquement entre une
dizaine et une centaine. Parmi les registres, le plus important est le registre accumulateur, qui est utilisé
pour stocker les résultats des opérations arithmétiques et logiques. L'accumulateur intervient dans une proportion
importante des instructions.
C'est le registre le plus important du microprocesseur, il sert systématiquement lorsque ce dernier aura besoin de
"manipuler" des données. La plupart des opérations logiques et arithmétiques sur les données font appel au
couple "UAL - accumulateur" selon la procédure établie en figure 02 suivante:
Figure 02: Procédure de fonctionnement de l’ALU.
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
14
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
Ce même registre de travail aussi sert pour les déplacements et les transferts des données d'un endroit à un autre :
de mémoire à mémoire ou de mémoire à unités d'entrée-sortie (I/O). Ce type d’actions se fait en deux temps :
source vers Accumulateur et ensuite Accumulateur vers destination.
Les instructions supportées par un accumulateur sont très nombreuses. Au niveau de la programmation, il
représente une grande souplesse d'utilisation. Les autres registres du microprocesseur ne permettent que des
opérations limitées. A signaler que certains microprocesseur, possèdent des accumulateurs de longueur double
qui présentent l’avantage de : les opérations logiques et arithmétiques se font entre accumulateurs limitant ainsi
les accès (transferts) avec l'extérieur.
Par exemple, examinons ce qu'il se passe lorsque le processeur exécute une instruction comme
``Ajouter 5 au contenu de la case mémoire d'adresse 180'' :

Le processeur lit et décode l’instruction ;

le processeur demande à la mémoire la contenu de l'emplacement 180;

la valeur lue est rangée dans l’accumulateur ;

l'unité de traitement (UAL) ajoute 5 au contenu de l’accumulateur ;

le contenu de l'accumulateur est écris en mémoire à l'adresse 180.

C'est l'unité de commande qui déclenche chacune de ces actions dans l'ordre.

L'addition proprement dite est effectuée par l'UAL.
XII. L’unité de commande et de contrôle
C'est l'unité de control qui supervise le déroulement de toutes les opérations au sein du processeur. Elle est
constituée principalement de :
A.
lʹhorloge :
C'est l'horloge qui génère les signaux qui permettent le cadencement et la synchronisation de toutes les
opérations. Attention, l'horloge n'est pas une montre au sens commun du terme, c'est juste un signal
carré qui a une fréquence fixe (3 Ghz par exemple), a chaque coup (front) d'horloge, le microprocesseur
(qui ne l'oublions pas n'est qu'un circuit électronique) réalise une tache élémentaire. L'exécution d'une
instruction nécessite plusieurs coups d'horloges.
B.
Le compteur programme PC :
Le compteur programme (PC : program counter) est un registre (pointeur) qui contient l'adresse de la
case mémoire où est stockée le prochain élément d'instruction qui devra être chargé dans le processeur
pour être analysé et exécuté. Au début de l'exécution d'un programme, le PC est initialisé par le
système d'exploitation à l'adresse mémoire où est stockée la première instruction du programme. Le
compteur programme est incrémenté automatiquement chaque fois qu'un élément d'instruction est chargée
dans le processeur
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
15
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
C.
Le registre dʹinstruction RI
C'est là où le CPU stocke l'instruction en cours d'exécution.
D.
Le décodeur
C'est lui qui va "décoder" l'instruction contenue dans RI et générer les signaux logiques correspondant et
les communiquer au séquenceur.
E.
Le séquenceur
Il gère le séquencement des opérations et génère les signaux de commande qui vont activer tous les
éléments qui participeront à l'exécution de l'instruction et spécialement l'ALU.
XIII. Le registre dʹétat
Le registre d'état est formé de plusieurs bits appelés drapeaux ou indicateurs (Flags) qui sont positionnés
par l'ALU après chaque opération. Par exemple l’indicateur Z indique quand il est positionné que le
résultat de l'opération est égal à Zéro. L’indicateur C indique que l'opération a généré une retenue. Le
bit N indique que le résultat est négatif …
On dispose d'un jeu d'instructions conditionnées par l'état de différents drapeaux.
XIV. Le Compteur dʹInstructions
Le compteur d’instruction, appelé encore Compteur Programme (PC, Program Couter PC en anglais.) ou
Compteur Ordinal (C.O.) a pour mission de Pointer TOUJOURS le premier octet d'une instruction qui doit étre
exécutée après achèvement de l’exécution de l’instruction en cours. Un programme à exécuter est une succession
d'instructions ordonnées (chaque instruction peut prendre plusieurs octets) qui se trouve rangé dans une zone
mémoire, généralement à des adresses successives. Le PC repère toujours le premier octet de chaque instruction
du programme qui doit être exécutée. Le PC est connecté au bus interne des données. L’adresse de la première
instruction est à spécifiée par le programmeur via les directives du logiciel de programmation.
Cette adresse est transmise aux circuits mémoires par l'intermédiaire du bus d'adresse via le Registre d'Adresses.
Le PC pointe toujours l'adresse du début de l'instruction suivante. Il est possible de charger le PC avec une
adresse qui ne correspond pas au déroulement séquentiel du programme et ce par les détournements conditionnel
et inconditionnel (les GOTO conditionnés ou l’appel de sous-programme).
XV. Le registre dʹadresses
Le Registre d'Adresses, RA, sert d'interface entre le bus des données interne et le bus des adresses par un pilotage
du bus d'adresses du microprocesseur. Le RA se constitue d'une longueur de 16 bits, via deux registres huit bits
chacun (partie haute et partie basse). Son contenu provient de différentes sources : Le compteur d'instruction, un
registre général ou un emplacement mémoire. Son contenu d'adresse pointe la zone mémoire utile au
microprocesseur. Une fois que le premier octet de l'instruction en cours est décodé, le contenu du compteur
d'instructions est changé et va contenir l'adresse du début de l'instruction à venir. Le contenu du Registre
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
16
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
d'adresses change. Il est à noter que le Compteur d’Instruction diffère du Registre d’Adresse. Ce changement
correspond : soit à une incrémentation du contenu afin de lire l'information complémentaire de l'instruction
en cours, soit à un chargement d'une nouvelle valeur correspondant à une nouvelle zone mémoire utilisée
temporairement par le microprocesseur (zone différente de celle où se trouve le programme). Cette nouvelle
valeur provient : soit d'une lecture en mémoire (directement ou indirectement selon les modes d'adressage
utilisés), soit d'un calcul (addition, ...).
XVI. Le Registre dʹInstructions (RI)
Le registre d'instructions contient le premier octet de l'instruction en cours d'exécution. Ce registre
est chargé pendant le cycle de base extraction-exécution. L'information r e ç u e v i a l e le bus des
données est utilisée par le décodeur d'instructions conformément au cycle de recherche exécution ci-après :

La donnée extraite de la mémoire est stockée dans le R.I. (c'est la phase extraction).

Ensuite ce contenu est interprété par le décodeur d'instructions qui agit alors sur la logique de contrôle
(c'est la phase exécution).
Cet octet indique au microprocesseur deux choses :

Une action (une lecture, une écriture ou autre ...)

Un lieu d'action (un registre, un accumulateur, une case mémoire...)
Le résultat de cette interprétation se traduit par des niveaux logiques sur le bus de contrôle.
XVII.
Le registre dʹétat
Le registre d’état, Status Register en anglais, a pour mission de stocker les résultats des tests effectués par
l'UAL après traitement sur les données. C’est un registre à bits et chaque bit nous informe d’un état bien
spécifique du microprocesseur. Un état est un indicateur, drapeau ou flag en anglais. L'existence de ces
résultats permet d'écrire des programmes avec des branchements conditionnels (nouvelle adresse dans le CI).
En fonction de l'état des bits de ce registre le microprocesseur peut, alors, exécuter des programmes
différents. Le microprocesseur prend en quelque sorte des "décisions". Le nombre de ces bits diffère d’un
constructeur à autre mais les bits les plus couramment utilisés sont :
 Le bit de retenue “Carry”: Ce bit est actif , dans le niveau logique haut, lorsque le huitième
bit du résultat de l'opération généré une retenue. Une addition de 255 et 1 sur un processeur 8 bits
génère un retenu ce qui active ce flag.
 le bit de zero: Ce bit est actif lorsque l'opération a pour effet de mettre tous les bits d'un
accumulateur ou d'un registre à la valeur logique 0 (très utilisé pour réaliser des compteurs). Aussi
pour un processeur 8 bits, l’addition de 255 et 1 donne un résultat nul dans le registre W ce qui
provoque l’activation du bit Zéro du registre Status.
 Le bit de signe: Information qui indique que le bit le plus significatif (MSB) du contenu de
l'accumulateur est un 1 logique et par suite on connait que le résultat est un nombre négatif.
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
17
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
XVIII.
Les registres généraux
En plus des 6 registres de base que possèdent tous les microprocesseurs 8 bits, il peut en exister d'autres destinés
à faciliter la tâche du programmeur. On les nomme registres généraux. Sur notre schéma fonctionnel type, nous
avons 3 registres généraux B, C et D. Ce ne sont pas des registres puissants (tel un accumulateur) puisqu'ils
n'ont pas de liaison directe avec la sortie de l'U.A.L.
Ces registres peuvent néanmoins affecter le Registre d'Etat.
Parfois, ils peuvent constituer un registre 16 bits - appelé paire de registre (ex : BC chez Intel
ou D chez Motorola). Ainsi, il est possible de réaliser des opérations sur un mot (ex : incrémentation
de la paire).
XIX. Structure de la mémoire principale (MP)
La mémoire, figure 03, est divisée en emplacements (des cases mémoires contiguës) de taille fixe
(par exemple huit bits) utilisés pour stocker instructions et données. En principe, la taille d’un
emplacement mémoire pourrait être quelconque ; en fait, la plupart des ordinateurs en service
aujourd’hui utilisent des emplacements mémoire d’un octet (“ byte ” en anglais, soit huit bits, unité
pratique pour coder un caractère par exemple).
Figure 03 : structure de la mémoire principale
Seul le processeur peut modifier l'état de la mémoire. Chaque emplacement mémoire conserve les
informations que le processeur y écrit jusqu'à coupure de l'alimentation électrique, où tout le contenu est
perdu (contrairement au contenu des mémoires externes comme les disquettes et disques durs).
Les seules opérations possibles sur la mémoire sont :

écriture d'un emplacement : le processeur donne une valeur et une adresse, et la mémoire range la
valeur à l'emplacement indiqué par l’adresse ;

lecture d'un emplacement : le processeur demande à la mémoire la valeur contenue à
l'emplacement dont il indique l'adresse. Le contenu de l'emplacement lu reste inchangé.
Finalement la structure d’un microprocesseur se résume en figure 04.
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
18
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
Figure 04 : structure de base d’un microprocesseur.
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
19
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
XX. Exécution d’un programme
Le travail d'un processeur est d'exécuter des programmes. Un programme est une suite d'instructions
écrites sur chaque ligne du programme. Une instruction peut être écrite sous différents langages de
programmation. Pour un langage de bas niveau comme l'assembleur, une instruction réalise une tache
élémentaire comme une addition par exemple. Avec un langage évolué de haut niveau comme le langage
Basic ou le C, une instruction peut réaliser un ensemble de taches qui nécessiterait plusieurs instructions
en Assembleur.
Un processeur quel qu'il soit sait exécuter un ensemble bien défini de codes machines connu sous le
jeu d'instructions. Chaque code machine est un nombre binaire de quelques octets, il correspond à une
instruction élémentaire bien définie. Sur papier, on a pris l'habitude de les représenter en hexadécimal
pour faciliter.
Par exemple, l'instruction en assembleur MOVF f,d tirée du Datasheet du microprocesseur du PIC
16F84 signifie : déplacer l’octet ‘f’ et placer le résultat dans la destination ‘d’. le code machine qui réalise
cette instruction est ’00 1000 dfff ffff’. Ce codage de l’opération est appelé OPCODE.
De nos jours, les informaticiens et les programmeurs des microprocesseurs, disposent d'un choix très
important de langages de programmation différents les uns des autres : Assembleur, Basic/Qbasic, Pascal,
C/C++, Visual Basic, Visual C++, Delphi, Java, … pour l’élaboration des différentes applications. En
fait, les lignes de programme que nous écrivons constituent ce qu'on appelle un programme source qui
sera stocké dans un fichier texte dont l'extension dépend du langage choisi (test.c pour le C, test.pas pour
le pascal, test.cpp pour le c++ etc.)
Ces programmes sources sont compréhensibles par nous mais pas par le processeur. Pour que le
processeur puisse les comprendre il faut les traduire (compiler) en langage machine qui est une suite de
codes machine. Sur les PCs, se sont les fichiers avec l'extension .exe (test.exe). Chaque langage de
programmation a son compilateur qui permet de transformer le programme source en un programme
exécutable compréhensible par le processeur. Tous les exécutables se ressemblent et le processeur ne sait
pas avec quel langage ils ont été écrits.
Avec un langage de haut niveau comme le C++, une instruction que nous écrivons peut être très
sophistiquée. C'est le compilateur C++ qui la traduit en un ensemble d'instructions élémentaires
compréhensible par le processeur.
L'intérêt du langage assembleur est que chaque instruction que nous écrivons correspond à une
instruction élémentaire du processeur. C'est comme si on travaillait directement en langage machine.
Ainsi, on sait exactement tout ce que fait le processeur lors de l'exécution d'un programme.
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
20
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
XXI. Les mémoires
Une mémoire est un composant électronique à base de semi-conducteurs permettant de stocker
(enregistrer, conserver et restituer) des informations (instructions ou variables) sous forme binaire. Ces
informations peuvent alors être écrites ou lues. La capacité de mémorisation détermine la polyvalence des
systèmes numériques et leur adaptabilité a de nombreuse situations. De nos jours, il existe des mémoires
à lecture seule appelées ROM (Read Only Memery) et d’autres à lecture/écriture improprement appelées
RAM (Random Access Memory). Le contenu d’une ROM, fixé lors de la fabrication, reste dans la
mémoire même en absence d’alimentation. Au contraire une RAM perd son contenu une fois mise hors
secteur et du coup se sont des mémoires volatiles.
Entre les deux types précédents de mémoires, existe un autre type qui ne perd pas son contenu une
non-alimenté mais ce dernier peut être modifiable par un processus industriel. A titre d’exemple, le
contenu d’une EPROM est effacé par une exposition aux rayons ultra-violets et un nouveau contenu peut
être écrit via un appareil spécialisé, les EEPROM peuvent être électriquement reprogrammées et les
mémoires flash, les EEPROM, sont rapide à reprogrammer.
Actuellement, Il existe deux types de mémoires qui se distinguent par leur technique de fabrication :
les mémoires dynamiques et les mémoires statiques. Il s’agit dans les deux cas de mémoires volatiles qui
nécessitent une alimentation pour conserver leur contenu. La mémoire dynamique est appelée DRAM
(Dymanic RAM) par opposition à la mémoire statique appelée SRAM (Static RAM). Vue leur moindre
coût et densité supérieure d’intégration, les DRAMs sont plus utilisées comme des mémoires principales
dans les ordinateurs par contre les SRAMs sont utilisées pour les caches en raison de leurs plus grande
vitesse.
Mémoire dynamique
Mémoire statique
Grande densité d’intégration
Petite densité d’intégration
Bon marché
Chère
Lente
Rapide
Mécanisme de rafraîchissent
XXII.
Organisation d’une mémoire
Le rangement d’informations dans une mémoire peut être vu sous forme d’une grille, tableau ou
matrice de dimension km. Chaque élément de la matrice est un bit. Chaque ligne de la matrice
correspond à une adresse mémoire, c'est-à-dire un emplacement mémoire et chaque colonne représente
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
21
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
un des bits de l’information stockée. Donc dans une mémoire km bits on aura 2k emplacement (adresses
ou parfois cases mémoires) mémoire et que chaque adresse abrite un mot de données de m bits (8, 16, 32
bits…). Le nombre de fils d’adresses d’un boîtier mémoire définit donc le nombre de cases mémoire que
comprend le boîtier. Le nombre de fils de données définit la taille des données que l’on peut sauvegarder
dans chaque case mémoire.
En plus du bus d’adresses et du bus de données, un boîtier mémoire comprend une entrée de commande
qui permet de définir le type d’action que l’on effectue avec la mémoire (lecture/écriture) et une entrée
de sélection qui permet de mettre les entrées/sorties du boîtier en haute impédance comme indiqué en
figure XXX.
Adresses
(K cases mém)
Mémoire
R/W
CS
Données
(k bits)
Figure 05 : circuit d’une mémoire
La figure 05 schématise un circuit mémoire ou on distingue :

les entrées d’adresses

les entrées de données

les sorties de données

les entrées de commandes :

une entrée de sélection de lecture ou d’écriture. (R/W)

et une entrée de sélection du circuit. (CS)
Une opération de manipulation de la mémoire (lecture/écriture) suit toujours le cycle illustré en figure
06 de haut en bas.

sélection de l’adresse

choix de l’opération à effectuer (R/W)

sélection de la mémoire (CS = 0)

lecture ou écriture la donnée
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
22
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
Figure 06 : Chronogramme d’un cycle de lecture/écriture.
XXIII.
Caractéristiques d’une mémoire
Les caractéristiques principales et communes à toutes les mémoires sont :
 La capacité : exprimée souvent en octet, c’est le nombre total de bits que contient la
mémoire.
 Le format des données : c’est le nombre de bits que l’on peut mémoriser par case mémoire
ou tout simplement c’est la largeur du mot mémorisable.
 Le temps d’accès : c’est le temps qui s'écoule entre l'instant où a été lancée une opération de
lecture/écriture en mémoire et l'instant où la première information est disponible sur le bus de
données.
 Le temps de cycle : il représente l'intervalle minimum qui doit séparer deux demandes
successives de lecture ou d'écriture.
 Le débit : c’est le nombre maximum d'informations lues ou écrites par seconde.
 Volatilité : elle caractérise la permanence des informations dans la mémoire. L'information
stockée est volatile si elle risque d'être altérée par un défaut d'alimentation électrique et non
volatile dans le cas contraire.
Dans une mémoire magnétique, pour accéder à une adresse ciblé, il faut dérouler la bande magnétique
jusqu’à ce que l’on trouve l’enregistrement adéquat. Cela veut dire que l’accès à l’information est
séquentiel or le temps d’accès est variable selon la position de l’information recherchée. Par contre, dans
les mémoires principales utilisées dans les systèmes à microprocesseurs sont à base de transistors, et que
le temps mis pour obtenir n’importe quelle information ne dépend pas de son adresse. L’accès à une telle
mémoire est aléatoire ou direct.
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
23
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
XXIV.
Types de mémoires
Les mémoires contiennent les programmes qui sont une série d’instruction en langage assembleur,
codées en binaires et des données qui sont des informations utilisables au cours de l’exécution du
programme.
Les caractéristiques de choix d’une mémoire sont : sa taille physique, sa vitesse (environ quelques
dizaines de ns), sa consommation et ses niveaux logiques. L’idéal est qu’elle soit à faible prix et à vitesse
élevée.
A.
Mémoires mortes (ROMs)
Ce sont des mémoires à lecture seule. L’écriture dans ce genre de mémoires nécessite un
programmateur ou une procédure assez longue que les RAMs et les informations stockées sont conservées
même lors d’une coupure subite de l’alimentation.
La figure 07 présente les différents types de mémoires mortes. Tous ces types seront définis brièvement
ci-après.
ROM
Mémoires
mortes
PROM
FPROM
OTP
EPROM
FPROM
OTP
EPROM
Figure 07 : Différents types de mémoires mortes.
Les ROMs sont réalisées en technologie MOS et bipolaire. Ces mémoires trouvent leur application
dans la conversion de code, la génération de caractères pour l’affichage sous forme de matrice de points,
le stockage de certains programmes système. La classification de ce type de mémoires peut être résumé
comme suit :
ROM (Read Only Memory): Ce sont des mémoires à masque de fabrication de diodes disposées sur
un réseau de lignes et de colonnes ou de transistors. Programmées à l’usine, elles ne peuvent pas être
reprogrammées.
PROM à fusibles ou FPROM (Programmable Read Only Memory ou Fuse PROM) sont réalisées à
partir de transistors bipolaires dont leurs liaisons entre l'émetteur et la colonne sont effectuées par
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
24
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
l’intermédiaire d’un fusible. Ce genre est à programmer par l’utilisateur et ne peuvent pas être
reprogrammées.
EPROM (Erasable Programmable Read Only Memory) en plus des avantages des PROM, ces
mémoires possèdent la possibilité de l'effacement des données par l'utilisateur.
OTP MEMORY (One Time Programmable MEMORY): programmable une seule fois à l’aide d’un
programmateur.
UVPROM (EPROM effaçable par une exposition aux ultraviolet U.V.). Ce type de mémoire est placé
dans un boîtier céramique avec fenêtre de quartz effaçable aux U.V.
EEPROM ou E2PROM (Erasable Electricaly PROM) : sont des sortes de mémoires effaçables et
reprogrammables électriquement.
EPROM FLASH : effaçable électriquement, écriture plus rapide que les EEPROM mais effacement
de toute la capacité de la mémoire en un coup. En raison de sa vitesse élevée, de sa durabilité et de sa
faible consommation, la mémoire flash est idéale pour de nombreuses applications : comme les appareils
photos numériques, les téléphones cellulaires, les imprimantes, les ordinateurs portables, les récepteurs
d’ondes radio de poche et les dispositifs d’enregistrement sonore.
B.
Mémoires vives (RAMs) :
Les mémoires vives sont volatiles à accès direct. Elles nécessitent une énergie pour stocker et garder
les données. Il existe deux types de mémoires vives : statiques et dynamiques.
C.
Les RAM statiques (SRAM) :
La réalisation interne est essentiellement faite par une matrice de bascules, figure 08 :

m bascules de large, où m est la taille du mot ;

2n bascules de long, où 2n est la capacité en mots de la mémoire.
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
25
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
Figure 08 : RAM avec 2n emplacement mémoires (mots) et chaque mot est à m bits.
D.
Les RAM dynamiques (DRAM) :
Dans cette catégorie de mémoires, les niveaux logiques sont stockés sous forme de charges électriques
dans des condensateurs. Comme le condensateur se décharge à travers des résistances de fuite, le maintien
de l’information est réalisé par une réécriture de façon régulière. Ce procédé est appelé un
rafraîchissement et qui devra se faire environ toute les deux millisecondes.
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
26
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
XXV.
Les Microcontrôleurs : Le PIC 16F84
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
27
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
XXVI.
Introduction
Un PIC (Programmable Interface Controller) est un microcontrôleur de chez Microchip, la société
américaine Technology à l’arizona. Ses caractéristiques principales sont :

Séparation des mémoires de programme et de données (architecture Harvard) ;

Communication avec l'extérieur seulement par des ports ;

Utilisation d'un jeu d'instructions réduit, d'où le nom de son architecture : RISC (Reduced
Instructions Set Construction). Les instructions sont ainsi codées sur un nombre réduit de bits, ce
qui accélère l'exécution (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 systèmes d'architecture CISC (Complex Instructions Set Construction) qui proposent plus
d'instructions donc codées sur plus de bits mais réalisant des traitements plus complexes.
Il existe trois familles de PIC : -Base-Line : Les instructions sont codées sur 12 bits, -Mid-Line : Les
instructions sont codées sur 14 bits et, -High-End : Les instructions sont codées sur 16 bits.
Un PIC est identifié par un numéro de la forme suivant : xx (L) XX yy – zz

xx : Famille du composant (12, 14, 16, 17, 18)

L : Tolérance plus importante de la plage de tension

XX : Type de mémoire de programme. XX prend la lettre C pour une
EPROM ou EEPROM, les lettres CR pour une PROM et F pour une mémoire de
type Flash.

yy : Identification

zz : Vitesse quartz de cadencement du microcontrôleur.
A titre d’exemple, un PIC 16F84 –10, s’identifie comme : 16 signifie que le PIC est de la famille MidLine ; F le PIC a une mémoire programme de type FLASH ; son type est 84 ainsi que 10 veut dire
utilisation d’un Quartz à 10MHz au maximum.
XXVII.
Le Microcontrôleur 16F84
Le 16F84 est un microcontrôleur à 08 bits avec un boîtier est un DIL (Dual In Line) de 2x9 pattes. En
dépit de sa petite taille, il est caractérisé par une architecture interne qui lui confère souplesse et vitesse
incomparables. Avec un examen de sa fiche technique, le Datasheet, ses principales caractéristiques sont :

13 lignes d’entrées/sorties, réparties en un port de 5 lignes (PortA) et un port de 8 lignes (PortB)

alimentation sous 5 Volts
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
28
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)

architecture interne révolutionnaire lui conférant une extraordinaire rapidité

une mémoire de programme pouvant contenir 1019 instructions de 14 bits chacune (allant de
l’adresse 05h à l’adresse 3FFh)

une mémoire RAM utilisateur de 68 emplacements à 8 bits (de l’adresse 0Ch à l’adresse 4Fh)

une mémoire RAM de 2x12 emplacements réservée aux registres spéciaux

une mémoire EEPROM de 64 emplacements

une horloge interne, avec un pré-diviseur et un chien de garde

possibilité d’être programmé in-circuit, c’est à dire sans qu’il soit nécessaire de le retirer du
support de l’application

vecteur de Reset situé à l’adresse 00h

un vecteur d’interruption, situé à l’adresse 04h

bus d’adresses de 13 lignes

présence d’un code de protection permettant d’en empêcher la duplication du programme

facilité de programmation, simplicité et faible prix

Soft disponible gratuitement sur le site officiel de Microship.
XXVIII. Brochage et fonctions des différentes pattes
La Figure 09 montre le brochage du circuit. Les fonctions des pattes sont les suivantes :

VSS, VDD : Alimentation

OSC1,2 :
Horloge

RA0-4 :
Port A

RB0-7 :
Port B

T0CKL :
Entrée de comptage

INT : Entrée d'interruption

MCLR :
Reset : 0V
Choix du mode : programmation : 12V - 14V, exécution : 4.5V - 5.5V.
Figure 09 : Brochage, repérage et définitions des pins.
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
29
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
XXIX.
Architecture générale
La Figure 10 présente l'architecture générale du circuit. Il est constitué des éléments suivants :

un système d'initialisation à la mise sous tension (power-up timer, …)

un système de génération d'horloge à partir du quartz externe (timing génération)

une unité arithmétique et logique (ALU)

une mémoire flash de programme de 1k "mots" de 14 bits (III.1 - XII)

un compteur de programme (program counter) et une pile (stack)

un bus spécifique pour le programme (program bus)

un registre contenant le code de l'instruction à exécuter

un bus spécifique pour les données (data bus)

une mémoire RAM contenant

les SFR (III.2.2)

68 octets de données(III.2.1)

une mémoire EEPROM de 64 octets de données (VIII)

2 ports d'entrées/sorties (VI)

un compteur (timer) (VII)

un chien de garde (watchdog) (X)
Figure 10 : Architecture générale du PIC 16F8X.
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
30
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
XXX.
Organisation de la mémoire
Les PICs contiennent une mémoire de programme et une mémoire de données. La structure Harvard
des PICs fournit un accès séparé à chacune. A signaler que pendant le même cycle machine, un accès aux
deux types est possible.
XXXI.
Mémoire de programme
Une fois chargée par un programmateur hard dans le corps du PIC par la liaison série, c'est elle qui
contient le programme à exécuter. L’organisation de cette mémoire est représentée dans la Figure 11. Elle
contient 1k "mots" de 14 bits dans le cas du PIC 16F84, même si le compteur de programme (PC) de 13
bits peut en adresser 8k. L'adresse 0000h contient le vecteur du RESET, l'adresse 0004h contient 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 mémoire. Ce sont des zones réservées par le système.
Figure 11 : Organisation de la mémoire de programme et de la pile.
XXXII.
Mémoire de données
La mémoire de donné (Data Memory) est composée de deux parties formant la RAM et une zone
EEPROM. La première contient les registres SFRs (Special Function Registers) qui permettent de
contrôler les opérations sur le circuit. La seconde contient des registres généraux, libres pour l'utilisateur
(programmeur). La dernière contient 64 octets. Il est à signaler que les instructions orientées octets ou bits
contiennent une adresse sur 7 bits pour désigner l'octet avec lequel l'instruction doit travailler. Comme à
titre d’exemple et consigné sur la Figure 12, le registre TRISA d'adresse 85h est inaccessible avec une
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
31
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
adresse sur 7 bits. C'est pourquoi le constructeur a défini deux banques. Le bit RP0, 5ième bit du registre
d'état (STATUS_Reg) permet de choisir entre les deux. Ainsi, une adresse sur 8 bits est composée de RP0
en poids fort et des 7 bits provenant de l'instruction à exécuter.
Figure 12 : Organisation de la mémoire de données.
XXXIII.
Registres généraux
Ils sont accessibles soit directement soit indirectement à travers les registres FSR et INDF (Voir les
modes d’adressage).
A.
Registres spéciaux – SFRs (Special Function RegisterS)
La Figure 13 résume la fonction de chacun des bits de registres SFRs. Le SFRs sont des registres qui
permettent la gestion du PIC dont certains ont une fonction générale et d'autres une fonction spécifique
attachée à un périphérique donné. En banque 0 (page mémoire 0) ils sont situés de l'adresse mémoire 00h
à l'adresse 0Bh par contre sont situés de l'adresse 80h à l'adresse 8Bh dans la banque 1 (deuxième page
mémoire). Les adresses mémoires 07h et 87h ne contiennent aucun registre.
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
32
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
Figure 13 : Description des registres SFR prise du datasheet du 16F84.
B.
Description des registres FSRs
Nom du
Adresse
registre
Mémoire
Fonction
INDF
00h-80h
Utilise le contenu de FSR pour l'accès indirect à la mémoire
TMR0
01h
Registre lié au compteur
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é arithmétique et logique ainsi que les bits
de sélection des banques (Figure* III.4).
FSR
04h-84h
Permet l'adressage indirect.
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
33
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
PORTA
05h
Donne accès en lecture ou écriture au port A, 5 bits. Les sorties
sont à drain ouvert. Le bit 4 peut être utilisé en entrée de comptage.
PORTB
06h
Donne accès en lecture ou écriture au port B. Les sorties sont à
drain ouvert. Le bit RB0 peut être utilisé en entrée d'interruption.
EEDATA
08h
Permet l'accès aux données dans la mémoire EEPROM.
EEADR
09h
Permet l'accès aux adresses de la mémoire EEPROM.
PCLATCH
0Ah-8Ah
Donne accès en écriture aux bits de poids forts du compteur de
programme.
INTCON
0B -8Bh
Masque d'interruptions
OPTION_REG 81h
Contient des bits de configuration pour divers périphériques.
TRISA
85h
Indique la direction (entrée ou sortie) du port A.
TRISB
86h
Indique la direction (entrée ou sortie) du port B.
EECON1
88h
Permet le contrôle d'accès à la mémoire EEPROM.
EECON2
89h
Permet le contrôle d'accès à la mémoire EEPROM.
C.
Détail des registres STATUS et OPTION
Les figures 14 et 15 présentent les registres SFRs à utilisation très importante. Il est à noter que ce sont
des registres à bits. Ces registres seront revus plus loin dans le document.
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
34
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
Figure 14 : Registre d'état du PIC 16F84 - STATUS.
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
35
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
Figure 15 : Registre de configuration de périphériques - OPTION_REG.
XXXIV.
Mémoire EEPROM
Le PIC possède une zone EEPROM de 64 octets accessibles en lecture et en écriture par le programme.
On peut y sauvegarder des valeurs, qui seront conservées même si l'alimentation est éteinte, et les
récupérer lors de la mise sous tension. Leur accès est spécifique et requiert l'utilisation de registres dédiés.
La lecture et l'écriture ne peut s'exécuter que selon des séquences particulières.
XXXV.
Jeu dʹinstructions
Les PICs sont conçus pour être programmés avec un nombre d'instructions réduit ce qui leur qualifie
par une architecture RISC (Reduced Instruction Set Computer). Cette réduction permet de limiter la taille
de leur codage et donc de la place mémoire et du temps d'exécution. La format général d’une instruction
est consigné en figure 16.
Toutes les instructions sont codées sur 14 bits. Elles sont regroupées en trois grands types

Instructions orientées octets

Instructions orientées bits
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
36
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)

Instructions de contrôle
Le registre de travail W joue un rôle particulier dans un grand nombre d'instructions.
Figure 16 : Format général d'une instruction.
Il est tout à fait clair, dans le tableau ci-après, qu’une instruction peut être présentée comme suit :
Code instruction :
Code opération
Le bit de destination
Le registre de travail
du résultat désigné par
File
la lettre « d »
XX XXXX XXXX XXXX
Instructions orientées octets
Du bit 8 au bit 13
bit 7
L’adresse mémoire du
registre file du bit 0 au
bit 6
Instructions orientées bits
Du bit 10 au bit 13
Du bit 7 au bit 9,
L’adresse mémoire du
l’adresse du bit
registre file du bit 0 au
bit 6
Instruction général littérales
Du bit 8 au bit 13
Le littérale k est valeur
et de contrôle (sauf le
immédiate du bit 0 au
GOTO et CALL)
bit 7
Les instructions CALL and
GOTO
Du bit 11 au bit 13
Le littérale k est valeur
--
--
immédiate du bit 0 au
bit 12
NB : pour d=0 résultat opération stocké dans registre W et pour d=1 résultat stocké dans registre f.
La plupart des instructions opèrent en utilisant le registre de travail W (Working register) comparable
à l’accumulateur des anciens microprocesseurs, et soit un registre file soit une valeur immédiate codée
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
37
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
sur 8 bits appelée literal. Le résultat des opérations peut être envoyé soit dans le registre W
(accumulateur) soit dans le registre sollicité (dépendant de la valeur du bit d). Un petit nombre
d’instructions opèrent en utilisant uniquement un registre (c’est le cas des instructions BCF, BSF,
BTFSC, BTFSS, CLRW, CLRWT et SLEEP).
Liste des instructions
Figure 17 : Liste des instructions.
La Figure 17 donne la liste de toutes les instructions du PIC 16F84.
XXXVI.
LʹALU et le registre W
C'est une ALU 8 Bits qui réalise les opérations arithmétique et logique entre le registre de travail W
(l’accumulateur) et n'importe quel autre registre 'File' ou constante (Literal) k. L'accumulateur W est un
registre de travail 8 bits, il n'a pas d'adresse comme les autres SFR. Pour les instructions à deux opérandes,
c'est toujours lui qui contient un des deux opérandes. Pour les instructions à un opérande, celui-ci peut
être soit W soit n'importe quel registre F. Le résultat de l'opération peut être placé soit dans le registre de
travail W soit dans le registre F.
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
38
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
XXXVII. LʹHorloge
L'horloge peut être soit interne soit externe. L'horloge interne est constituée d'un oscillateur à quartz
ou d'un oscillateur RC ce qui est illustré en figure 18.
Figure 18 : l’horloge, oscillateur à quartz à gauche et oscillateur RC à droite.
Avec l'oscillateur à Quartz, on peut avoir des fréquences allant jusqu'à 4, 10 ou 20 MHz selon le type
de µC. Le filtre passe bas RS-C2 limite les harmoniques dus à l’écrêtage et Réduit l’amplitude de
l’oscillation. (il n'est pas obligatoire). Avec un oscillateur R-C, la fréquence de l'oscillation est fixée par
Vdd, Rext et Cext. Elle peut varier légèrement d'un circuit à l'autre. Dans certaines applications, une
horloge externe au microcontrôleur peut être utilisée pour synchroniser le PIC sur un processus
particulier.
Quelque soit l'oscillateur utilisé, l'horloge système dite aussi horloge instruction est obtenue en
divisant la fréquence par 4. Ce qui est illustré dans les datasheets par le terme Fosc/4 pour désigner
l'horloge système.
Avec un quartz de 4 MHz, on obtient une horloge instruction de 1 MHz, soit le temps pour exécuter
une instruction de 1µs. par contre si on utilise un quartz de 20 MHz pour cadenser le PIC, l’orlige
instruction sera de 5 MHz soit un temps de 0,2 µs danc plus rapide !
XXXVIII. Le port dʹ E/S PORTA
Le port A désigné par PORTA est un port de 5 bits (RA0 à RA4). Chaque E/S est compatible TTL.
La configuration de direction pour chaque bit du port est déterminée avec le registre TRISA.

Le bit de rang i du TRISA = 0 oblige le bit du rang i du PORTA d’être configuré en sortie

Le bit de rang i du TRISA = 1 oblige le bit du rang i du PORTA d’être configuré en entrée
On remarque aussi que la broche RA4 est multiplexée avec l'entrée horloge du Timer0 (TMR0). Elle
peut donc être utilisée soit comme Entrée/Sortie (E/S) normale du port A, soit comme entrée horloge
pour le Timer0. Le choix se fait à l'aide du bit T0CS du registre OPTION_REG.

T0CS = 0 configure la pin RA4 comme une simple E/S normale

T0CS = 1 configure la pin RA4 comme une entrée d’une horloge externe pour le timerTMR0.
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
39
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
RA4 est une E/S à drain ouvert, si on veut l'utiliser comme sortie (pour allumer une LED par
exemple), il ne faut pas oublier de mettre une résistance externe vers Vdd. La figure 19
schématise le principe d'une sortie drain ouvert (ou collecteur ouvert). Si RA4 est positionnée à
0, l'interrupteur est fermé, la sortie est reliée à la masse, alors que si RA4 est placée à 1,
l'interrupteur est ouvert, la sortie est déconnectée d'où la nécessite de la résistance externe pour
amener le courant de l'alimentation vers la LED. La valeur de 330 Ω est donnée à titre indicatif.
Vd
330 Ω
LED
Figure 19 : Représentation de la configuration de la pin RA4 (drain ouvert).
XXXIX.
Le port dʹ E/S PORTB
Le port B désigné par PORTB est un port bidirectionnel de 8 bits (RB0 à RB7). La
configuration de direction se fait à l'aide du registre TRISB pareil que le TRISA. En entrée, la
ligne RB0 appelée aussi INT peut déclencher une interruption externe dite RB0 INTERRUPT.
En entrée aussi, une quelconque des lignes RB4 à RB7 peut déclencher l'interruption RBI
INTERRUPT.
XL.
Le Timer TMR0
Le timer0 est un registre à huit bits. Il peut assurer la fonction compteur et la fonction
temporisateur. Il est incrémenté en permanence soit par l’horloge interne Fosc/4 (mode timer)
soit par une horloge externe appliquée à la broche RA4 du port A (mode compteur). Le choix de
l'horloge se fait à l'aide du bit T0CS du registre OPTION_REG. En fonctionnement en mode
timer le bit TOCS du registre OPTION est mis à 0, et là le Tmr0 fonctionne par horloge interne.
Si le TOCS est mis à 1, le Tmr0 fonctionne en mode compteur par horloge externe appliquée à
RA4. Dans le cas de l'horloge externe, le choix du front du signal d’horloge sur lequel le TIMER
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
40
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
s'incrémente se fait via le bit TOSE du registre OPTION :TOSE = 0, incrémentation sur fronts
montants et TOSE = 1, incrémentation sur fronts descendants. Avec un cadencement de 4MHz,
pour faire clignoter une LED à une fréquence de 1Hz, il nous faut à peu près de 2000
débordement du timer0. Pour faciliter la tâche, les concepteurs ont fait recours à la notion de
prédiviseur qui n’est autre d’un diviseur d’évènements de l’horloge. Quelque soit l'horloge
choisie, on peut la passer dans un diviseur de fréquence programmable (prescaler) dont le rapport
est fixés par les bits PS0, PS1, PS2 et PSA du registre OPTION_REG (voir datasheet).
L'affectation ou non du prédiviseur se fait à l'aide du bit PSA du registre OPTION_REG : PSA
= 0, le prédiviseur est affecté au Timer0 mais si PSA = 1, pas de prédiviseur pour le timer0 car
il sera affecté au chien de garde.
Pour un PSA=0, le tableau suivant donne la valeur du prédiviseur au cas par cas (tiré du
datasheet).
PS2 PS1 PS0
0
0
0
0
0
1
0
1
0
0
1
1
1
0
0
1
0
1
1
1
0
1
1
1
/tmr0
2
4
8
16
32
64
128
256
Le prédiviseur des modules timer0/WDT (Watch Dog Timer : Chien de garde) du 16F84 est
organisé conformément à la figure 20.
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
41
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
Figure 20 : Diagramme bock du prédiviseur du tmr0/WDT
Le contenu du timer TMR0 est accessible par le registre tmr0 situé à la banque0 à l’adresse
01h. Il peut être lu ou écrit à n'importe quel moment. Après une écriture, l'incrémentation est
inhibée pendant deux cycles machine. Donc il faut tenir compte de ces deux cycles machines
dans le calcul exact du temps. Au débordement de TMR0 (passage de FF à 00), le drapeau T0IF
est placé à 1. Ceci peut déclencher l'interruption T0I si celle-ci est validée dans le registre
INTCON.
XLI. Le chien de garde (Le Watchdog Timer : WDT)
Le watchdog est un compteur huit bits incrémenté en permanence, que le processeur soit en
marche ou en mode sleep, par une horloge RC intégrée indépendante de l'horloge système.
Lorsqu’il déborde, WDT Time Out, deux situations sont possibles : en cas de fonctionnement
normal du microcontrôleur, le WDT time-out provoque un RESET ce qui permet d’éviter son
plantage une fois bloqué par un processus indésirable non contrôlé et en cas où il était en mode
SLEEP, le WDT time-out provoque un WAKE-UP, l'exécution du programme continue
normalement là où elle s'est arrêtée avant de rentrer en mode SLEEP. Cette dernière situation
est souvent exploitée pour réaliser des temporisations. La figure 21 montre le diagramme block
du WDT.
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
42
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
L'horloge du WDT est ajustée par le fabricant pour que Le Time-Out (le débordement du
WDT) sera atteint toutes les 18 ms. Par une programmation du bit PSA à 1 du registre OPTION,
on affecte au WDT un prédiviseur conformément au tableau ci-après. Le rapport du prédiviseur
est fixé par les bits PS0, PS1 et PS2 du registre OPTION_REG.
Figure 21 : Diagramme block du WDT.
PS2
0
0
0
0
1
1
1
1
PS1
0
0
1
1
0
0
1
1
PS0 /WDT
0
1
1
2
0
4
1
8
0
16
1
32
0
64
1
128
Tableau : Programmation du prédiviseur du WDT via OPTION_REG.
Pour éviter une possible Reset du microcontrôleur d’une façon répétée, il faut utiliser le WDT
avec beaucoup précaution. Pour éviter un débordement du WDT lors de l'exécution d'un
programme, deux possibilités se présentent : la première est d’inhiber le WDT d'une façon
permanente en mettant à 0 le bit WDTE dans l'EEPROM de configuration et la seconde est de
remettre le WDT à 0 périodiquement dans le programme à l'aide de l'instruction CLRWDT.
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
43
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
XLII.
Le mode SLEEP
Dans les PIC, le mode SLEEP inhibe l’horloge système ce qui provoque l’arrêt de l’exécution
du programme. Dans ce mode le PIC fonctionne avec consommation et ce à l'aide de l'instruction
SLEEP. Pour sortir du mode SLEEP, il faut provoquer un WAKE-UP par l’intermédiaire de
l’une des possibilités suivantes :

Provoquer un RESET externe par une mise de l’entrée MCLR au niveau logique 0 et du coup le
PIC reprend l'exécution du programme à partir du début ;

Un débordement du WDT si celui-ci est validémais ici le PIC reprend le programme à partir de
l'instruction qui suit l'instruction SLEEP ;

Aussi une interruption INT (sur RB0), RBI (sur RB4-RB7) ou EEI (fin d'écriture en EEPROM
de données) provoque le Wake-up. Le bit de validation de l'interruption en question doit être
validé, par contre, le WAKE-UP aura lieu quelque soit la position de bit de validation globale
GIE. Deux cas alors sont possibles:

GIE = 0, Le PIC reprend l'exécution du programme à partir de l'instruction
qui suit l'instruction SLEEP, l'interruption n'est pas prise en compte ;

GIE = 1, Le PIC exécute l'instruction qui se trouve juste après l'instruction
SLEEP puis se branche à l'adresse 0004 pour exécuter la procédure
d'interruption. Il est conseille, que dans le cas où l'instruction suivant SLEEP
n'est pas désirée, d’utiliser l'instruction NOP.
XLIII.
La mémoire EEPROM de configuration
Durant la phase de chargement du programme dans la mémoire programme du PIC, on
programme aussi une EEPROM de configuration constituée de cinq mots de 14 bits dont :

Quatre mots d’identification ( ID) à partir de l’adresse 0x2000 pouvant
contenir un repérage quelconque,

Un mot de configuration (adresse 0x2007) permettant :
o
de choisir le type de l'oscillateur pour l'horloge ;
o
de valider ou invalider le WDT timer ;
o
d’interdire la lecture des mémoires EEPROM de programme et de données via un
code de protection créé par le système.
Le mot de configuration, dans MPLAB software, est programmé par la directive __CONFIG.
Ce mot contient des fusibles conformément au registre suivant :
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
44
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
b1
b1
b1
b1
3
2
1
0
CP
CP
CP
CP
b9
b8
b7
b6
b5
b4
b3
b2
b1
b0
C
C
C
C
C
C
PWRT
WDT
FOSC
FOSC
P
P
P
P
P
P
E
E
1
0
Avec :

bits
1-0 FOSC1-FOSC0, Sélection du type d'oscillateur pour
l'horloge
-
11 : Oscillateur RC
-
10 : Oscillateur HS (High speed) : quartz haute fréquence
(jusqu'à 10 MHz)
-
01 : Oscillateur XT, c'est le mode le plus utilisé, quartz jusqu'à 4
MHz
-
00 : Oscillateur LP (Low power), consommation réduite, jusqu'à
200 kHz



bit 2 WDTE, validation du timer WDT (chien de garde)
-
1 : WDT validé
-
0 : WDT inhibé
bit 3 PWRTE, validation d'une temporisation à la mise sous tension
bit
-
1 : temporisation inhibée
-
0 : temporisation validée
13-4 CP, Protection en lecture du code
programme
XLIV.
-
1 : pas de protection
-
0 : protection activée
La mémoire EEPROM de données
La mémoire EEPROM de données est constituée de 64 octets commençant à l'adresse 0x2100
que l'on peut lire et écrire depuis un programme. Ces octets sont conservés après une coupure
de courant et sont très utiles pour conserver des paramètres semi permanents. On y accède à
l'aide des registres EEADR et EEDATA: toute lecture écriture dans le registre EEDATA se fait
dans la position mémoire pointée par EEADR. En fait EEADR contient l'adresse relative par
rapport à la page qui commence en 0x2100, autrement dit, l'adresse va de 0 à 63. Deux registres
de contrôle (EECON1 et EECON2) sont associés à la mémoire EEMROM. La durée d’écriture
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
45
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
d’un octet est de l’ordre de 10 ms, la fin de chaque écriture réussie est annoncé par le drapeau
EEIF et la remise à zéro du bit RW du registre EECON1. Le drapeau EEIF peut déclencher
l'interruption EEI si elle a été validée.
XLV.
Les interruptions
Une interruption provoque l’arrêt du programme principal pour aller exécuter une procédure
d'interruption (sous-programme). A la fin de cette procédure, le microcontrôleur reprend le
programme à l’endroit où il s’était arrêté et ce par enregistrement de l’adresse de retour dans la
pile du système par le CP. Le PIC16F84 possède quatre sources d'interruption (INTRB0, PortB,
Timer0, et écriture sur EEPROM). A chaque interruption sont associés deux bits : un bit de
validation et un drapeau (flag). Le premier permet d'autoriser ou d’interdire l'interruption, le
second permet au programmeur de savoir le type de cette interruption. Tous ces bits sont dans
le registre INTCON à part le drapeau EEIF de l'interruption EEI qui se trouve dans le registre
EECON1.
XLVI.
Modes dʹadressages
Le mode d’adressage est la façon d’accéder à une donnée qui sera utile dans le programme.
Il existe trois grands types d'accès à une donnée (figure 22) :
- Adressage immédiat : La donnée est contenue dans l'instruction. Exemple : movlw
0xC4
; Transfert la valeur 0xC4 dans W
- Adressage direct : La donnée est contenue dans un registre. Ce dernier peut être par un
nom (par exemple W) ou une adresse mémoire. Exemple : movf
0x2B, 0
;
Transfert dans W la valeur contenue à l'adresse 0x2B.
- Adressage indirect : L'adresse de la donnée est contenue dans un pointeur. Dans les
PIC, un seul pointeur est disponible pour l'adressage indirect : FSR. Contenu à l'adresse
04h dans les deux banques, il est donc accessible indépendamment du numéro de
banque. En utilisant l'adressage direct, on peut écrire dans FSR l'adresse du registre à
atteindre. FSR contenant 8 bits, on peut atteindre les deux banques du PIC 16F84. Pour
les PIC contenant quatre banques, il faut positionner le bit IRP du registre d'état qui sert
alors de 9ème bit d'adresse.
L'accès au registre d'adresse contenue dans FSR se fait en utilisant le registre INDF. Il se
trouve à l'adresse 0 dans les deux banques. Il ne s'agit pas d'un registre physique. On peut le voir
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
46
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
comme un autre nom de FSR, utilisé pour accéder à la donnée elle-même, FSR servant à choisir
l'adresse.
Exemple : movlw
movwf
Movf
0x1A
FSR
INDF, 0
; Charge 1Ah dans W
; Charge W, contenant 1Ah, dans FSR
; Charge la valeur contenue à l'adresse 1Ah dans W
Figure 22 : Adressages direct et indirect à la mémoire de données.
A.
Lʹadressage indirect
L'adressage indirect se fait par l'intermédiaire des registres FSR et INDF. Le registre INDF
n'est pas un vrai registre mais représente la case mémoire pointée par le registre d'index FSR.
Pour lire ou écrire dans une case mémoire en utilisant l'adressage indirect, on commence par
placer l'adresse dans le registre FSR, ensuite on lit/écrit dans le registre INDF.
XLVII.
Le compteur programme
Le Program Counter est un registre de 13 bits qui s'incrémente automatiquement lors de
l'exécution du programme. On peut toutefois le modifier par programme pour réaliser ce qu'on
appelle un goto calculé. On y accède par les registres PCL et PCLATH :

PCL (8 bits) est la partie basse de PC, il est accessible en lecture écriture
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
47
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)

PCH (5 bits) est la partie haute de PC, il n'est pas accessible directement. On peut toutefois le
modifier indirectement à l'aide du registre PCLATH qui est une registre SFR accessible
en lecture écriture et où seuls 5 bits sont utilisés.
XLVIII. Détail des 35 instructions du 16F84
ADDLW : ADD Literal to W
Additionne de manière immédiate le literal au contenu du registre W, et place le résultat dans
W. Le literal est un mot de 8 bits (de 00 à FF). Cette instruction affecte 3 bits du registre d’état
: le flag C (Carry), le flag DC (Digit Carry) et le flag Z (Zéro). Elle consomme un cycle d’horloge
(1µs).
Exemple de programmation : ADDLW 04
En supposant que W contienne 06 avant l’instruction, après l’instruction il contient 0A (en
hexa : 06 + 04 = 0A)
ADDWF: ADD W and File
Additionne le contenu du registre W à l’octet situé (en mémoire RAM) à l’adresse indiquée
de suite (adresse comprise entre 0C et 4F). Le résultat peut être placé soit dans le registre W si
d=0, soit dans la mémoire RAM à la place de l’octet utilisé pour faire l’addition si d=1. Le
résultat écrase toujours l’ancienne valeur de la destination d. Cette instruction affecte 3 bits du
registre d’état : le flag C, le flag DC et le flag Z et elle consomme éventuellement un cycle
d’horloge.
Exemple de programmation :
MOVF mavariable,W ;
ADDWF,0 ;
L’exemple le contenu du registre correspond à l’adresse mémoire mavariable sera mis dans
W, puis additionne mavariable au contenu de W, et range le résultat dans W. si à la place de W
on trouve 1 ou f le résultat sera rangé dans mavarible.
ANDLW : AND Literal and W
Cette instruction effectue l’opération logique ET (AND) entre la valeur immédiate du literal
et l’octet se trouvant dans le registre W. Le literal doit être un mot de 8 bits (de 00 à FF)
l’instruction affecte le bit Z du registre d’état et en matière de temps consomme un cycle
d’horloge. Il faut revoir la table de vérité d’une porte ET dans le cours de Logique et Calculateur.
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
48
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
Exemple de programmation : ANDLW A7
Si on suppose que W contienne 5C (01011100) avant l’instruction, après l’instruction W va
contenir 04 (A7 = 10100111, 5C = 01011100 et A7 AND 5C = 00000100 (04 en hexa)). Cette
instruction sert lorsque, dans un octet, on a besoin de récupérer un bit en particulier (ou certains
bits en particulier). Pour cela il suffit de préparer un masque, c’est à dire un octet composé de 0
(aux emplacements où se trouvent les bits à éliminer) et de 1 (aux emplacements où se trouvent
les bits à récupérer).
Exemple : on souhaite récupérer uniquement le bit 5 de l’octet 01111010. On prépare alors
le masque 00100000 et on fait un ET logique entre l’octet et le masque. Comme ceci :
Ce qui donne après le
01111010
(octet)
00100000
00100000
(masque)
(résultat)
Le résultat de l’opération permet donc bien de récupérer uniquement le bit 5 de
l’octet : ici c’est un 1 (00100000).
ANDWF : AND W and File
Cette instruction effectue l’opération logique ET (AND) entre l’octet se trouvant dans le
registre W et l’octet situé (en mémoire RAM) à l’adresse indiquée de suite (adresse comprise
entre 0C et 4F) ; avec comme résultat stocké dépendant de la valeur allouée à d. elle affecte le
bit Z du registre STATUS et consomme un cycle d’horloge.
Exemples de programmation :
ANDWF,0
Adresse
L’exemple effectue un ET logique entre l’octet se trouvant dans W et l’octet se trouvant à
Adresse, et range le résultat dans W. la table de vérité de la porte ET doit être révisée.
Cette instruction sert lorsque, dans un octet, on a besoin de récupérer un bit en particulier (ou
certains bits en particulier). Pour ce faire, il suffit de préparer un masque d’un octet composé de
0 aux emplacements où se trouvent les bits à éliminer et de 1 aux emplacements où se trouvent
les bits à récupérer. Si à titre d’exemple, on souhaite récupérer uniquement le bit 4 de l’octet
01111010, on prépare le masque 00010000 et on fait un ET logique entre l’octet et le masque.
Comme ceci :
01111010
00010000
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
(octet)
(masque)
49
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
Ce qui donne 00010000
(résultat)
Il est clair dans le résultat de l’opération ANDWF que seul le quatrième bit de l’octet qui est
récupérer.
BCF : Bit Clear File
C’est une instruction orientée bit, qui met à zéro le bit désigné de l’octet situé (en
mémoire RAM) à l’adresse indiquée de suite (adresse comprise entre 0C et 4F). elle n’affecte
pas le registre d’état STATUS et consomme un cycle d’horloge.
Exemples de programmation :
On suppose que l’adresse mémoire 24 contient l’octet 00001111, et que l’on veuille mettre à
zéro (Clear) le bit 2. Pour cela on écrit dans notre programme :
BCF 24,2 ;
Le résultat sera le changement de l’octet situé à l’adresse mémoire 24 de 00001111 à
00001011. Donc le deuxième bit à été mis à zéro.
BSF : Bit Set File
A l’inverse de l’instruction BCF, l’instruction BSF met à 1 (Set) le bit désigné de l’octet situé
à l’adresse mémoire indiquée de suite (adresse comprise entre 0C et 4F). pareil, cette instruction
n’affecte aucun bit du registre STATUS et consomme un cycle d’horloge.
Exemples de programmation : si dans l’exemple précédent, on fait :
BSF 24,2 ;
On aura la valeur initiale de l’octet qui était de 00001111 avant qu’il soit manipulé par
l’instruction BCF.
BTFSC : Bit Test File, Skip if Clear
C’est une instruction de contrôle orientée bits. Elle vérifie l’état logique du bit désigné de
l’octet situé à l’adresse mémoire, en RAM, indiquée de suite (adresse comprise entre 0C et 4F).
si le bit testé est à zéro l’instruction suivant BTFSC sera ignoré et par voie de conséquence sautée
et ne sera pas exécutée. L’instruction n’affecte aussi aucun bit du registre d’état STATUS et
selon que la réponse soit OUI ou NON, l’instruction prend 1 ou 2 cycles d’horloge.
Généralement l’instruction opère conformément à l’organigramme de traitement ci-après en
figure 23 :
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
50
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
Teste le bit concerné
par BTFSC/BTFSS
OUI
Est‐ce le bit
testé est à 0/1
NON
Instruction 01
Instruction 02
(Sauter instruction 01)
Figure 23 : Organigramme de traitement de l’instruction BTFSC/BTFSS.
Exemple de programmation : En supposant que l’octet dont on veut tester un bit soit situé
dans le PORTB. On veut tester l’état de la pin RB3 du registre PORTB. Si elle est à zéron on
allume une LED dans la broche RA3 du registre PORTA si on l’éteint. Pour cela il suffit d’écrire
dans notre programme :
BTFSC PORTB,3
BTFSS: Bit Test File, Skip if Set
A contrario de l’instruction BTFSC, l’instruction BTFSS vérifie l’état logique du bit désigné
de l’octet situé à l’adresse mémoire indiquée de suite (adresse comprise entre 0C et 4F). si ce bit
est à 1, ignore l’instruction suivante. Selon que le bit testé est 1 ou à 0, l’instruction prend 1 ou
2 cycles d’horloge. L’organigramme de traitement reste le même que celui indiqué sur la figure
999333.
Exemple de programmation : si on pose BTFSS PORTB,3 dans le programme, alors le bit 3
du portB sera testé et s’il est à 1 (set) l’instruction qui suit BTFSS sera ignorée.
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
51
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
CALL : CALL subroutine
C’est une instruction employée pour appel à sous-programme. Le microcontrôleur
sauvegarde l’adresse de retour dans la pile (stack), puis charge dans le PC (Program Counter
register) l’adresse à laquelle il y aura le début de la routine de sous-programme. Il peut s’agir
aussi bien d’une adresse que d’une étiquette et c’est là que démarre le sous-programme.
Tout sous-programme appelé par l’instruction CALL doit obligatoirement se terminer soit
par l’instruction RETURN, soit par l’instruction RETLW qui permettront le renvoi au
programme principal à la fin du sous-programme. Cette instruction prend deux cycles d’horloge.
L’instruction CALL fait toujours revenir le programme principal à l’endroit où il avait été
abandonné ; tandis que l’instruction GOTO provoque l’abandon total de la séquence et peut
conduire soit à une toute autre action, soit à l’arrêt total du programme. Donc à ne pas confondre
entre les deux instructions.
Rappel : La pile (stack) est une zone de mémoire ne pouvant contenir que 8 mots de 13 bits
dans le µC 16F84. Ceci limite les possibilités d’appel à sous-programmes à huit niveaux
d’imbrication. S’il y en avait un appel dans une neuvième imbrication, la première adresse de
retour serait perdue et bonjours les problèmes. Donc il faut faire très attention à cette remarque.
L’instruction CALL opère conformément à l’organigramme de traitement consigné en figure
24.
Programme principal
..................................
..................................
..................................
CALL sous-programme
..................................
..................................
..................................
Adresse de retour du sous‐
programme stockée dans la
pile avant d’exécuter CALL
Sous-programme
..................................
..................................
..................................
RETURN
Figure 24 : Organigramme de traitement de l’instruction CALL, Le sous-programme contient obligatoirement
l’instruction RETURN.
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
52
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
Exemple de programmation : si on a besoin d’un sous-programme qui fait une temporisation
de quelque secondes et qu’on appelle « Tempo » on écrit dans notre programme principal :
CALL Tempo (saute à l’adresse correspondant à Tempo).
CLRF : CLeaR File
L’instruction CLRF permet d’effacer ce qui se trouve à l’adresse mémoire indiquée de suite.
Elle affecte le bit Z du registre d’état et consomme un cycle d’horloge.
Exemples de programmation : pour mettre à zéro (initialiser) tous les bit du port B, on tappe
dans notre programme :
CLRF PORTB
CLRW: CLeaR W
Cette instruction ne concerne que le registre de travail W et qui permet de le remettre à zéro.
Elle affecte le bit Z du registre d’état et consomme un cycle d’horloge.
Exemple de programmation : on suppose que W contient la valeur 11100011 avant d’exécuter
CLRW. Après son exécution le registre W va contenir 00000000 (remise à zéro suite à
l’effacement de son contenu).
CLRWDT : CLeaR Wach Dog Timer
CLRWDT permet de mettre à zéro le compteur du chien de garde et en plus celui du prédiviseur, si celui-ci est activé. Cette instruction affecte deux bits du registre d’état ; le flag TO
(Time Out) passe à 1 et le flag PD (Power Down) passe à 1. Elle consomme un cycle d’horloge.
Exemple de programmation :
A l’instant d’exécution de l’instruction CLWDT, peu importe où en était le compteur du chien
de garde, cette instruction le fait revenir à zéro.
COMF : COMplement File
COMF effectue un complément bit à bit sur l’octet File situé à l’adresse indiquée de suite ; le
résultat sera stocké suivant la valeur de la destination d. il s’agit ici d’un complémnt logique tout
en changeant des 0 par des 1 et inversement. Cette instruction affecte le bit Z du registre d’état
STATUS et consomme un cycle d’horloge.
Exemple : le complément de 11001110 est 00110001.
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
53
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
Exemples de programmation :
COMF
3C,0 ; en supposant que l’octet situé à l’adresse 3C contient 00011110. Alors
l’instruction provoque le complément bit à bit de l’octet situé à l’adresse 3C et range le résultat
dans W du moment que d=0. Dans W on trouve après exécution 11100001.
DECF : DECrement File
DECF permet de décrémenter la valeur de l’octet situé à l’adresse mémoire indiquée de suite
(adresse comprise entre 0C et 4F) ; avec résultat stocké selon la valeur de d. Cette instruction
affecte le bit Z du registre d’état et consomme éventuellement un cycle d’horloge.
Exemples de programmation :
DECF Counter,0
(décrémente l’octet se trouvant à l’adresse Counter, et
range le résultat dans W)
La valeur contenu dans le registre relatif à l’adresse mémoire Counter sera décrémenter de 1
(Valeur – 1) et le résultat sera stocké dans W du moment que d=0.
DECFSZ: DECrement File, Skip if Zero
C’est une instruction de contrôle (test) orientée octet. Elle décrémente la valeur de l’octet
situé à l’adresse mémoire indiquée de suite (adresse comprise entre 0C et 4F), et effectue le test
: l’octet désigné a-t-il atteint zéro ? Si OUI, ignore l’instruction suivante sinon continue
l’exécution de l’instruction qui suit et qui est généralement un GOTO ou un CALL. Le résultat
du test est rangé conformément à la valeur de d. Selon qu’à la suite de la décrémentation l’octet
ait atteint ou pas la valeur zéro, l’instruction prend 1 ou 2 cycles d’horloge.
Exemple de programmation :
DECFSZ
2F,1
Décrémente l’octet situé dans l’@ mémoire 2F et range
le résultat dans l’octet concerné. Si le résultat de la
décrémentation est Zéro ignore l’instruction qui suit.
GOTO : label ; Branchement inconditionnel.
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
54
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
Permet d’aller de façon inconditionnelle à l’adresse indiquée de suite (label). Label peut être
une adresse mémoire comme une simple étiquette dans le programme. Cette instruction
interrompt l’exécution séquentielle des instructions et oblige à poursuivre le programme d’une
adresse complètement ailleurs. Contrairement à l’instruction CALL qui fait toujours revenir le
programme principal à l’endroit où il avait été abandonné, l’instruction GOTO provoque
l’abandon complet de la séquence et conduira à une toute autre action dans le programme. Elle
consomme deux cycles d’horloge.
INCF : INCrement File
A contrario de l’instruction DECF, l’instruction DECF incrémente la valeur de l’octet situé à
l’adresse mémoire indiquée de suite (adresse comprise entre 0C et 4F) ; le résultat est stocké
selon la règle de la valeur de la destination d. Cette instruction affecte le bit Z du registre d’état
STATUS et consomme un cycle d’horloge.
Exemples de programmation :
INCF 0C,0 ; incrémente l’octet situé à l’@ mémoire 0C et range le résultat dans le registre
W.
INCFSZ: INCcrement File, Skip if Zero
Incrémente la valeur de l’octet situé (en mémoire RAM) à l’adresse indiquée de suite (adresse
comprise entre 0C et 4F), et effectue un test : l’octet a-t-il atteint zéro ? Si OUI, ignore
l’instruction suivante. Le résultat est stocké conformément à la valeur de la destination d soit
dans W (d=0) soit dans l’octet File (d=1). L’instruction prend un cycle ou deux d’horloge et est
généralement suivie par GOTO ou CALL.
Exemples de programmation :
INCFSZ
compteur,0
Incrémente l’octet se trouvant à l’adresse compteur, et range le résultat dans W car d=0. Si le
résultat est zéro, ignore l’instruction qui suit.
IORLW: Inclusive OR Literal with W
Effectue une opération logique OU inclusif entre la valeur immédiate du literal et l’octet se
trouvant dans le registre W. Le résultat de l’opération se range automatiquement dans le registre
de travail W. Le literal est un mot de 8 bits (de 00 à FF). L’instruction IORLW affecte le bit Z
du registre d’état STATUS et consomme un cycle d’horloge.
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
55
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
- Table de vérité d’une porte OU inclusif :
Exemple de programmation : IORLW
A
B
Q = A OR B
0
0
0
0
1
1
1
0
1
1
1
1
B5
B5h = b’10110101’. Si par supposition W contient la valeur hexadécimale 49 (b’01001001’)
avant l’instruction IORLW. Une opération OR entre les deux octets bit à bit s’effectue comme
suit :
B5 =
10110101
49 =
01001001
OR =
11111101 (FD en hexa).
Donc après exécution de l’opération W va contenir la valeur FDh.
NB : l’instruction IORLW sert lorsque, dans un octet, on a besoin de forcer à 1 un bit en
particulier (ou certains bits en particulier). Donc on fait recours à la notion de masque, c’est à
dire on octet composé de 0 aux emplacements où se trouvent les bits à ignorer et de 1 aux
emplacements où se trouvent les bits qu’on veut forcer à 1.
Exemple : on souhaite forcer à 1 les bits 7 et 6 de l’octet 01111010.
On prépare alors le masque 11000000 et on fait un OU logique entre l’octet et le masque.
Comme ceci :
W reg (octet)
01111010
Literal (masque)
11000000
IORLW masque
11111010
Une fois forcés à 1, on peut utiliser ces bits (ou l’octet) comme on veut.
IORWF : Inclusive OR With File
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
56
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
Comme IORLW, l’instruction IORWF effectue une opération logique OU inclusif entre
l’octet se trouvant dans le registre W et l’octet situé (en mémoire RAM) à l’adresse située de
suite (adresse comprise entre 0C et 4F). Le résultat est à ranger selon la valeur que prend la
destination d. Cette instruction affecte le bit Z du registre d’état STATUS et consomme un cycle
d’horloge
Exemples de programmation :
IORWF
36,0
En supposant que le contenu de l’adresse mémoire 36 contienne la valeur C7 (11000111) et
que W contienne 69 (01101001). Il est clair qu’après l’instruction on obtient EF (11101111) qui
sera rangé dans W du moment que d=0.
NB. Cette instruction sert exactement comme IORLW à la différence que la première opère
sur un literal et la seconde sur un octet File.
MOVF : MOVe File
Cette instruction permet soit de porter dans W le contenu situé (en mémoire RAM) à l’adresse
indiquée de suite (adresse comprise entre 0C et 4F), avec l’option de programmation d=0 soit
copier l’octet sur lui-même au même emplacement de la RAM, avec l’option de programmation
d=1. Cette instruction affecte le bit Z du registre d’état STATUS et consomme un cycle
d’horloge.
Exemples de programmation : MOVF PORTA,0 ; porte le contenu du PORT A dans le
registre de travail W.
MOVLW : MOVe Literal to W
MOVLW permet de Charger de manière immédiate le literal dans le registre W. Le literal est
un mot de 8 bits (de 00 à FF). elle n’affecte aucun bit du registre STATUS et consomme un
cycle d’horloge.
Exemple de programmation : MOVLW 0A ; met 0A dans le registre de travail W, c’est àdire W va contenir le nombre binaire 00001010.
MOVWF: MOVe W to File
Cette instruction charge le contenu du registre W dans l’adresse mémoire indiquée de suite
(adresse de 0C à 4F). Elle affecte le flag Z du registre STATUS et consomme un cycle d’horloge.
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
57
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
Exemple de programmation : MOVWF 0A ; charge le contenu du W dans l’adresse RAM
0A).
NOP: No OPeration
Cette instruction demande au processeur de ne rien faire, c’est juste pour qu’il consomme un
temps d’un cycle d’horloge. On l’utilise lorsqu’on a besoin de créer des temporisations. Elle
consomme un cycle d’horloge.
Exemple de programme : NOP ; ne rien faire.
RETFIE : RETurn From IntErrupt
C’est l’instruction obligatoire pour chaque programme d’interruption. Elle permet le retour
au programme principal après exécution d’un sous-programme d’interruption. Une fois exécuté,
le compteur de programme PC sera chargé avec la valeur qui se trouve au sommet de la pile
(stack) ; ce qui provoque le retour au programme principal. Elle consomme deux cycles
d’horloge et n’affecte aucun drapeau du registre STATUS.
Exemple de programme : RETFIE.
RETLW : RETurn from subroutine with Literal in W
Cette instruction agit jusqu’à un certain point similaire à l’instruction RETURN, au sens
qu’elle ferme un sous-programme et provoque le retour au programme principal à l’endroit où
il avait été abandonné suite à un CALL ; mais avec une particularité en plus c’est de charger
dans le registre W la valeur du literal qui est un mot de 8 bits (de 00 à FF). Elle n’affecte aucun
flag du registre d’état STATUS et consomme deux cycles d’horloge.
RETURN : RETURN from subroutine
C’est l’instruction qui ferme un sous-programme et provoque le retour au programme
principal à l’endroit auquel il avait été abandonné suite à l’instruction CALL. Le PC (Program
Counter) est chargé avec l’adresse se trouvant au sommet de la pile. Elle n’affecte aucun flag du
registre d’état STATUS et consomme deux cycles d’horloge.
RLF : Rotate Left File
L’instruction RLF fait une rotation à gauche de l’octet situé de suite via le bit C (carry) du
registre STATUS. Le contenu du bit de CARRY devient le nouveau bit 0 de l’octet File ayant
effectué la rotation à gauche, tandis que son ancien bit 7 entre dans CARRY. Le résultat sera
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
58
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
rangé conformément à la valeur de d. Cette instruction affecte le bit C du registre d’état STATUS
et consomme un cycle d’horloge.
NB : Avant d’utiliser cette instruction il convient au préalable d’effacer le bit de CARRY.
Car, à supposer que dans CARRY il ait un 1, après une rotation à gauche de 00000001 on aurait
00000011 alors qu’on s’attendait à 00000010.
RRF : Rotate Right File
L’instruction RRF fait le chemin inverse de celui de ‘instruction RLF, donc une rotation à
droite en utilisant le bit Carry du registre STATUS. Même remarques que pour RLF.
SLEEP : Go into standby mode.
C’est l’instruction qui met en veille le processeur. Elle ne met pas le µC hors tension, mais
elle arrête le séquencement des instructions (ralentir le signal d’horloge jusqu’à l’extrême limite
: la fréquence zéro). Seul le chronomètre du Watch Dog (chien de garde) reste actif. La
consommation du boîtier (qui normalement est de 2 mA) tombe à 30 µA. Le µC se met en route
suite à une demande d’interruption, ou un signal provenant du chien de garde. Elle affecte deux
bits du registre d’état STATUS, le bit TO (Time Out)
passe à 1 et le bit PD (Power Down)
passe à 0 et elle consomme un cycle d’horloge. En plus, elle met à zéro le chronomètre du chien
de garde, ainsi que le pré diviseur.
SUBLW: SUBtract Literal with W
Cette instruction fait la soustraction du literal (valeur immédiate représentée par un octet
pouvant aller de 00 à FF) du contenu du registre W, et place le résultat dans W. Elle affecte trois
bits du registre d’état : le flag C
(Carry), le flag DC (Digit Carry) et le le flag Z (Zero) et
consomme un cycle d’horloge.
SUBWF : SUBtract W from File
L’instruction SUBWF soustrait la valeur contenue dans le registre W de la valeur se trouvant
(en mémoire RAM) à l’adresse indiquée de suite (adresse comprise entre 0C et 4F) ; le résultat
sera stocké selon la valeur de l’option de programmation d. Elle affecte trois bits du registre
d’état : le flag C(Carry), le flag DC (Digit Carry) et le le flag Z (Zero) et consomme un cycle
d’horloge.
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
59
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
SWAPF : SWAP File
Echange les quatre bits de poids fort d’un octet se trouvant (en mémoire RAM) à l’adresse
indiquée de suite (adresse comprise entre 00 et 4F), avec ses propres quatre bits de poids faible
: permuter les deux quartets de l’octet désigné et mettre le résultat selon la valeur de d.
l’instruction SWAPF n’affecte aucun bit du registre d’état et consomme un cycle d’horloge.
XORLW: eXclusive OR Literal with W
L’instruction effectue un OU exclusif (Exclusive OR) entre la valeur immédiate du literal et
l’octet se trouvant dans le registre W. Le résultat est rangé dans W et le literal est un mot de 8
bits (de 00 à FF). Cette instruction affecte le bit Z du registre d’état et consomme un cycle
d’horloge.
Pour rappel, un OR exclusif permet de comparer deux octets bit à bit. Si les bits de même
poids sont au même niveau, le résultat est zéro et si par contre ils sont à des niveaux différents,
le résultat est 1 et ce conformément à sa table de vérité ci-après :
A
B
Q = A XOR B
0
0
0
0
1
1
1
0
1
1
1
0
Exemple de XOR entre deux octets : (00110011) XOR (01110010) donne le résultat
(01000001).
Un XOR permet d’inverser un état logique. Exemple : Soit au départ l’octet 11111111. Si le
XOR se fait avec 00000000, rien ne change ; le résultat reste 11111111. Si par contre le XOR
se fait avec 00000001,le résultat devient 11111110. Alors que les zéros ne font rien changer,
les 1 provoquent un basculement d’état logique.
NB. Cette instruction sert lorsque, dans un octet, on a besoin d’inverser un bit en particulier
(ou certains bits en particulier). Donc on est astreint d’utiliser la technique des masques. Dans le
masque on fait des 1 logiques pour les bits dont on veut les inverser et des 0 logiques pour ceux
qu’on veut garder leurs états logiques.
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
60
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
XORWF: Exclusive OR W and File
Cette instruction opère exactement comme XORLW à la différence que XORWF compare
les bits du registre W avec le registre situé en l’adresse mémoire en RAM et indiquée de suite.
L’utilisation reste la même. Pareil, cette instruction affecte le bit Z du registre d’état STATUS
et consomme un cycle d’horloge.
XLIX.
Un mot sur TRIS : TRIState port
cette instruction est spécifique au 16F84. Microchip recommande de ne pas l’utiliser, dans le
but de laisser les programmes (écrits pour ce type de microcontrôleur) compatibles avec ceux
écrits pour d’autres modèles de PIC. Donc cette instruction permet de valiser la direction des
posrts (PORTA et PORTB) soit en sortie soit en entrées : Ce registre configure, c’est à dire
définit le sens de fonctionnement de chacune des lignes des ports A et B ; assigne à chaque ligne
soit le rôle d’entrée, soit le rôle de sortie, sans pour autant provoquer aucune entrée ni aucune
sortie. Alors charger le registre TRIS (A ou B) avec un SET met les lignes de port à haute
impédance. Il s’agit d’un registre de 8 bits, pouvant tous se programmer individuellement par 0
ou par 1 :

0 = la ligne de port (qui lui correspond) est configurée comme sortie

1 = la ligne de port (qui lui correspond) est configurée comme entrée
S’agissant d’un registre à lecture/écriture simultanée, on ne peut pas y écrire directement,
mais il faut obligatoirement transiter par le registre W. aussi il est important de toujours se
rappeler que le registre TRIS (A ou B) se trouve en page mémoire 1 (Banque 1) du 16F84. En
programmation, on procède comme suit :

MOVLW
00000100 ; On charge dans le registre W l’octet de configuration
de port (ligne 2 en entrée, toutes les autres lignes en sortie)

L.
MOVWF
TRISB ; l’instruction TRIS est validée.
ENCODAGE des INSTRUCTIONS
Dans le datasheet, et avec chaque instruction on trouve des lettres qui font partie de
l’encodage. La signification des lettres utilisées dans l’encodage des instructions sont :

b = position du bit dans l’octet sur lequel on opère ( il peut aller de 0 à 7)

d = registre de destination, avec deux variantes :
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
61
Polycopié --- cours de Microprocesseurs & Microcontrôleurs (Tome 01)
o d = 0 : le résultat est placé dans W
o d = 1 : le résultat est placé dans le registre

f , généralement adresse de la mémoire RAM où se trouve l’octet concerné ( dans
l’espace mémoire compris entre 00 et 4F).

k = valeur du literal (ou adresse, dans les instructions CALL et GOTO)

w = registre W (accumulateur)

x = valeur indifférente : peut être soit 0 soit 1. L’assembleur lui donne
automatiquement la valeur 0 (forme recommandée par Microchip)
LI. Bibliographie
[1]
Micrichip, PIC16F84A Data Sheet 18-pin Enhanced FLASH/EEPROM 8-bit
Microcontroller.
[2]
Bignoff ; La programmation des PIC, première partie-révision R35 Démarrer les
PIC avecle PIC 16F84.
[3]
Nebojsa Matic, PIC Microcontrollers.
[4]
Marc Spencer WA8S. MEPIC pgramming for bigginers. The American Radio
Relay League, Inc, 2010.
[5]
Microchip. PICMicro MID-Rang MCU Family Reference Manual.
[6]
Nebojsa Matic. Basic for Microntroller. 2003.
[7]
Michael A. Covington. PIC Assembly Language for the Complete Beginner.
Copyright c 1999, 2004 Michael A. Covington.
Dr A. Zegaoui, UHBC ; Département d’’Electrotechnique, Laboratoire GEER
62
Download