Microprocesseurs0001 PDF
Microprocesseurs0001 PDF
Microprocesseurs0001 PDF
Support de cours
Microprocesseurs et
microcontrôleurs
UE : 4.4
Code ECUE : 4.4.1
Circuits programmables
Ce support est réalisé en collaboration avec d’autres enseignants qui n’ont pas
hésité à porter leur soutien et leur savoir faire à commencer par Mme CHAOUCH
Khadouja enseignant technologue à l’ISET de Rades ainsi que Mr RHAIEM Ramzi
ancien assistant technologue à l’ISET de Rades.
Bibliographie
Liste des figures
Figure 1: Architecture Von Neumann 1
1.2. Historique
L'histoire des microprocesseurs est intimement liée à celle de la technologie
des semi-conducteurs
conducteurs dont voici les principales étapes :
1
Chapitre I : Généralités sur les microprocesseurs
2
Chapitre I : Généralités sur les microprocesseurs
Nombre d'instructions 46 60 50 95
Le 4004, apparu en Mars 1971, intègre 2250 transistors et est doté d'une
horloge à 740KHz. Il traite des données sur 4 bits bien que la mémoire soit organisée
en mots de 8 bits. Le jeu d'instructions comporte 46 instructions codées sur 8 bits.
La mémoire maximale adressable est de 1Ko pour les données (RAM) et 4Ko
pour le code (ROM). Le 4004 possède 16 registres de 4 bits utilisables aussi comme 8
registres de 8 bits. Il gère les appels de sous programmes par une pile interne à 4
niveaux.
3
Chapitre I : Généralités sur les microprocesseurs
Espace mémoire 16K 64K 64K 64K 64K 64K 32K 64K
Registres d'usage
général 7 7 7 3 17 3 3 6
Il fut lancé en mai 1978 au prix de 360 dollars. Il est basé sur des registres 16
bits, et dispose d'un bus externe de données de 16 bits et d'un bus d'adresse de 20 bits,
qui lui permet d'adresser 1 Mio. Il contient 29 000 transistors gravés en 3 µm. Sa
puissance de calcul varie de 0,33 MIPS (lorsqu'il est cadencé à 4.77 MHz comme
dans l'IBM PC) jusqu'à 0,75 MIPS pour la version 10 MHz.
4
2. Architecture et fonctions de base
des microprocesseurs
Processeur
Registres
Unité de
Unité d’E/S
Unité de
commande ET traitement (UAL)
DE contrôle
programme Données
Mémoire principale
Figure 2: Architecture de base d'un ordinateur
5
Chapitre II : Architecture et fonctions de base des microprocesseurs
Adresse de la case
mémoire
Contenu de la
mémoire
05h
0002h
0001h
0 1 1 0 1 0 0 1 0000h
6
Chapitre II : Architecture et fonctions de base des microprocesseurs
• 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.
7
Chapitre II : Architecture et fonctions de base des microprocesseurs
• 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.
• 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 …
Un processeur quel qu'il soit sait exécuter un ensemble bien défini de codes
machines (jeux 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.
8
Chapitre II : Architecture et fonctions de base des microprocesseurs
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.
9
3. Les mémoires
Une mémoire est un circuit à semi-conducteur permettant d’enregistrer, de
conserver et de restituer des informations (instructions et variables). C’est cette
capacité de mémorisation qui explique la polyvalence des systèmes numériques et
leur adaptabilité à de nombreuses situations. Les informations peuvent être écrites ou
lues. Il y a écriture lorsqu'on enregistre des informations en mémoire, lecture
lorsqu'on récupère des informations précédemment enregistrées.
Une opération de lecture ou d’écriture de la mémoire suit toujours le même cycle (Figure 7) :
1. sélection de l’adresse
2. choix de l’opération à effectuer (R/W)
3. sélection de la mémoire (CS = 0)
4. lecture ou écriture la donnée
10
Chapitre III : Les mémoires
• Le format des données : c’est le nombre de bits que l’on peut mémoriser par
case mémoire. On dit aussi que 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.
11
Chapitre III : Les mémoires
Pour un disque magnétique par exemple l'accès à la piste est direct, puis
l'accès au secteur est séquentiel.
C'est une mémoire à lecture seule (Read Only Memory), l’écriture nécessite un
programmateur ou une procédure plus
plus longue que pour les RAMs. Les informations
qu'elle contient sont conservées en permanence, même lors d’une coupure
d’alimentation. Nous vous proposons à la suite les différents types de mémoires ROM
(Figure 8)
mémoires
mortes
PROM ROM
EEPROM
UVPROM EEPROM
FLASH
12
Chapitre III : Les mémoires
Les mémoires RAM sont volatiles et à accès direct (Accès aléatoire en lecture
ou écriture). Dans cette catégorie de mémoires on trouve :
• Les mémoires RAM statiques (SRAM) dans lesquelles les informations sont
mémorisées par une bascule de type D et conservées tant que l'alimentation est
présente (mémoire volatile), elles sont réalisées en technologie MOS ou
bipolaire.
Pour les systèmes micro industriels c’est l’emplacement des données appelées
variables. Ces données peuvent correspondre à des variables globales ou locales du
programme, ou à des données de transmission ou de traitement (acquisition, valeurs
de sortie).
13
Chapitre III : Les mémoires
14
4. Etude et programmation d’un
microprocesseur (8086)
Les premiers pc commercialisés au début des années 1980 utilisaient le 8086,
qui est un microprocesseur 16bits. La gamme de microprocesseurs sui équipe les
micro-ordinateurs de type PC et compatibles sont les 80x86.
Chacun de ces processeurs, Le 80286, 80386, 80486 et Pentium (ou 80586) est
plus puissant que les précédents : horloge plus rapide, bus de données plus large, de
nouvelles instructions sont ajoutées comme le calcul sur les réels et ajout de registres.
Il se présente sous forme d'un boîtier de 40 broches alimenté par une alimentation
unique de 5V. (Figure 9: brochage du 8086)
15
Chapitre IV : Etude et programmation d’un microprocesseur (8086)
16
Chapitre IV : Etude et programmation d’un microprocesseur (8086)
DEN Sortie indique que l’information qui circule dans bus AD est une donnée.
DT/R\ Sortie indique le sens de transfert des données sur la bus de données:
DT/R\ = 1 : le bus de donnée en sortie.
DT/R\ = 0 : le bus de donnée en entrée.
BHE\ Signal d’accès de l’octet du poids fort sur la bus (D8 / D15).
ALE Sortie indique que l’information qui circule dans bus AD est une
adresse.
Tableau 3:description des broches du 8086
Le 8086 possède 20 bits d'adresse, il peut donc adresser 220 octets soit 1 Mo.
L'adresse de la première case mémoire est 0000 0000 0000 0000 0000 celle de
la dernière casse est 1111 1111 1111 1111 1111 1111. Nous allons représenter les
adresses en hexadécimal, et notre 8086 peut donc adresser 1 Mo allant de 00000 à
FFFFF. Le problème qui se pose est comment représenter ces adresses au sein du µP
puisque les registres ne font que 16 bits soit 4 digits au maximum en hexadécimal. La
solution adoptée par Intel a été la suivante : Puisque avec 16 bits en peut adresser 216
octets = 65535 octets = 64 ko, La mémoire totale adressable de 1 Mo est fractionnée
en pages de 64 ko appelés segments. On utilise alors deux registres pour adresser une
case mémoire donnée, Un registre pour adresser le segment qu'on appelle registre
segment et un registre pour adresser à l'intérieur du segment qu'on désignera par
registre d'adressage ou offset. Une adresse se présente toujours sous la forme
segment: offset
17
Chapitre IV : Etude et programmation d’un microprocesseur (8086)
aucun problème pour représenter 350 dans un registre d'offset, on ne peut pas
représenter 20000 dans un registre segment. La solution adoptée par Intel est la
suivante :
x x x x 0 Segment
+ x x x x Offset
x x x x x Adresse absolue
Segment = 2000
Offset = 350
2 0 0 0 0 Segment
+ 0 3 5 0 Offset
2 0 3 5 0 Adresse absolue
Remarque : Les zones réservées aux segments ne sont pas exclusives, elles
peuvent se chevaucher. La seule règle à respecter lors du choix d'un segment est que
le digit de plus faible poids soit nul. Nous pouvons donc commencer un segment tous
les 16 octets.
AX AH AL SP CS IP
BX BH BL BP DS FLAGS
CX CH CL SI SS
DX DH DL DI ES
18
Chapitre IV : Etude et programmation d’un microprocesseur (8086)
Ces registrent sont combiné avec les registres d’offset pour former les
adresses. Une case mémoire est repérée par une adresse de la forme RS:RO. On place
le registre segment au début d’une zone mémoire de 64Ko, ensuite on fait varier le
registre d’offset qui précise l’adresse relative par rapport à cette position.
19
Chapitre IV : Etude et programmation d’un microprocesseur (8086)
Si le registre segment n’est pas spécifié (cas rien), alors le processeur l’ajoute
par défaut selon l’offset choisit :
Offset utilisé Registre segment par défaut qui sera utilisé par le CPU
Valeur
DI
DS
SI
BX
BP SS
Tableau 5: segments par défaut
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
O I T S Z A P C
20
Chapitre IV : Etude et programmation d’un microprocesseur (8086)
La structure la plus générale d’une instruction est la suivante : INST op1, op2
Exemples :
MOV AX, 243 : charger le registre AX par le nombre décimal 243
ADD AX, 243h : additionner le registre AX avec le nombre hexadécimal 243
MOV AX, 0xA243 : Quand le chiffre de gauche du nombre hexadécimal est
une lettre, il est préférable d'utiliser le préfix 0x pour l'hexadécimal
MOV AL, 'a' : Charger le registre AL par le code ASCII du caractère 'a'
MOV AX, 'a' : Charger le registre AH par 00 et le registre AL par le code
ASCII du caractère 'a'
MOV AX,'ab' : Charger AH par 'a' et AL par 'b'
21
Chapitre IV : Etude et programmation d’un microprocesseur (8086)
INST R , [adr]
INST [adr] , R
INST taille [adr] , im
Exemples :
Exemples :
MOV AX, [BX] ; Charger AX par le contenu de la mémoire d'adresse DS:BX
MOV AX, [BP] ; Charger AX par le contenu de la mémoire d'adresse SS:BP
MOV AX, [SI] ; Charger AX par le contenu de la mémoire d'adresse DS:SI
MOV AX, [DI] ; Charger AX par le contenu de la mémoire d'adresse DS:DI
MOV AX, [ES:BP] ; Charger AX par le contenu de la mémoire d'adresse
ES:BP
• Adressage Basé (BA) : L’offset se trouve dans l’un des deux registres
de base BX ou BP. On peut préciser un déplacement qui sera ajouté au contenu
de Roff pour déterminer l’offset
Exemples :
MOV AX, [BX] : Charger AX par le contenu de la mémoire d'adresse DS:BX
MOV AX, [BX+5] : Charger AX par le contenu de la mémoire d'adresse
DS:BX+5
MOV AX, [BP-200] : Charger AX par le contenu de la mémoire d'adresse
SS:BX-200
MOV AX, [ES:BP] : Charger AX par le contenu de la mémoire d'adresse
ES:BP
• Adressage Indexé (X) : L’offset se trouve dans l’un des deux registres
d’index SI ou DI. On peut préciser un déplacement qui sera ajouté au contenu
de Ri pour déterminer l’offset
22
Chapitre IV : Etude et programmation d’un microprocesseur (8086)
Exemples :
MOV AX,[BX+SI] ; AX est chargé par la mémoire d'adresse DS:BX+SI
MOV AX,[BX+DI+5] ; AX est chargé par la mémoire d'adresse DS:BX+DI+5
MOV AX,[BP+SI-8] ; AX est chargé par la mémoire d'adresse SS:BP+SI-8
MOV AX,[BP+DI] ; AX est chargé par la mémoire d'adresse SS:BP+DI
Nous remarquons que c'est la partie basse du registre qui est traitée en premier,
et ceci dans les deux sens.
23
Chapitre IV : Etude et programmation d’un microprocesseur (8086)
Quand on fait une opération entre une constante et une case mémoire, il y a
ambiguïté, le processeur ne sait pas s’il faut considérer la constante sur 8 bits ou sur
16 bits. Il faut utiliser les préfixes BYTE et WORD pour préciser le nombre d’octets á
écrire :
adresse 4A
00
4.6. La pile :
4.6.1. Notion de pile
Les piles offrent un nouveau moyen d’accéder à des données en mémoire
principale, qui est très utilisé pour stocker temporairement des valeurs. Une pile est
une zone de mémoire et un pointeur qui conserve l’adresse du sommet de la pile.
PUSH AX
PUSH BX
MOV AX, valeur ; // on utilise AX
ADD AX, BX ; // et BX
MOV truc, BX
POP BX ; récupère l’ancien BX
POP AX ; et l’ancien AX
On voit que la pile peut conserver plusieurs valeurs. La valeur dépilée par POP
est la dernière valeur empilée ; c’est pourquoi on parle ici de pile LIFO (Last In First
Out, Premier Entré Dernier Sorti).
24
Chapitre IV : Etude et programmation d’un microprocesseur (8086)
4.6.3. Registres SS et SP
16bits
Adresses
croissantes Emplacement libre
SP-2
SP
PUSH POP
• MOV Od , Os
• PUSH Op
Empiler l’opérande Op (Op doit être un opérande 16 bits)
- Décrémente SP de 2
- Copie Op dans la mémoire pontée par SP
PUSH R16
PUSH word [adr]
• POP Op
Dépiler dans l’opérande Op (Op doit être un opérande 16 bits)
25
Chapitre IV : Etude et programmation d’un microprocesseur (8086)
• Addition :
ADD Od , Os Additionne l'opérande source et l'opérande destination avec
résultat dans l'opérande destination, Od + Os → Od
ADD AX,123
ADD AX,BX
ADD [123],AX
ADD BX,[SI]
• ADC Od , Os Additionne l'opérande source, l'opérande destination et le
curry avec résultat dans l'opérande destination :Od + Os + C → Od
INC byte [ ]
INC word [ ]
26
Chapitre IV : Etude et programmation d’un microprocesseur (8086)
L'opérande Op ne peut pas être une donnée, c’est soit un registre soit une
position mémoire, dans ce dernier cas, il faut préciser la taille (byte ou word)
MUL BL ; AL x BL → AX
MUL CX ; AX x CX → DX:AX
MUL byte [BX] ; AL x (octet pointé par BX) → AX
MUL word [BX] ; AX x (word pointé par BX) → DX :AX
S ne peut pas être une donnée (immédiat). Après la division L'état des
indicateurs est indéfini. La division par 0 déclenche une erreur
• AND Od , Os : ET logique
Od ET Os → Od
• OR Od , Os : OU logique
27
Chapitre IV : Etude et programmation d’un microprocesseur (8086)
Od OU Os → Od
Le 8086 ne possède pas d'instructions permettant d'agir sur un seul bit. Les
masques logiques sont des astuces qui permettent d'utiliser les instructions logiques
vues ci-dessus pour agir sur un bit spécifique d'un octet ou d'un mot.
• Forcer un bit à 0 : Pour forcer un bit à 0 sans modifier les autres bits,
on utilise l'opérateur logique AND et ces propriétés :
x AND 0 = 0 (0 = élément absorbant de AND)
x AND 1 = x (1 = élément neutre de AND)
On fait un AND avec une valeur contenant des 0 en face des bits qu'il faut
forcer à 0 et des 1 en face des bits qu'il ne faut pas changer.
x x x x x x x X
and 1 1 1 0 1 1 0 1
x x x 0 x x 0 x
• Forcer un bit à 1 : Pour forcer un bit à 1 sans modifier les autres bits,
on utilise l'opérateur logique OR et ces propriétés :
On fait un OR avec une valeur contenant des 1 en face des bits qu'il faut forcer
à 1 et des 0 en face des bits qu'il ne faut pas changer
x x x x x x x x
OR 0 0 1 0 0 0 0 0
x x 1 x x x x x
• Inverser un bit : Pour inverser la valeur d'un bit sans modifier les autres
bits, on utilise l'opérateur logique XOR et ces propriétés :
X XOR 1 =
28
Chapitre IV : Etude et programmation d’un microprocesseur (8086)
Donc, on fait un XOR avec une valeur contenant des 1 en face des bits qu'il
faut inverser et des 0 en face des bits qu'il ne faut pas changer
x x x x x x x x
XOR 0 0 1 0 0 0 0 0
x x x x x x x
Ces instructions déplacent d’un certain nombre de positions les bits d’un mot
vers la gauche ou vers la droite. Dans les décalages, les bits qui sont déplacés sont
remplacés par des zéros. Il y a les décalages logiques (opérations non signées) et les
décalages arithmétiques (opérations signées).
Dans les instructions de décalage, l'opérande k peut être soit une constante
(immédiat) soit le registre CL :
On peut aussi décaler le contenu d'une case mémoire mais il faut préciser la
taille
INST byte [BX],1 ; décaler une fois le contenu de la case mémoire d'adresse
BX.
29
Chapitre IV : Etude et programmation d’un microprocesseur (8086)
30
Chapitre IV : Etude et programmation d’un microprocesseur (8086)
L'étiquette est une chaîne quelconque qui permet de repérer une ligne. Le
caractère ':' à la fin de l'étiquette n'est obligatoire que si l'étiquette est seule sur
la ligne
• Branchements inconditionnels
• Branchements conditionnels
• Appel de fonction ou d’interruptions
31
Chapitre IV : Etude et programmation d’un microprocesseur (8086)
• JE/JZ xyz (Jump if Equal or Zero ) Aller à la ligne xyz si résultat nul
ou si égalité. C'est-à-dire si Z=1
• JNE/JNZ xyz (Jump if Not Equal or Not Zero ) Aller à la ligne xyz si
résultat non nul ou si différent. C'est-à-dire si Z=0
• JNC xyz (Jump if No CArry) aller à la ligne xyz s'il n'y a pas de
retenu. C'est-à-dire si C = 0
• JG xyz (Jump if Grater) aller à la ligne xyz si plus grand (signé). C'est-
à-dire si (S ^ O) + Z = 1
• JGE xyz (Jump if Grater or Equal ) aller à la ligne xyz si plus grand ou
égal (signé). C'est-à-dire si S ^ O = 0
32
Chapitre IV : Etude et programmation d’un microprocesseur (8086)
• JL xyz (Jump if Less) aller à la ligne xyz si plus petit (signé). C'est-à-
dire si S ^ O = 1
• JLE xyz (Jump if Less or Equal) aller à la ligne xyz si plus petit ou
égal (signé). C'est-à-dire si (S ^ O) + Z = 1
• JNO xyz (Jump if No Overflow) aller à la ligne xyz s'il n'y a pas de
dépassement O = 0
• JP/JPE xyz (Jump if Parity or Parity Even) aller à la ligne xyz si parité
paire. C'est-à dire si P = 1
• JNS xyz (Jump if No Sign) aller à la ligne xyz si signe positif. C'est-à-
dire si S= 0
4.8. Procédures
4.8.1. Notion de procédure
Instruction A Calcul
Instruction B Instruction C
Call calcul
…
Instruction D RET
…
33
Chapitre IV : Etude et programmation d’un microprocesseur (8086)
34
Chapitre IV : Etude et programmation d’un microprocesseur (8086)
Sous_prog1 endp
Exemples :
nombre1 db 25
nombre2 dw ? ; pas de valeur initiale
buffer db 100 dup ( ?) ; réservation d’une zone mémoire de 100
octets
35
Chapitre IV : Etude et programmation d’un microprocesseur (8086)
36
Chapitre IV : Etude et programmation d’un microprocesseur (8086)
MOV AH, 1
INT 21
--> Met dans le registre AL, le caractère lu au clavier.
Les exceptions ont une priorité plus élevée que les interruptions provenant des
signaux d’interruption.
37
5. Interfaçage des microprocesseurs
Afin de pouvoir communiquer avec l’environnement extérieur (écran, souris,
clavier, etc.), le microprocesseur utilise les interfaces d’entrées/sorties. Cette
connexion se fait à travers les bus de données, d’adresses et de commande (voir
Figure 12)
Les accès à ces périphériques sont appelés les ports (exemple : port série, port
parallèle, etc.)
38
Chapitre V : Interfaçage des microprocesseurs
Les adresses des ports d’E/S peuvent être vues par les microprocesseurs de
deux manières :
• Les E/S sont mappées en mémoire : les adresses des ports d’E/S
appartiennent au même espace mémoire que les circuits mémoire ; on parle
alors d’adressage cartographique.
Dans ce cas l’espace d’adressage des mémoires diminue, et l’adressage
des ports se fait avec le même nombre de bits que pour les mémoires. Donc
toutes les instructions possibles sur les mémoires peuvent être utilisées par les
E/S.
39
Chapitre V : Interfaçage des microprocesseurs
pour un accès aux E/S. Ce signal est utilisé pour valider le décodage d’adresse dans
les deux espaces :
40
Chapitre V : Interfaçage des microprocesseurs
Exemples :
41
Chapitre V : Interfaçage des microprocesseurs
Pour accéder aux registres du 8255, nous utilisons les lignes d’adresses A0 et A1 :
A1 A0 operation
0 0 0 1 0 lecture du port A
0 1 0 1 0 lecture du port B
1 0 0 1 0 lecture du port C
0 0 1 0 0 écriture du port A
0 1 1 0 0 écriture du port B
1 0 1 0 0 écriture du port C
1 1 1 0 0 écriture du registre de commande
X X X X 1 pas de transaction
1 1 0 1 0 illegal
X X 1 1 0 pas de transaction
42
Chapitre V : Interfaçage des microprocesseurs
- Les bits de données sont transmis l’un après l’autre en commençant par le
bit de poids faible. Ils peuvent être au nombre de 5, 6, 7 ou 8. Chaque bit
est maintenu sur la ligne pendant une durée déterminée T. L’inverse de
cette durée définit la fréquence de bit = nombre de bits par secondes =
vitesse de transmission. Les vitesses normalisées sont : 50, 75, 110, 134.5,
150, 300, 600, 1200, 2400, 4800, 9600 bits/s ;
43
Chapitre V : Interfaçage des microprocesseurs
44
6. Etude et programmation des
microcontrôleurs
Nous allons au cours de ce chapitre définir le microcontrôleur ainsi que les
éléments contenus dans ce dernier et qui n’ont pas été abordé au cours des chapitres
précédents afin de comprendre l’architecture d’un système à microcontrôleurs, le pic
16f877 sera utilisé comme exemple dans la suite du chapitre. Nous allons aussi voir la
manière de programmer un microcontrôleur avec un langage évolué.
6.1. Définition
Un microcontrôleur se présente sous la forme d’un circuit intégré réunissant
tous les éléments d’une structure à base de microprocesseur. Voici généralement ce
que l’on trouve à l’intérieur d’un tel composant :
• Un microprocesseur (C.P.U.),
d’autres unités,
• Des timers pour générer ou mesurer des signaux avec une grande précision
temporelle,
analogiques.
45
Chapitre VI : Etude et programmation des microcontrôleurs
• Encombrement réduit,
• Faible consommation,
• Coût réduit
• Fiabilité
• Mise en œuvre plus simple
46
Chapitre VI : Etude et programmation des microcontrôleurs
• Durée du cycle : Période de l'oscillateur quartz divisée par 4 soit 200 ns pour
un quartz de 20 MHz.
• Deux bus distincts pour le code programme et les data.
• Code instruction : mot de 14 bits et compteur programme (PC) sur 13 bits, ce
• qui permet d'adresser 8 K mots (de h'0000' à h'1FFF')
• Bus DATA sur 8 bits.
• 33 Ports Entrée-Sortie bidirectionnels pouvant produire 25 mA par sortie.
• PORTA = 6 bits et PORTB PORTC et PORTD = 8bits PORTE = 3 bits pour
le
• 16F877 et 22 I/O seulement pour le 16F876.
• 4 sources d'interruption :
47
Chapitre VI : Etude et programmation des microcontrôleurs
Les 2 bits MSB des 13 bits d'adresse (bits 11 et 12), viennent du registre
PCLATH (bits 3 et 4) qui est à l'adresse : h'0A'. Il faut impérativement les positionner
pour la bonne page, avant d'utiliser les instructions: CALL et GOTO.
48
Chapitre VI : Etude et programmation des microcontrôleurs
Quand le prédiviseur est affecté au Watchdog (PSA=1), TMR0 est prédivisé par 1.
49
Chapitre VI : Etude et programmation des microcontrôleurs
Les ports d’entrée / sortie numériques peuvent être considérés comme les
périphériques les plus simples du microcontrôleur. Pour le PIC, on contrôle leur
fonctionnement à l’aide de registres spéciaux (deux registres par port). Par exemple,
pour le port A, on a le registre PORTA et le registre TRISA.
50
Chapitre VI : Etude et programmation des microcontrôleurs
Le résultat de la conversion est codé sur 10 bits. C'est une valeur comprise
entre h'000' et h'3FF'.
Le temps de conversion d'un bit est TAD. Pour une conversion totale des 10
bits il faut : 12.TAD.
51
Chapitre VI : Etude et programmation des microcontrôleurs
A = Entrée Analogique.
D = I/O Digitale.
52
Chapitre VI : Etude et programmation des microcontrôleurs
Au reset le registre ADCON1 est initialisé à h'00'. Cela signifie que les 5 bits
du Port A et les 3 bits du Port E sont configurés en entrées analogiques.
Pour récupérer le 5 bits du Port A et les 3 bits de Port E en tant que I/O
digitales il faut écrire la valeur h'06' dans ADCON1.
53
Chapitre VI : Etude et programmation des microcontrôleurs
Donc afin de pouvoir réaliser une application à base de pic, nous devons tout
d’abord commencer par écrire le programme dans un éditeur de texte indépendant ou
dans l’éditeur du compilateur choisi et ce avec le langage évolué choisi (C, Pascal,
basic, etc.), ensuite il faut utiliser le compilateur afin de générer le code machine, et
c’est donc un fichier en .hex qui est généré.
Une fois nous avons notre code machine, nous avons le choix de le simuler sur
un logiciel de simulation tel que ISIS ou de l’envoyer à l’aide du programmateur et de
son logiciel au pic. Le programmateur permet de transférer le programme compilé
(langage machine) dans la mémoire du microcontrôleur. Il est constitué d’un circuit
branché sur le port COM du PC ou USB, sur lequel on implante le PIC, et d’un
logiciel permettant d’assurer le transfert. Il existe différents logiciels, nous citons :
Icprog, ICSP, picflash 2 usb etc.
54
Chapitre VI : Etude et programmation des microcontrôleurs
}
int bintobcd(char bin) {
…
return ...;
}
void main (void) // Programme principal
{
DDRBA=0xFF // initialisation et configuration
while (1) // Boucle principale
{
…
tempo(100);
…
val2=bintobcd(val1);
}
}
void nmi(void)interrupt 0
{ // Sous programme d’interruption
Chaque ligne d’instruction se termine par un “;”. Le début d’une séquence est
précédé du symbole “{”. La fin d’une séquence est suivie du symbole “}”.
La notation des nombres peut se faire en décimal de façon normale ou en
hexadécimal avec le préfixe “0x”.
55
Chapitre VI : Etude et programmation des microcontrôleurs
void main() {
PORTC = 0x00; // initialisation du PORTC
TRISC = 0; // Configurer tout le PORTC comme sortie
while(1) {
PORTC = ~PORTC;// changer la valeur du PORTC de 0 à 1 et inversement
Delay_ms(1000); // attendre pendant une seconde
}
}
Une fois le programme écrit nous allons le compiler. Dans le dossier du projet
nous allons retrouver notre code source en C dans un fichier dont l’extension est .ppc
et notre fichier en code machine dont l’extension est .hex et c’est ce dernier que nous
allons utiliser pour la simulation ou pour être transférer au pic via le programmateur.
56
Chapitre VI : Etude et programmation des microcontrôleurs
Nous réalisons donc le schéma sous ISIS et nous éditons les propriétés du pic
afin de l’indiquer le fichier .hex généré par le compilateur mikroC ainsi que la
fréquence de l’horloge. Et en lançant la simulation, nous pourrons voir les LEDs
s’allumer et s’éteindre toutes les secondes.
Nous pourrons par la suite transférer notre programme sur le pic via le
programmateur qu’on peut aussi fabriquer nous même.
57
Bibliographie
http://www.lrde.epita.fr/~didier/lectures/os_00_intro.pdf
iutbayonne.univ-pau.fr/pub/perso/Info/dalmau/travail/textes/pedag/polycops/archi/microprocesseurs/lesmicro.doc.
http://www-gtr.iutv.univ-paris13.fr/Cours/Mat/Architecture/Cours/polyarch/chap-3_sec-3_sec-3.html
http://intranet-gei.insa-toulouse.fr:8181/Enseignements/SFO/Polycopie/index.html?part=ID_PubliTool_N12E6E
http://www-gtr.iutv.univ-paris13.fr/Cours/Mat/Architecture/Cours/polyarch.pdf
http://richard.grisel.free.fr/3-Cours_microprocesseur-16-bits.pdf
http://www.oumnad.123.fr/
http://www.sfa.univ-savoie.fr/formations/masters/electronique-telecoms/wp-content/files/ETRS-
604/cours/Cours%20Microprocesseur-Microcontroleur.pdf