Академический Документы
Профессиональный Документы
Культура Документы
1 OBJET DE CE DOCUMENT
Des TPs et TDs complémentaires assurent une bonne assimilation. Seule la 1ère partie de ce do-
cument nécessite une lecture linéaire. Le reste est à lire en partie en fonction des TPs envisagés,
avec retours en arrière pour « approfondissement » ultérieur.
2.1 GENERALITES
2.1.1 MICROPROCESSEUR OU µP
Un µP est capable d’enchaîner automatiquement des opérations arithmétiques, logiques, etc. sur
des données binaires. L’enchaînement de ces opérations est commandé par un programme en-
registré dans une mémoire.
2.1.2 SYSTEME A µP
SYSTEME A µP
Exemples
Balance électronique
• acquisition : prix au kg (Pkg) saisi à partir d’un clavier, masse de l’article (M) issue d’un cap-
teur et d'un conditionnement (amplification, …)
• traitement : calcul du prix à payer (P) P = M × Pkg
• restitution : affichage de la masse, du prix au kg et du prix à payer, etc.
Les µCs sont plutôt dédiés aux applications qui ne nécessitent pas une grande quantité de cal-
culs complexes, mais qui demandent beaucoup de manipulations d’entrées / sorties. C’est le cas
des contrôles de processus, tel que par exemple le contrôle des organes d’une photocopieuse.
Les systèmes à µP sont plutôt réservés pour les applications demandant beaucoup de traitement
de l’information et assez peu de gestion d’entrées / sorties. Les ordinateurs sont réalisés avec des
systèmes à µP.
1
Certains µCs actuels ont des modes de fonctionnement qui les rapprochent des µCs : on peut
rajouter des composants externes comme avec un système à µP. La distinction µP / µC n'est pas
toujours très marquée.
Un système à µP n’a d’utilité que s’il peut échanger des informations avec le milieu extérieur ; il
dispose donc d’entrées/sorties (notées E/S).
Un système à µP comprend une unité de traitement dont les E/S sont de type binaire (0/1). Le
cœur de cette unité est le µP. En général les E/S sont groupées par paquet, ou mot (fréquem-
ment de 8 bits) ; on parle alors de port d’E/S.
Un port 8 bits peut correspondre à plusieurs E/S (état d’un poussoir, d’un détecteur de passage,
commande d’un relais, etc.) ou à une seule information codée sur 8 bits (mesure de la vitesse
d’un moteur issue d’un C.A.N. par exemple).
Pour traiter d’informations analogiques, un système à µP doit posséder des convertisseurs (Con-
vertisseur Analogique Numérique -CAN- et Convertisseur Numérique Analogique –CNA-),
comme sur la figure suivante.
Système à µP
Entrées Sorties
logiques logiques
Unité de
traitement
Entrée Sortie
analogique C.A.N. C.N.A. analogique
Ad+5 Instruction 5
Ad+4 Instruction 4
Si le programme est « figé », on emploie une mémoire de type ROM ; au contraire si ce dernier
doit être changé régulièrement comme c’est le cas pour les logiciels d’applications des micro-
ordinateurs on utilise une RAM dans laquelle on charge au préalable (à partir d’une disquette par
exemple) les codes du programme.
La mémoire programme d’un µC est souvent de petite taille (qqs kO ou qqs dizaines de kO),
alors que celle associée à un µP peut être très importante (plusieurs MO ou beaucoup plus).
Une fois le programme placé dans la mémoire associée au µP, le µP fonctionne de la façon sui-
vante :
Chacune de ces trois parties est brièvement mentionnée ici. Chacune fait l’objet de développe-
ment dans un autre document.
Le code placé en mémoire est dit code exécutable ou code binaire ou encore code objet.
Traducteur (assembleur
ou compilateur)
Code exécutable
Traducteur
Terme général pour désigner un logiciel capable de traduire le SOURCE (écrit dans un langage
« facilement » compréhensible par le programmeur) en un fichier EXECUTABLE compréhensible
par le µP.
Traducteur pour langage basé directement sur le jeu d’instruction du µP. A chaque instruction du
µP correspond un mnémonique. Celui-ci est en général la contraction du ou des mots désignant
l’action exercée par l’instruction. Le mnémonique permet donc d’évoquer facilement ce que
Chaque µP à ses instructions propres et donc des mnémoniques différents si bien qu’un pro-
gramme écrit en assembleur ne peut être directement utilisé avec un µP autre que celui pour
lequel il a été écrit.
Compilateur
Traducteur pour langage indépendant du jeu d’instruction (C, Pascal, FORTRAN, etc.). Par
exemple, en C l’opération précédente pourrait s’écrire :
DATA = DATA - 1;
avec DATA (nom donné à la donnée) enregistrée à l’adresse 4000h. Cette écriture est bien in-
dépendante du µP choisi et peu être compilée aussi bien pour un 68HC11 (elle produit alors les
codes précédents), que pour un 8031, qu’un pentium, etc.
Après avoir obtenu le code exécutable, il existe plusieurs possibilités pour la mise au point.
On commence généralement par vérifier que le logiciel est correct d'un point de vue fonction-
nel, avec un logiciel de simulation sur ordinateur, puis on procède aux essais avec le matériel.
C’est la solution la plus performante et la plus utilisée industriellement pour des µP 8/16 bits (et
même plus).
Lors de la phase de mise au point, le programme n’est pas directement chargé dans la mémoire
associée au µP ou dans la mémoire interne du µC, mais il est placé dans un outil chargé de se
substituer à cette mémoire et de remplacer le µP ou µC. Il est alors possible de procéder à
l’exécution contrôlée du programme.
On appelle émulateur l’outil de mise au point. Il est constitué d’un boîtier qui se connecte :
Il existe des solutions moins performantes pour les µP 8/16 bits (carte d’évaluation, kit pédago-
gique…).
Avec le déboguage in situ, le µC dispose alors de connexions spéciales pour une liaison série
avec un PC et des ressources nécessaires pour une exécution par partie du programme (point
d’arrêt). Cette possibilité commence à se développer sur des µCs récents. La mémoire pro-
gramme est d’abord programmée par la liaison série. Puis les commandes de déboguage sont
envoyées par cette même liaison. Le déboguage in situ n’est possible qu’avec des µC intégrant
de la mémoire flash facile à programmer et reprogrammer depuis l’ordinateur de déboguage.
4.3 PROGRAMMATION
Nous avons vu que le microprocesseur doit pouvoir lire le code des instructions en mémoire,
acquérir des données, les traiter puis les restituer.
L’unité d’échange est vue par l’unité centrale comme un ensemble de registres accessibles. Les
informations vers l’extérieur transitent par certains de ces registres.
Les avantages et les inconvénients de ces deux architectures sont mentionnées plus loin, après le
fonctionnement de systèmes avec ces 2 architectures et après présentations des jeux d'instruc-
tions (voir § Les instructions et les modes d'adressage / Jeux d'instructions réduit / étendu).
Dans les applications embarquées, le programme est figé et par conséquent stocké dans une
mémoire de type ROM tandis qu’une RAM permet de stocker des résultats intermédiaires de
calcul, des données temporaires, etc.
Les figures ci-dessous représentent, de façon très simplifiée, les architectures Von Neuman et
Harvard. Les différents bus ne sont pas distingués.
Bus d'adresse
Mémoire Mémoire
Interface
µP programme données
parallèle
EPROM RAM
OE RD/WR RD/WR
Bus de donnée
Le µP utilise le même canal d’échange pour lire les instructions et acquérir (lire) et restituer
(écrire) des données : le bus de données. La taille de ce bus est une des caractéristiques princi-
pales des µP et µC.
Les adresses délivrées par le µP sont véhiculées par le bus d’adresses (16 bits pour le 68HC11
ce qui correspond à 216 = 65536 adresses). La taille de bus d’adresse est en général en relation
avec celle du bus de données.
Remarque : Certains µPs utilisent, pour réduire le nombre de broches utilisées pour le bus
d’adresses et le bus de données, une technique qui sera présentée plus loin.
6.2.1 ADDITION
Recherche de l’instruction
µP
Mémoire
ou CPU 10 données Interface
parallèle
d'un µC 8B RAM
EPROM
OE RD/WR RD/WR
Bus de donnée
Exécution de l’instruction
µP
Mémoire
ou CPU 10 données Interface
parallèle
d'un µC 8B RAM
EPROM
OE RD/WR RD/WR
Bus de donnée
Le µC reconnaît le code de l’instruction ADDA (décodage) et sait alors qu’il doit additionner A
avec le contenu de l’adresse suivante.
Le µC va alors chercher le nombre à additionner en délivrant l’adresse mémoire qui suit immé-
diatement celle où était rangé le code opération. Tout se passe comme précédemment et la
donnée 10h est transférée dans le microcontrôleur via le bus de données.
Enfin, le µC additionne A et 10h en interne puis stocke le résultat dans A.
Ici 9002h.
pour laquelle le contenu du registre A est transféré vers l’extérieur via un registre de l’interface
parallèle (localisé à l’adresse 4000h).
µP
00 Mémoire
ou CPU 40 données Interface
parallèle
d'un µC B7 RAM
EPROM
OE RD/WR RD/WR
Bus de donnée
Exécution de l’instruction
Le µC reconnaît l’instruction, il sait désormais qu’il doit successivement aller chercher le poids
fort de l’adresse de stockage de A (40h) puis le poids faible de cette adresse (00h).
µP
00 Mémoire
ou CPU 40 données Interface
parallèle
d'un µC B7 RAM
EPROM
OE RD/WR RD/WR
Bus de donnée
µP
00 Mémoire
ou CPU 40 données Interface
parallèle
d'un µC B7 RAM
EPROM
OE RD/WR RD/WR
Bus de donnée
µP
00 Mémoire
ou CPU 40 données
d'un µC B7 RAM
Interface
EPROM parallèle
OE RD/WR RD/WR=0
Bus de donnée
Le µC place alors 4000h sur le bus d’adresses, place A sur le bus de données et fait une de-
mande d’écriture de donnée (activation d’une ligne WR en général). Ceci a pour effet
d’enregistrer A dans un registre de l’interface parallèle et de permettre sa sortie vers l’extérieur
(pour commander un afficheur 7 segments par exemple).
Ici 9005h.
Recherche de l’instruction
Le µC va chercher l’adresse du saut, ici A000h. L’adresse de la prochaine instruction est forcée à
A000h (au lieu de 9008h comme on pourrait le supposer). Lors du cycle suivant, l’exécution du
programme reprendra donc à l’instruction rangée à cette adresse.
Décodeur
d'adresse
CS1 CS2
Mémoire Mémoire
programme Interface
EPROM
CPU données
parallèle
RAM
RD RD
WR WR
Bus de contrôle
Fig. 17 Système minimum Harvard
La CPU utilise 2 canaux d'échange pour lire les instructions et acquérir (lire) et restituer (écrire)
les données : le bus instruction ou bus programme et le bus de donnée. Les tailles de ces bus
sont en général différentes.
Le fonctionnement est présenté dans ces grandes lignes au travers de quelques instructions d'un
PIC 16C5x de Microchip. Le fonctionnement pour un autre µC est très proche, à la différence
des mnémoniques et des codes opératoires.
La mémoire programme est organisée en mots de 12 bits. Le bus de donnée est de 8 bits.
Un mot en mémoire programme contient à la fois le code opératoire et l'opérande si c'est une
constante ou des informations sur l'adresse de l'opérande s'il s'agit d'une variable.
On suppose que :
• la mémoire est programmée
• le µC a effectué un certain
nombre de tâches
• le µC est prêt à exécuter le
43h A80 GOTO 0x80
programme présenté ci-
contre 42h 026 MOVWF 0x06
10F ADDWF 0x15,W
41h
40h C10 MOVLW 0x10 (C: code instruction, 10: opérande)
Ce programme permet d'effectuer une addition d'une variable contenue dans un registre
d'adresse 15h avec la constante 10h, de ranger le résultat sur la sortie d'un port d'adresse 06h
puis de sauter à l'adresse programme 80h.
Une addition doit nécessairement se faire avec un opérande dans un registre W (équivalent de
l'accumulateur dans d'autres µP/µC) et l'autre dans un registre quelconque. On a choisi ici le
registre d'adresse 15h. Il faut donc avec de réaliser l'addition ranger la constante 10h dans le
registre W.
On utilise l'instruction MOVLW 10h (MOVe Litteral [ici 10] to W). Le code en mémoire pro-
gramme est C10 soit 1100 0001 0000. Les 4 MSB correspond au code de l'instruction, les 8 LSB
correspondent à la constante.
Mémoire
Interface
10F CPU données
parallèle
C10 RAM
RD RD
C10h WR WR
Bus de contrôle
Fig. 19 MOVLW, recherche du code instruction
Pendant qu'il effectue la lecture de l'instruction, le µC exécute l'instruction qu'il a précédemment
lue (non représenté ci-dessus).
Pendant qu'elle écrit la valeur de la constante précédemment lue dans W, la CPU recherche le
code de l'instruction suivante.
ADDWF 15h,W permet d'additionner la valeur contenue dans W (10h) à la valeur contenue
dans le registre d'adresse 15h.
Décodeur
d'adresse
Ecriture dans W
Mémoire
Interface
10Fh CPU données
parallèle
C10 RAM
RD RD
10Fh WR WR
Bus de contrôle
Fig. 20 : ADDWF, recherche du code instruction / MOVLW, exécution
Le µC utilise les 2 bus d'adresse simultanément. D'un côté, il recherche le code de l'instruction
suivante à l'adresse 42h, d'un autre côté il recherche l'opérande à l'adresse 15h. Cette dernière
adresse était placée avec le code de l'instruction précédente.
Décodeur
d'adresse
addition entre W
et le bus de donnée
026 résultat dans W
xx Interface
10Fh parallèle
C10
CPU
RD RD
026h WR WR
Bus de contrôle
Fig. 21 : MOWF, recherche du code instruction / ADDWF, exécution
MVWF 06h permet de transférer le contenu de W dans un registre d'adresse 6 qui correspond à
un port de sortie.
Le µC utilise les 2 bus d'adresse simultanément. D'un côté, il recherche le code de l'instruction
suivante à l'adresse 43h, d'un autre côté il transfère le contenu de W à l'adresse 06h. Cette der-
nière adresse était placée avec le code de l'instruction précédente.
Décodeur
d'adresse
Mémoire yy
A80 CPU données
026 RAM
RD RD
A80h WR WR
Bus de contrôle
Fig. 22 : GOTO, recherche / MOVWF, exécution
Décodeur
d'adresse
Mémoire
Interface
CPU données
parallèle
zzz RAM
RD RD
zzz WR WR
Bus de contrôle
Fig. 23 : GOTO, exécution
Le microprocesseur renferme tous les circuits logiques qui permettent de rechercher, décoder et
exécuter automatiquement les instructions logées en mémoire.
La figure ci-dessous donne une représentation d'un µP (ou de l'unité centrale de traitement d'un
µC) à architecture Von Neuman.
Busde
Contrôle
Partie Unité de Unité de Bus
Opérative Traitement Getion d'adresse
Mémoire Busde
Donnée
La partie opérative est réalisée avec une Unité Arithmétique et Logique (UAL ou ULA ou en
anglais ALU pour Arithmetic Logic Unit) et des registres dont certains sont associés à des comp-
teurs, …
Le rôle du séquenceur est décrit plus loin, après une première approche lors du fonctionnement
de l’UAL.
Les informations entre les registres, l’UAL, … sont échangées par l’intermédiaire de bus internes
qu’on nomme aussi chemins de données internes. Les informations sont acheminées d’un en-
droit à un autre et mémorisées grâce aux signaux de contrôle délivrés par le séquenceur piloté
par un signal d’horloge.
A l’UAL est associé un registre qui contient des bits donnant des informations sur le résultat de la
dernière opération. Ces bits sont appelés bits d’état (status bits) ou drapeaux (flags). La grande
majorité des µP disposent des informations suivantes :
• résultat égal à 0
• résultat négatif (MSB à 1)
• retenue
• dépassement de capacité
Le registre contenant les bits d’état peut aussi contenir des bits réservés à d’autres usages.
Le nom de ce registre dépend des constructeurs. Quelques exemples de noms :
• registre d’état (status register). Nom utilisé si le registre n’a que cette seule utilité
• registre code condition (Code Condition Register). Chez Motorola ; ce registre contient des
bits réservés à d’autres usages
• mot d’état du programme (Program Status Word). Chez Intel ; ce registre contient des bits
réservés à d’autres usages
Le ou les opérandes sont rangés dans un (ou plusieurs) registre(s) interne(s) du µP ou de l’unité
centrale du µC ou en mémoire externe.
Un des rôles du séquenceur mentionné plus haut est de commander tous les aiguillages néces-
saires, durant l’exécution d’une instruction.
Addition
On désire réaliser une addition entre le contenu de l’accumulateur A et une constante rangée en
mémoire programme.
La ligne de programme en assembleur est :
ADDA #$10
le contenu de A, par exemple 22h, est additionné à la donnée 10h qui provient du bus de don-
nées. Lorsque l’opération est terminée, l’ancien contenu de A est remplacé par le résultat, ici
32h.
10
A B
A B
32
22
32
Si on suppose que A contient initialement 94h soit 10010100b alors le résultat du décalage est
00101000b soit 28h.
A B A B A B
1001 0100 1001 0100 0010 1000
8.3 SEQUENCEUR
Nous avons vu que le microprocesseur recherche puis exécute automatiquement les instructions
stockées en mémoire. L’enchaînement de ces opérations est commandé par un circuit séquen-
tiel. Le séquenceur a déjà été introduit dans les exemples sur l’ULA.
Le séquenceur génère :
• les signaux du bus de commande ( RD,WR , etc.),
• les signaux internes aux µP (gestion des registres, de l’A.L.U., aiguillages des bus internes,
etc.).
Les signaux (externes et internes) produits par le séquenceur sont synchrones d’un signal
d’horloge produit par un oscillateur.
L’oscillateur peut être :
• à quartz. C’est le cas le plus fréquent. Il peut être constitué de :
une « circuiterie » interne au µP et un quartz externe.
un oscillateur externe comprenant son quartz et son électronique
• à réseau RC. On rencontre ce cas avec des µC bon marché où la durée précise d’exécution
d’une instruction n’a pas beaucoup d’importance.
Le temps d’exécution d’une instruction s’exprime en « cycles machine » ; un cycle machine cor-
respondant à un nombre entier de périodes de l’horloge. Selon les constructeurs de µP, on utilise
les termes « cycles machine » (CPU cycle) ou « durée d’état » (state time).
A chacune des phases décrites en 5.2) correspond en général un cycle machine. Pour la durée
de chaque phase, on rencontre 2 cas :
• la durée de chaque phase est fixe. C’est le cas le plus fréquent avec des µP et µC relative-
ment lent (cycle machine > qqs centaines de ns)
• la durée d’une phase comportant un accès à une mémoire ou à une unité d’échange externe
est variable, pour permettre des accès à des organes rapides ou lents. En général c’est l’état
d’une broche externe du µP/µC qui détermine s’il faut ou non rajouter des cycles d’horloge.
Par exemple avec un 80C196 avec un quartz de 20 MHz, lors d’un accès à une mémoire
EPROM de temps d’accès élevé, il faut générer une impulsion sur l’entrée READY du µC
pour augmenter la durée de la phase de lecture en insérant des états d’attente (wait state)
dans le cycle machine.
Lorsque la durée de chaque phase est fixe, le constructeur donne pour chaque instruction, sa
durée d’exécution exprimée en cycles machine.
Pour un 68HC11, la durée de chaque phase (recherche instruction en mémoire, exécution) est
fixe. Un cycle machine correspond à 4 périodes d’horloge. Les instructions durent de 2 à 6
cycles machines. Avec un quartz à 8MHz, un cycle machine dure 500ns ; une instruction est
exécutée en 1 à 3µs.
AFFF
A B Mémoire
E7 5A données Interface
RAM parallèle
3D
IR
3D EPROM
OE RD/WR RD/WR
Bus de donnée
B000
A B Mémoire
E7 5A données Interface
RAM parallèle
3D
IR
3D EPROM
OE RD/WR RD/WR
Bus de donnée
Bus d'adresse
Séquenceur
B001
A B Mémoire
BD 5A données Interface
RAM parallèle
3D
IR BD
3D
EPROM
OE RD/WR RD/WR
Bus de donnée
Un microprocesseur contient des registres (8, 16, 32 voire 64 bits) qui lui permettent de mémo-
riser les informations nécessaires à son bon fonctionnement. Toutes les données et adresses ma-
nipulées par le µP transitent par ces registres.
Leur nombre est variable d’un µP à l’autre. Il n’est possible de les présenter dans leur ensemble
qu’après avoir vu d’autres parties (déroulement d’un programme, modes d’adressage, …)
Quelques registres, fondamentaux, sont dans sur tous les composants. Certains ont déjà été pré-
sentés précédemment.
Registre d’adresse
Il contient l’adresse déposée sur le bus d’adresses. Elle peut correspondre à l’adresse d’une ins-
truction, d’une constante, d’une variable, d’un registre d’une unité d’échange, … Dans certains
cas, le contenu du compteur ordinal est transféré dans ce registre
Ce registre, également appelé Compteur Programme (Program Counter -PC) contient l’adresse
de l’instruction à exécuter. Le contenu de CO est placé sur le bus d’adresses, via le registre
d’adresse, pendant le cycle de recherche de l’instruction en mémoire (cycle Fetch) puis il est
automatiquement incrémenté afin de pointer la prochaine instruction.
Il contient le code de l’instruction à exécuter. Ce code est celui qui vient d’être lu en mémoire
programme. La logique de décodage d’instruction du µP analyse le contenu de RI pour détermi-
ner la tâche à effectuer. Le séquenceur est commandé à partir de RI.
Le jeu d’instruction d’un µP/µC permet d’assurer un modèle de calcul universel. Tous les µP/µC
disposent donc de catégories d’instructions communes et dans ces catégories des instructions
similaires.
Bien que chaque microprocesseur ait un jeu d’instruction propre, il est toujours possible de clas-
ser ses instructions dans une des 4 catégories suivantes :
d) Les instructions de gestion de l’U.C. : interruptions, modes STOP, WAIT, etc. (voir suite).
La plupart des µPs et µCs disposent d’un jeu d’instruction assez étendu (plusieurs dizaines).
Une analyse statistique des programmes pour ces µPs et µCs montre qu’ils n’utilisent principale-
ment qu’un nombre réduit d’instructions parmi toutes celles disponibles.
Pour diminuer le temps d’exécution des programmes, certains constructeurs ont développé des
µPs et µCs d’une grande rapidité d’exécution. Presque toutes les instructions peuvent s’exécuter
en un seul cycle machine. En contrepartie, ils ne disposent que d’un jeu d’instruction réduit. Ceci
est possible grâce à l'architecture Harvard (voir plus haut). Les instructions peu fréquemment
utilisées avec les µPs et µCs à jeu d’instruction étendu sont ici réalisées avec plusieurs instruc-
tions. Globalement, le temps d’exécution est cependant plus court.
Il est inutile à l'utilisateur de connaître le format des instructions, car leurs codes sont produits
automatiquement dans la phase de traduction (compilation ou assemblage). Ce qui suit est très
succinct et donné pour information.
Le COP indique le type d’opération à effectuer (par exemple une addition, un transfert, etc.)
tandis que le nombre Qn permet d’accéder aux opérandes (s’il y en a !) de l’instruction
Dans les microprocesseurs 8 bits, le COP est codé sur un octet tandis que le nombre d’octets
réservés à Qn est variable.
Dans les µCs d’architecture Harvard de type PIC (Microchip), le COP et Qn tiennent sur un mot
de 12 à 14 bits selon les µCs
Instructions sur des constantes Exemple : ANDLW 20h (ET entre W et 20h =
0010 0000b)
11 10 9 8 7 6 5 4 3 2 1 0 11 10 9 8 7 6 5 4 3 2 1 0
COP constante 1 1 1 0 0 0 1 0 0 0 0 0
On a vu dans les exemples précédents que la quantité Qn peut, suivant le cas, aussi bien repré-
senter l’opérande, que son adresse en mémoire, etc.
En pratique, pour une même instruction, la façon d’accéder aux opérandes dépend du mode
d’adressage (MA) utilisé. Le mode d’adressage est codé dans le COP. Ce codage dépend du µP
et n’intéresse pas l’utilisateur. Le COP est automatiquement généré à partir du mnémonique lors
de la phase d’assemblage ou de compilation.
Selon les instructions, il peut y avoir un ou plusieurs modes d’adressage possibles. Une instruc-
tion de mise à 0 d’un registre spécifié correspond seulement au COP. Pour une instruction
d’addition, le premier opérande est dans un registre et le 2ème opérande peut-être placé à plu-
sieurs endroits (constante dans la mémoire programme, variable dans un registre interne, va-
riable dans la mémoire des variables). Il y donc plusieurs modes d’adressage possibles pour
l’addition.
Les modes d’adressages possibles dépendent des µPs et µCs. Néanmoins tous disposent de pos-
sibilités de base décrites plus loin.
Certains modes d’adressage sont prévus pour un accès aux données organisées de certaines
façons. Ci-dessous, on montre que le mode d’adressage indexé permet d’utiliser des tableaux.
Voir § 8.5.2 / Adressage indexé et utilisation de tableau.
Les emplois de tous les modes d’adressage ne peuvent être décrits dans cette introduction.
En général une instruction complète s’écrit avec son mnémonique qui ne dépend pas du mode
d’adressage suivi de la ou des références (emplacement du résultat, opérande(s) ou emplace-
ment(s) du ou des opérandes)
Pour les µC d’architecture Harvard de type PIC (Microchip), chacun des mnémoniques (peu
nombreux) correspond à un mode d’adressage.
ex : en langage d'assemblage PIC,
ANDLW 0110 1111b signifie effectuer un ET logique entre le contenu du registre W
et 0111 1111 (« litteral ») AND Litteral and W
ANDWF 0011b,0 signifie effectuer un ET logique entre le contenu du registre W et
le contenu du registre f d’adresse 0011, le résultat est rangé dans le registre f de dé-
part (dernier 0)
Les différents modes d’adressage sont mentionnés par les règles d’écritures propres à chaque
assembleur spécifique à un µP ou µC.
Les modes d’adressages possibles dépendent des µPs et µCs. Pour connaître les modes
d’adressage de chaque µP ou µC, il faut se référer à sa documentation technique détaillée.
Les 3 premiers modes d’adressage de la liste ci-dessous se retrouvent dans tous les µPs. Les
modes d’adressage suivant sont quelques exemples parmi ceux disponibles sur les µPs/µCs des
familles Intel ou Motorola.
Certains constructeurs utilisent le terme adresse effective (EA Effective Address) pour désigner
l’adresse véhiculée sur le bus d’adresse qui correspond à l’emplacement mémoire ou au registre
qui contient l’opérande.
Le mnémonique et le code opératoire qui le traduit contient toute l’information pour l’instruction
à exécuter
L’opérande est une constante qui est donnée sur la ligne de l’instruction (après le mnémonique
et la ou les autres références éventuelles). En mémoire, on trouve donc le code opératoire suivi
l’opérande (après le codage des éventuelles autres références).
Lorsqu’il y a plusieurs opérandes, le mode d’adressage immédiat ne concerne qu’un opérande.
La constante est dans Qn.
Exemples (68HC11) : LDAA #$B0Qn = B0h et le caractère # indique qu’il s’agit du mode
d’adressage immédiat.
Adressage relatif
Ce mode d’adressage est utilisé pour les sauts et les branchements. Il n’est parfois pas mention-
né dans la documentation des µPs qui en disposent, car son emploi est transparent à l’utilisateur
en langage d'assemblage. En effet il est employé avec des instructions du type « SAUT eti-
quette », avec « etiquette » placée en début de ligne de programme à atteindre. Après assem-
blage, « etiquette » sera remplacée par le déplacement à ajouter à l’adresse de l’instruction de
saut pour atteindre l’adresse de l’instruction désirée. Le déplacement peut être positif ou négatif.
Ce mode d’adressage a de nombreuses variantes. Il permet, entre autres, d’accéder aux élé-
ments d’un tableau. Un tableau est constitué de plusieurs éléments avec un seul nom. Ce nom
correspond à l’adresse de début du tableau.
L’adresse effective de l’opérande est égale à une base + un déplacement. Le registre d’index
peut contenir le déplacement par rapport au début du tableau nécessaire pour atteindre un élé-
ment de ce tableau. La base est alors l’adresse de début du tableau.
Le registre d’index est un registre interne au µP ou à la CPU du µC qui peut être spécifique ou au
contraire un registre général utilisé pour cet emploi.
Exemples :
Intel 80C196 : LD AX, Table[BX] ; charger (LoaD) le registre AX avec l’opérande dont
l’adresse effective est égale à l’adresse de début du tableau Table + le contenu du registre BX
(registre général qui contient le déplacement).
Pour savoir comment est défini le nom Table, voir le §13 et plus particulièrement le § 13.2.
Motorola 68HC11 : ADDA Table,X ; ajouter au contenu de A l’opérande d’adresse effective
égale à l’adresse de début du tableau Table + le contenu du registre X (registre d’index spéci-
fique)
Pour savoir comment est défini le nom Table, voir le §13 et plus particulièrement le § 13.2.
L’adresse effective de l’opérande suit le mnémonique. Si l’adresse effective est sur 16 bits, dans
la mémoire, l’adresse effective est rangée dans les 2 octets qui suivent le code opératoire.
Qn correspond donc à l’adresse effective.
Les opérandes sont dans des registres internes du µP/µC, le résultat de l’opération est lui aussi
dans un registre.
Exemple : ADD AX, BX, CX signifie additionner les contenus des registres BX et CX et placer
le résultat dans AX
Lors du déroulement d’un programme il est nécessaire de mémoriser certains registres dans une
zone de la RAM avec un fonctionnement particulier : la pile.
Dans les phases décrites § 9.2 et suivants, le µP va devoir sauvegarder automatiquement puis
récupérer certains registres. L’utilisateur peut lui aussi procéder de façon identique à une sauve-
garde ou restitution automatique à l’aide d’instructions spécifiques.
La sauvegarde d’une donnée sur la pile peut s’effectuer automatiquement (voir §9.2 et suivants)
ou à l’aide d’une instruction écrite par le programmeur.
La récupération d’une donnée sur la pile peut être elle aussi automatique ou réalisée avec une
instruction programmée par le programmeur.
Ad-5
Ad-4
Haut de la pile Ad-3 SP
Ad-2 Donnée 2
Ad-1 Donnée 1
Bas de la pile Ad Donnée 0
Fig. 35 : État de la pile après récupération automatique du PC
On voit que la dernière donnée récupérée est nécessairement le dernière donnée enregistrée
sur la pile d’où l’appellation LIFO (Last In, First Out) pour ce type de mémoire.
C’est l’utilisateur qui fixe la zone de RAM affectée à la pile en utilisant une instruction
d’initialisation du pointeur de pile (chargement de la valeur du bas de la pile qui est l’adresse la
plus haute) à l’aide d’une instruction spécifique.
Avec certains µCs (PIC par exemple), l’utilisateur n’a pas accès au pointeur de pile. La gestion de la
pile est toujours automatique.
Après son implantation dans la mémoire programme d’un système à µP/µC, le déroulement sim-
plifié d’un programme & sous programme est montré sur la figure suivante :
On voit que l’adresse de retour au programme appelant est différente pour les 3 exécutions du
sous programme. Cette adresse est mémorisée dans une zone mémoire particulière : la pile.
Lorsqu’un sous programme appelle un autre sous programme, la pile contient 2 adresses de re-
tour.
La gestion de la pile est automatique. Avec la plupart des µPs/µCs, il ne faut pas oublier
d’initialiser le pointeur de pile. Avec un PIC, il n’y a pas de pointeur de pile.
Le pointeur de pile doit impérativement avoir été initialisé en tout début de programme princi-
pal.
Ces opérations sont très faciles. Avec l’utilisation d’étiquettes, il n’y a même pas besoin de con-
naître l’adresse physique exacte de l’emplacement d’un sous programme. Voir le § Structure
d’un programme source.
Il ne faut pas oublier d’initialiser le pointeur de pile.
Exemples
en langage d'assemblage en langage d'assemblage
68HC11 80C196
appel sous programme, placé JSR NomProgramme* CALL NomProgramme
dans le programme principal (Jump to SubRoutine)
10.3 INTERRUPTION
10.3.1 PRESENTATION
Exécution de A Exécution de A
A B A
t
Evénement Fin de B
extérieur
(appel de B)
Fig. 37 : Principe d’une interruption
Une fois que l’interruption à été servie (exécutée) le programme principal reprend son cours à
partir de l’endroit où il a été interrompu.
Remarque
• A peut être interrompu à n’importe quel instant par B (événement imprévisible),
• A et B utilisent les mêmes registres de l’U.C.,
EXECUTION DE A
EVENEMENT
Exécution de l'instruction en cours
Sauvegarde automatique du compteur programme
(adresse de retour pour suite de A)
Sauvegarde automatique des registres
Appel du programme d'interruption
INST 1
INST 2
Exécution du
programme
d'interruption
Instruction de retour au programme principal
(RTI pour le 68HC11)
EXECUTION DE A
On note une certaine similitude entre les sous-programmes et les routines d’interruption mais
pour les interruptions :
• l’appel est déclenché par un événement externe,
• la sauvegarde des registres est indispensable (sur certain µP ou µC comme le 68HC11 cette
sauvegarde ainsi que la restitution des registres est automatique).
Les registres et le compteur programme sont sauvegardés dans la pile. La procédure est transpa-
rente à l’utilisateur qui doit cependant s’assurer du bon fonctionnement de la pile.
Les connexions pour les demandes d’interruption sont réalisées de la façon suivante :
unité unité
d'échange entrées d'échange
entrées INT1 interne 1 d'inter-
INT1 1
d'inter- INT2 ruption
INT2
INT3
ruption INT4
unité unité
d'échange d'échange
interne 2 2
CPU µP
... ...
µC Système à µP
Fig. 39 : liaisons de demandes d’interruption dans µC Fig. 40 : liaisons de demandes d’interruption dans un
système à µP
Un µC peut reconnaître chaque source d’interruption. A chacune de ces sources, on peut attri-
buer un programme d’interruption différent. L’identification d’une source d’interruption permet
de lui affecter une priorité. Un µC peut disposer d’un grand nombre de sources d’interruption
identifiable (ex : 21 pour le 68HC11).
La plupart des µPs et les CPUs de certains µCs disposent d’assez peu d’entrées d’interruption (2
à 4), alors qu’il y a souvent plus de sources d’interruption. La CPU d’un PIC ne dispose que de 2
entrées d’interruption.
Il n’est pas possible d’identifier directement chaque source d’interruption. Dans l’exemple pré-
cédent, lorsqu’une unité d’échange demande une interruption, c’est l’entrée INT2 qui est acti-
Certaines interruptions peuvent être masquées, c’est-à-dire qu’elles ne sont pas prises en
compte.
Remarque : certains µCs (tel le PIC) ont 3 niveaux : autorisation globale, autorisation pour tous les
périphériques, autorisation individuelle
Les demandes d'interruptions peuvent être mémorisables ou non. Si une demande intervient un
court instant puis disparaît et n'est pas mémorisée, elle n'est pas prise en compte si les interrup-
tions sont masquées. Si elle est mémorisée, elle sera prise en compte et servie dès que les inter-
ruptions seront autorisées.
En plus de ce qui est indiqué en 9.3.2 et 9.3.3, lors du traitement d'une interruption, le µP inhibe
globalement toute demande d'interruption masquable, par positionnement d’un bit dans un re-
gistre de contrôle. Ceci permet d'éviter qu'une nouvelle interruption intervienne de façon indési-
rable lors du traitement d'une interruption précédente. En fin d'interruption, les interruptions sont
de nouveau globalement autorisées.
La plupart des µPs/µCs permettent d’établir des priorités entre interruptions. Certains µCs n’ont
pas de priorité entre les interruptions (ex : PIC).
La priorité des interruptions intervient lorsque plusieurs demandes d'interruptions sont en attente
de traitement. Ceci correspond à plusieurs cas :
• le programme est en déroulement normal et plusieurs demandes surviennent avant leur prise
en compte (fin de l'instruction en cours).
• une interruption est en cours de traitement avec inhibition globale des nouvelles demandes
d'interruptions et plusieurs demandes surviennent avant la fin du traitement.
Dans un µC, l’ordre de priorité est fixé par le constructeur. Quelques fois, il est possible à
l’utilisateur de modifier un ordre de priorité par défaut, en écrivant un mot dans un registre de
configuration.
Dans un système à µP, il n’existe une priorité qu’entre les quelques entrées d’interruption dispo-
nibles. Dans le cas où il y a de nombreuses unités d’échange, il est possible de fixer un ordre de
priorité en intercalant un circuit spécialisé, un contrôleur d’interruption, entre le µP et les unités
d’échange, …
Avec des interruptions vectorisées (cas le plus fréquent), le programmeur doit écrire les pro-
grammes d’interruption, et remplir la zone mémoire qui contient les vecteurs d’interruption
(adresses de début des sous programmes d’interruption). Ceci s’effectue de façon très simple au
niveau de l’écriture du programme source, avec l’emploi d’étiquette qui permet de ne pas con-
naître l’adresse physique exacte de début d’un programme d’interruption. Voir § sur la structure
du programme source.
La zone mémoire des vecteurs d’interruption est donnée dans la documentation technique des
µPs ou µCs.
Avec des interruptions non vectorisées et une adresse unique pour toutes les sources
d’interruption (ex PIC), le programmeur doit écrire le programme d’interruption à partir de
l’adresse mentionnée dans la documentation. Le programme d’interruption doit commencer par
rechercher la source de l’interruption.
Lorsqu’une demande d’interruption survient un bit spécifique (« flag ») à cette demande est posi-
tionné dans un registre d’état. C’est ce bit qui entraîne le traitement de l’interruption.
En fin de traitement d’une interruption, il faut replacer le bit dans son état initial pour éviter que
le µP/µC ne reparte en interruption : c’est l’acquittement de l’interruption.
Le lancement d’un programme après la mise sous tension ou après une réinitialisation suite à un
défaut est souvent appelé procédure de RàZ ou RESET. Selon les µPs ou µCs cette procédure
s’apparente ou non à une interruption.
La broche RESET est souvent bi-directionnelle : un état actif appliqué de l’extérieur effectue une
RàZ, si une RàZ est commandée en interne (ex : instruction illégale) cette broche est forcée à
son état actif pour commander les périphériques externes qui sont connectés. Cette possibilité
est due à la structure interne pour la broche : une entrée câblée sur une sortie drain ouvert
commandée par la RAZ interne.
Adresse non Après une RàZ le µP effectue un certain nombre d’opérations puis dépose sur le
vectorisée bus d’adresse une adresse prédéfinie et recherche le 1er code opératoire. Le pro-
gramme s’exécute.
Par exemple le 80C196 délivre l’adresse 2080h après un RESET
Remarque : Certains µP/µC font la distinction entre les différentes commandes de RàZ et dispo-
sent d’un vecteur pour chaque RàZ.
Le chien de garde (watch dog) permet de surveiller le bon déroulement d’un programme de la
façon suivante :
• en fonctionnement normal, le programmeur a inséré régulièrement des instructions dans son
programme pour que des actions soient effectuées à intervalles de temps assez réguliers.
Ces actions bloquent le dispositif de RàZ
• lors d’une erreur dans le déroulement du programme (« plantage »), les actions n’ont plus
lieu ou à des intervalles de temps trop espacés. La RàZ intervient alors.
Un chien de garde externe est souvent constitué d’un monostable redéclenchable. Les actions
du programme consistent en des fronts appliqués sur l’entrée d’horloge, via une unité d’échange.
La sortie du monostable est connectée à l’entrée de RESET.
Un chien de garde interne est souvent constitué d’un compteur ou d’un décompteur dont les
sorties évoluent en permanence au rythme d’une horloge interne. Les actions du programme
consistent à écrire un (ou plusieurs) mots dans un registre de contrôle pour réinitialiser le conte-
nu du compteur. En l’absence de réinitialisation, lorsque le contenu passe par une valeur prédé-
terminée (ex 0), une RàZ intervient. Les actions du programme doivent empêcher au compteur
d’atteindre la valeur prédéterminée.
Le chien de garde interne peut être mis en service ou non par programmation d’un bit d’un re-
gistre interne.
Le chien de garde étant commandé avec une horloge issue de l’oscillateur à quartz, si cette hor-
loge a un dysfonctionnement, le chien de garde ne fonctionne plus. Certains µC ont en complé-
ment un circuit de surveillance de l’horloge.
Les structures internes détaillées des µP varient assez fortement d’un constructeur à l’autre, no-
tamment à cause de la présence ou non de registres spécialisés (accumulateur, …) et des diffé-
rentes façons de gérer la mémoire (modes d’adressage).
Les structures internes des µPs sont souvent très complexes, aussi les constructeurs ne donnent
dans leurs notices techniques que des structures très simplifiées. Celles-ci permettent d’avoir une
vue d’ensemble des registres disponibles mais ne sont pas faites pour une compréhension du
fonctionnement interne (qui est inutile à l’utilisateur).
A modifier
Dans l’unité d’exécution (partie opérative mentionnée précédemment), on retrouve quelques-
uns des éléments mentionnés en 6): l’ALU, le registre d’état. A est l’accumulateur principal ; B, C
et D peuvent avoir de multiples fonctions. SP est le pointeur de pile ; les registres BP, SI, DI sont
liés au mode d’adressage.
Pour la partie d’interfaçage avec le bus, le registre IS joue un peu le rôle du compteur
programme. Les registres CS, DS, ES, SS sont liés aux modes d’adressage. L’adresse est ici
déterminée en effectuant la somme de 2 registres avec le sommateur Σ.
La structure interne, même simplifiée, n’est que de peu d’utilité pour l’utilisateur. Certains
constructeurs ne donnent dans leur notice technique que le modèle logiciel ou modèle du
programmeur.
Les registres qui apparaissent ici ont tous été décrits précédemment. Le registre « condition
codes » est un registre d’état associé aux accumulateurs A et B et un registre de contrôle pour
les interruptions.
12.1 INTRODUCTION
Les circuits d’interface ont 2 utilités : la communication avec le monde extérieur, quelques fois
via d’autres circuits, et la communication entre systèmes à µP ou µC. Les circuits d’interface cor-
respondent aux unités d’échange mentionnées au § 4.
On ne traitera ici que des interfaces les plus usuelles qu’on rencontre dans beaucoup de sys-
tèmes à µP et µC.
Les interfaces sont composées de registres accessibles par le µP. C’est à travers ces registres que
s’effectuent les opérations d’entrées/sorties. Ces interfaces peuvent être perçues de deux façons
différentes selon les constructeurs :
• les boîtiers d’E/S sont traités comme des boîtiers mémoire de n adresses (1 par registre) (ex :
µP Motorola de la famille 6800, ... µC de la famille HC11, ...). Les inconvénients consistent
en une perte de place de l’espace d’adressage.
• les E/S correspondent à des instructions spéciales et à des signaux permettant de différen-
cier les transferts mémoires des E/S (ex : pour certains µP Intel). Les avantages sont
l’utilisation d’instructions plus rapides car plus courtes pour les E/S. Les inconvénients sont
Dans un système à µP, un boîtier d’interface se connecte de la même façon qu’un boîtier mé-
moire, sauf en ce qui concerne quelques signaux spécifiques dans certains cas. Voir la figure du
§ 5.1).
Dans un µC, les interfaces sont incluses. Toutefois si on veut accroître leur nombre, il est possible
de le faire avec certains µC. Pour que ceci soit réalisable, le µC doit pouvoir fonctionner en
mode étendu (voir plus loin). Dans ce cas tous les bus sont disponibles, comme sur un µP. On
allie alors les avantages du µP et du µC
Les échanges avec l’extérieur se font par mots de même taille que le bus de données du µP.
Ce sont les interfaces les plus répandues et les plus simples à mettre en œuvre.
Dans un système à µP, un boîtier d’interface // permet en général d’assurer des échanges avec
plusieurs mots. A chaque mot correspond un port.
Dans de nombreux cas, à chaque port sont associées des broches de contrôle qui seront dé-
crites par la suite pour la gestion des échanges. Ces broches peuvent avoir plusieurs fonctions.
Les échanges peuvent s’effectuer avec ou sans protocole de communication. Les échanges peu-
vent s’effectuer soit dans un sens soit dans l’autre, après programmation du port (écriture d’un
mot dans un registre de contrôle). Quelques fois les échanges peuvent être bidirectionnels avec
nécessairement des signaux pour un protocole de communication.
Après programmation, l’envoi d’une donnée à l’extérieur se fait par écriture dans le registre de
sortie, la lecture d’une donnée de l’extérieur s’effectue par lecture du registre d’entrée.
Les interfaces de ce type sont les plus simples à mettre en œuvre. Les échanges s’effectuent soit
dans un sens, soit dans l’autre.
Le µP envoie des données vers l’extérieur sans se soucier de savoir si elles sont correctement
reçues. De même le µP lit les données de l’extérieur sans savoir si l’organe transmetteur les a
correctement envoyées.
Exemple : Le port E du 68HC11 est utilisable en port parallèle d’entrée sans possibilité de proto-
cole d’échange.
donnée prête
à transmettre
adresses
données PORT D'UNE Périphé-
INTERFACE rique
contrôle DONNEE
demande
d'interruption donnée lue
µC ou système à µP
• le µP écrit des données dans le registre de sortie du port activation de la broche « don-
née prêtre à transmettre »
• le périphérique lit la donnée et active la broche « donnée lue ».
• l’activation de la broche « donnée lue » entraîne :
la modification d’un bit d’état d’un registre associé au port
la transmission d’une demande d’interruption (si elle a été autorisée)
la désactivation de la broche « donnée prête à transmettre »
• le µP ou la CPU du µC peut présenter une nouvelle donnée, après avoir auparavant lu le re-
gistre contenant le bit d’état pour réinitialiser celui-ci et annuler la demande d’interruption.
12.4.1 GENERALITES
Pour réduire le nombre de fils, on utilise des liaisons série : les données sont envoyées bit par bit
sur un fil. Dans ce cas les liaisons minimales sont : un fil pour le transfert des informations dans
un sens, un fil pour le transfert dans l’autre sens, un fil pour la masse. Certaines liaisons séries
nécessitent plus de fils, comme nous le verrons par la suite.
Le µP délivrant les données sous forme parallèle (par mot de la taille du bus de données), il est
nécessaire d’utiliser un circuit d’interface parallèle/série, plus simplement appelé interface série.
Le centre d’un tel circuit est un registre à décalage.
La sortie série (émetteur) ou l’entrée série (récepteur) s’effectue à la cadence d’une horloge (1
bit par période d’horloge).
L’horloge est souvent générée de façon interne, à partir de l’oscillateur à quartz du µP ou µC.
Il existe souvent plusieurs options de fonctionnement. Le choix retenu s’effectue par écriture
d’un mot dans un (ou plusieurs) registre(s) de contrôle de l’interface série.
Après programmation, l’envoi d’un mot s’effectue par une écriture dans le registre de sortie ; la
lecture d’un mot reçu s’effectue par lecture du registre d’entrée. Pour effectuer ces opérations
aux bonnes dates, on peut utiliser les interruptions générées par une fin d’émission ou de récep-
tion (voir § 10.3)
Il est indispensable que le front de l’horloge qui commande le décalage en réception ait lieu
lorsque le bit transmis est valide, c’est-à-dire suffisamment longtemps après le changement d’état
du bit précédent et suffisamment longtemps avant le changement d’état du bit suivant.
Selon que l’on adopte une solution ou l’autre, on obtient 2 types de liaisons :
• Les liaisons synchrones : la transmission est faite au rythme d’un signal d’horloge transmis
avec les données. Les paquets de données (un paquet = un mot de la taille du bus de don-
nées) peuvent être envoyés les uns à la suite des autres, sans temps mort, de manière conti-
nue.
• Les liaisons asynchrones : la transmission est faite de façon discontinue par paquet. Chaque
paquet est de longueur constante et il est repéré par un code de début et de fin. Durant la
transmission d’un paquet, le récepteur génère une horloge de fréquence quasi identique à
celle de l’émetteur, avec les fronts actifs pour le décalage correctement placés par rapport
aux données. En général, l’émetteur et le récepteur doivent avoir été programmés pour
fonctionner à la même vitesse de transmission.
Elles sont très utilisées en informatique. Les ports série des ordinateurs PC sont de ce type, à la
norme RS232. Beaucoup de µC intègrent une interface de ce type, mais ne sont toutefois pas
compatibles sur les niveaux de tension. Il suffit d’ajouter un circuit externe pour assurer cette
compatibilité.
H
émission
données t
transmises
0 1 1 0 1 0 0 1
H t
réception
correcte
H 0 1 1 0 1 0 0 1 données lues t
réception
mauvaire t
0 1 1 ? 0 0 1 1 données lues
Fig. 45 : Transmission avec horloge réception correcte et incorrecte
Pour synchroniser l’horloge réception sur celle d’émission, le mot à transmettre est encadré d’un
bit de début et d’un bit de fin. Le mécanisme de synchronisation est transparent à l’utilisateur.
Les informations peuvent être échangées avec des débits élevés et très peu de fils de liaisons.
Les informations sont véhiculées en continu, sans qu’il soit nécessaire de placer des bits de dé-
part et d’arrêt, comme avec une liaison asynchrone. Les échanges se font entre un maître et un
ou plusieurs esclaves.
Il n’existe pas de normes pour les échanges série synchrones, les associations de circuits via une
liaison série synchrone ne sont souvent possibles qu’entre membres d’une même famille chez un
même constructeur.
Une interface synchrone peut se programmer (vitesse de transmission, position des fronts de
l’horloge par rapport aux données) en écrivant dans son registre de contrôle.
Les CAN intégrés sont à approximations successives. Le lancement d’une conversion s’effectue
simplement en écrivant dans un registre de contrôle. La conversion est précédée d’une phase
d’échantillonnage blocage. Il est donc inutile de placer en externe un échantillonneur bloqueur.
Voir la documentation des µC. Un multiplexeur est souvent placé avant le CAN. La voie à con-
vertir est choisie par programmation.
Cette solution n’est à retenir que pour quelques cas particuliers : augmentation de la résolution
par rapport au CAN interne, famille de µC sans CAN (rare), …
Si le µC travaille en mode « circuit seul », la connexion d’un CAN à accès parallèle sur un port
occupe beaucoup de liaison (8 pour un CAN 8 bits, plus des signaux de contrôle du fonction-
nement). Pour diminuer le nombre de liaisons nécessaires, les CAN à accès série sont les plus
utilisés. Ils ne nécessitent que 2 ou 3 liaisons et peuvent se connecter sur le port série synchrone
ou sur des sorties d’un port parallèle. Dans ce dernier cas, le signal d’horloge est créé par logi-
ciel.
Si le µC travaille en mode « circuit seul », la connexion d’un CNA à accès parallèle sur un port
occupe beaucoup de liaison (8 pour un CNA 8 bits, plus éventuellement des signaux de contrôle
du fonctionnement). Pour diminuer le nombre de liaisons nécessaires, les CNA à accès série se
développent de plus en plus. Ils ne nécessitent que 2 ou 3 liaisons et peuvent se connecter sur le
port série synchrone ou sur des sorties d’un port parallèle. Dans ce dernier cas, le signal
d’horloge est créé par logiciel.
Il existe plusieurs types de temporisateurs. Tous sont bâtis autour d’un compteur ou d’un dé-
compteur qui s’incrémente au rythme d’une horloge la plupart du temps issue de l’oscillateur à
quartz du µP ou µC. La fréquence de cette horloge dépend du quartz et d’un mot de contrôle
écrit dans un registre de contrôle.
Selon les interfaces (externes pour un système à µP ou internes dans un µC), le compteur peut
fonctionner :
• en permanence (mode « free running »)
• uniquement après une validation (externe ou par écriture dans un registre de contrôle).
Dans ce cas, il est aussi possible d’initialiser la valeur du compteur
L’utilisation de compteur « free running » complique un peu le logiciel. Il n’est pas possible dans
cette introduction de détailler cette partie sur les « timers » qui sont les interfaces dont la mise en
œuvre est la moins facile.
Voici juste un exemple de la façon de procéder pour effectuer une mesure d’intervalle de temps.
Exemple :
On désire effectuer une mesure d’intervalle de temps entre un front montant et un front descen-
dant sur un signal externe. Le timer utilise un compteur « free running ».
La structure assez détaillée ne peut être introduite qu’après explication sur les bus d’adresses et
de données.
Ces bus complets nécessitent beaucoup de connexions. Il est possible de diminuer le nombre de
broches à utiliser avec la technique du multiplexage temporel.
Selon les µC, le choix s’effectue à l’aide d’une ou plusieurs entrées de sélection de mode.
Pour certains µP, il est possible de récupérer les ports d’interfaces parallèles pris par les bus de
données et d’adresses en plaçant un circuit externe spécifique. On dispose ainsi de l’équivalent
d’un µC complet avec tous ces ports + ses bus de données et d’adresses.
Pour diminuer le nombre de broches utilisées, on utilise les même broches pour acheminer
adresses et données, à des dates différentes. Un (ou plusieurs) circuit(s) de mémorisation est
(sont) nécessaire(s) pour qu’une à date donnée, on dispose de la totalité des bus.
Selon les µC une partie du bus de données ou sa totalité est multiplexée avec le bus d’adresse
Après démultiplexage, les bus d’adresses Après démultiplexage, le bus d’adresses a 16 bits et
et de données ont 16 bits le bus de données a 8 bits
Fig. 47 : 2 modes de fonctionnement étendu du 80C196
Les chronogrammes des bus et des signaux de contrôle sont les suivants :
ALE ALE
(Adress (Adress
Latch Latch
Enable) Enable)
Donnée Poids faible
AD0-15 Adresse AD0-7 Donnée
de l'adresse
Les informations présentes dans la 1ère partie du cycle (adresse complète ou bits de poids faible
de l’adresse) doivent être mémorisées sur le front descendant de ALE (Address Latch Enable).
Ceci est facilement réalisable avec un (ou 2) registre(s) de type verrou D (74xx373). Dans la 2ème
partie du cycle :
• dans le cas du bus 8 bits
la partie haute de l’adresse est disponible en AD8-15
la partie basse est disponible en sortie du circuit de mémorisation externe
la donnée est disponible en AD0-7
• dans le cas de bus 16 bits
l’adresse est disponible en sortie du circuit de mémorisation
la donnée est disponible en AD0-15
Exemple : schéma pour un µC 68HC11 en mode étendu avec tous les composants nécessaires.
Ici une mémoire EPROM de 8ko est utilisée en externe.
On distingue tous les composants et liaisons mentionnés plus haut, avec notamment :
• le circuit MC34064 d’initialisation à la mise sous tension et de réinitialisation en cas de
baisse de la tension d’alimentation
• les tensions de référence pour le CAN VRH et VRL ainsi que leur découplage
• les liaisons pour fixer le mode (ici mode étendu), avec MODA et MODB
Certaines broches sont connectées à des résistances de tirage pour que leurs potentiels soient
fixés. Ces broches restent utilisables.
Certaines broches ont une double fonction choisie par programmation. Par exemple, PE/AN
correspond soit à un port // soit aux entrées analogiques pour le CAN.
Les adresses et les données sont sorties sur des bus externes. Les poids faibles des adresses sont
multiplexés avec les données. Le circuit 74HC373 permet de mémoriser les poids faibles des
adresses.
14.1 GENERALITES
Le programme source peut se décomposer en grandes sections qui sont parfois repérées par des
mots clés dans certaines syntaxes.
L’appel des différents fichiers peut se faire par des directives dans les fichiers eux-mêmes ou lors
de la phase qui suit la compilation ou l’assemblage, l’édition de lien.
Les adresses de départ du programme principal et des sous-programmes peuvent être fixées
dans le fichier qui contient ces programmes ou bien fixée lors de l’édition de lien. Si les adresses
ne sont pas fixées dés le départ, on dit que les programmes sont relogeables.
Pour plus de détail voir document sur la compilation, l’assemblage et l’édition de liens.
L’emploi d’étiquettes permet à l’utilisateur de s’affranchir des adresses exactes des instructions
pour les sauts, branchements conditionnels, appels de sous programmes.
SousProg1 1ère instruction SousProg1 est une étiquette qui correspond à une
ProgInter1 1ère instruction ProgInter1 est une étiquette qui correspond à une
2ème instruction adresse. Celle-ci est déterminée lors de la phase
… d’assemblage. ProgInter1 peut être utilisée pour placer le
…dernière instruction du prog. vecteur d’interruption en mémoire.
d’inter.
15 RESUME
15.1 GENERALITES
Un système à µP ou un µC est constitué d’une unité de traitement qui ne comprend que des
entrées binaires (0/1). Pour le traitement d’informations analogiques, il faut des CAN et CNA.
Le µP (ou CPU d’un µC) exécute une suite d’instructions qui constituent le programme rangé
dans une mémoire associée, à des adresses déterminées. Chaque µP possède un jeu
d’instruction.
Les unités sont interconnectées par des bus. L’architecture la plus courante est de type Von
Neuman. Dans ce cas, on dispose de :
• un bus de données sur lequel sont véhiculés :
les codes des instructions
les données (constantes, variables)
des informations pour le calcul des adresses
• un bus d’adresses sur lequel sont véhiculées les adresses des mémoires et des différents re-
gistres des interfaces
• un bus de contrôle qui comprend tous les signaux nécessaires pour la gestion des échanges
Bus d'adresse
Mémoire Mémoire
Interface
µP programme données
parallèle
EPROM RAM
OE RD/WR RD/WR
Bus de donnée
Les traitements sont réalisés avec l’unité arithmétique et logique (Arithmetic Logic Unit, ALU).
Les traitements sont :
• opérations arithmétiques (addition en base 2, soustraction, incrémentation, …)
• opérations logiques (ET, OU, OU exclusif, décalages, rotations, …)
Un registre associé à l’ALU contient des bits d’états qui renseignent sur le résultat de la dernière
opération (=0, >0, <0, dépassement de capacité, …)
Un µP contient un séquenceur, commandé par une horloge (généralement à partir d’un quartz),
qui permet de générer toutes les commandes internes nécessaires au déroulement.
Les registres internes d’un µP permettent de mémorisation temporairement des données et ils
sont aussi utilisés pour l’adressage.
2 types de µP / µC :
• CISC : (Complet Instruction Set Computer) : jeu d’instruction étendu
• RISC : (Reduced Instruction Set Computer) : jeu d’instruction réduit et grande vitesse
d’exécution (grâce à une architecture particulière Harvard)
Le mode d’adressage concerne la façon dont est désigné l’opérande. Il se traduit par certaines
règles d’écriture au niveau des mnémoniques et des opérandes.
Lors du déroulement d’un programme, il est nécessaire de mémoriser certains registres dans une
zone de RAM avec un fonctionnement particulier : la pile
15.5.1 LA PILE
La pile est une zone de RAM utilisée pour sauvegarder des données temporaires. Elle est gérée à
l’aide d’un pointeur de pile contenu dans un registre interne au µP (Stack Pointer SP). Celui-ci
désigne l’emplacement libre de la pile pour une sauvegarde de donnée.
La sauvegarde d’une donnée dans la pile peut s’effectuer automatiquement lors de certaines
étapes du déroulement d’un programme ou à l’aide d’une instruction écrite par le programmeur.
Lors d’un enregistrement, la donnée est empilée (placée sur le haut de la pile)
Lors d’une restitution, la donnée est dépilée (retirée du haut de la pile)
Le pointeur de pile est automatiquement géré par le µP. L’utilisateur doit uniquement spécifier le
bas de la pile (adresse haute) avec une instruction particulière. L’utilisateur ne peut directement
imposer une limite au haut de la pile, à l’aide d’une instruction particulière par exemple.
L’appel d’un sous programme se fait avec une instruction spécifique suivie de l’adresse du sous
programme.
Le retour au programme principal se fait avec une instruction spécifique, placée en fin de sous
programme.
15.5.3 INTERRUPTION
Une interruption permet d’interrompre le déroulement normal d’un programme pour exécuter
un programme d’interruption. Une demande d’interruption est liée à un événement extérieur.
Ex : un événement extérieur indique au µP, via une interface, qu’une imprimante a bien reçu le
caractère transmis. Le programme d’interruption peut alors procéder à un nouvel envoi.