Académique Documents
Professionnel Documents
Culture Documents
et Microcontrleurs
Reprsentation de linformation en
numrique
Jlassi Khaled
2008
Ce
module
Microprocesseurs
et
Microcontrleurs
sintresse
aux
systmes
et
arriver
un
rsultat
raisonnablement
optimis,
ncessite
des
connaissances assez vastes, et il faut sans cesse les complter. La matrise des mthodes
traditionnelles des systmes logiques est insuffisante pour la conception d'un systme
base de microprocesseur ou microcontrleur. La pratique de plusieurs ralisations est
ncessaire pour acqurir une connaissance relle. Toutefois ce cours a pour ambition de
montrer de jeunes tudiants et des ingnieurs dsireux de se mettre jour et recycler
leurs connaissances sur un sujet en perptuelle volution les facettes principales de la
conception de systmes microprocesseur. Les sujets abords ici sont similaires ceux
qui sont le plus frquemment traits dans certains ouvrages de rfrences et certains
sites
Internet.
Nous
avons
volontairement dcoup
ce
cours
en
cinq
parties
Le but de ce module est de se familiariser avec les principes de base des circuits
numriques. Plus spcifiquement ce cours a pour ambition de montrer, de jeunes
tudiants et des ingnieurs dsireux de se mettre jour et recycler leurs connaissances
sur
un
sujet
en
perptuelle
volution,
les
facettes
principales
des
systmes
microprogramms.
Au terme de ce cours les tudiants seront en mesure :
dexpliquer
les
diffrente
reprsentations
des
donnes
numrique
et
alphanumriques.
de dfinir des critres de choix dun microcontrleur pour une application donne.
En effet il existe plusieurs famille de microcontrleurs dont les plus connues
sont : Atmel AT91 , Atmel AVR , le C167 de Siemens/Infineon, Hitachi H8, Intel
8051,Motorola 68HC11, PIC de Microchip, ST6 de STMicroelectronics, ADuC d' Anal
og Devices, PICBASIC de Comfile Technology . Il est bien vident que, dans le
cadre de ce cours dont le nombre de pages doit forcment rester limit, il ne va
pas tre possible de donner toutes les informations, matrielles et logicielles,
relatives tous ces microcontrleurs. Le manuel technique de chacun d'entre eux
comporte en effet plusieurs dizaines de pages, voir parfois une centaine. Nous
allons nous intresser dans le cadre de ce cours la famille Intel C51. Aprs une
brve prsentation de cette famille nous avons orient notre tude vers le
microcontrleur 80C51. Cest un microcontrleur 8 bits avec un jeu d'instructions
rduit
(101
instructions).
Ses
instructions
sont
organises
autour
d'un
I. Prsentation du binaire.
Vers la fin des annes 30, Claude Shannon dmontra qu' l'aide de "contacteurs"
(interrupteurs) ferms pour "vrai" et ouverts pour "faux" il tait possible d'effectuer des
oprations logiques en associant le nombre " 1 " pour "vrai" et "0" pour "faux". Ce codage de
l'information est nomm base binaire. Cest avec ce codage que fonctionnent les ordinateurs.
Il consiste utiliser deux tats (reprsents par les chiffres 0 et 1) pour coder les informations.
L'homme travaille quant lui avec 10 chiffres (0,1,2,3,4,5,6,7,8,9), on parle alors de base
dcimale.
I.1 Le bit.
Bit signifie "binary digit", c'est--dire 0 ou 1 en numrotation binaire. C'est la plus petite unit
d'information manipulable par une machine numrique. Il est possible de reprsenter
physiquement cette information binaire :
- par un signal lectrique ou magntique, qui, lorsqu'elle atteint une certaine valeur,
correspond la valeur 1.
- grce des bistables, c'est--dire des composants lectroniques qui ont deux tats d'quilibre
(un correspond l'tat 1, l'autre 0)
Avec un bit il est ainsi possible d'obtenir deux tats: soit 1, soit 0. 2 bits rendent possible
l'obtention de quatre tats diffrents (2*2):
2 bits
00
01
10
11
Avec 3 bits il est possible d'obtenir huit tats diffrents (2*2*2):
000
001
010
011
100
101
110
111
Pour un groupe de n bits, il est possible de reprsenter 2n valeurs.
2
Jlassi Khaled
I.2 L'octet.
L'octet est une unit d'information compose de 8 bits. Il permet de stocker un caractre, telle
qu'une lettre, un chiffre ... Ce regroupement de nombres par srie de 8 permet une lisibilit
plus grande, au mme titre que l'on apprcie, en base dcimale, de regrouper les nombres par
trois pour pouvoir distinguer les milliers. Par exemple le nombre 1 256 245 est plus lisible que
1256245. Une unit d'information compose de 16 bits est gnralement appele mot (en
anglais word). Une unit d'information de 32 bits de longueur est appele double mot (en
anglais double word, d'o l'appellation dword). Pour un octet, le plus petit nombre est 0
(reprsent par huit zros 00000000), le plus grand est 255 (reprsent par huit chiffre "un"
11111111), ce qui reprsente 256 possibilits de valeurs diffrentes.
27 =128 26 =64 25 =32 24 =16 23 =8 22 =4 21 =2
20 =1
KiloOctets, MgaOctets
Longtemps l'informatique s'est singularise par l'utilisation des units du systme
international avec des valeurs diffrentes. Ainsi beaucoup d'informaticiens ont appris que
1kilo-ocet=1024 octets. Hors depuis dcembre 1998, l'organisme international IEC a statu
(http://physics.nist.gov./cuu/Units/binary.html). L'informatique utilise donc:
Un kilo-octet (Ko) = 1000 octets
Un mga-octet (Mo) = 1000 Ko = 1 000 000 octets
Un giga-octet (Go) = 1000 Mo = 1 000 000 000 octets
Un tera-octet (To) = 1000 Go = 1 000 000 000 000 octets
Comme tout le monde serais-je tent de dire, mais galement le kilo binaire (kibi), le mga
binaire (mbi), le giga binaire (gibi), le tera binaire (tebi) dfinis comme ceci:
Un kibi-octet (Kio) vaut 210 = 1024 octets
Un mbi-octet (Meo)vaut 220 =1 048 576 octets
Un gibi-octet (Gio) vaut 230 =1 073 741 824 octets
Un tebi-octet (Tio) vaut 240 =1 099 511 627 776 octets
Il est galement utile de noter que la communaut internationale dans son ensemble utilise le
byte de prfrence l'octet purement francophone.
II. Les oprations en binaire.
Les oprations arithmtiques simples telles que l'addition, la soustraction et la multiplication
sont faciles effectuer en binaire.
Jlassi Khaled
en
binaire
se
fait
avec
les
mmes
rgles
qu'en
dcimale:
On commence additionner les bits de poids faibles (les bits de droite) puis on a des retenues
lorsque la somme de deux bits de mmes poids dpasse la valeur de l'unit la plus grande
(dans le cas du binaire: 1), cette retenue est reporte sur le bit de poids plus fort suivant...
Par exemple:
01101
+01110
- - - - - 11011
II.2 La multiplication en binaire.
La table de multiplication en binaire est trs simple:
0x0=0
0x1=0
1x0=0
1x1=1
La multiplication se fait en formant un produit partiel pour chaque digit du multiplieur (seul
les bits non nuls donneront un rsultat non nul). Lorsque le bit du multiplieur est nul, le
produit par l est nul, lorsqu'il vaut un, le produit partiel est constitu du multiplicande dcal
du nombre de positions gal au poids du bit du multiplieur.
Par exemple:
0 1 0 1 multiplicande
x
0 0 1 0 multiplieur
- - - - - 0000
0101
0000
- - - - - 01010
III. La base hexadcimale.
Les nombres binaires tant de plus en plus longs, il a fallu introduire une nouvelle base: la
base hexadcimale. La base hexadcimale consiste compter sur une base 16, c'est pourquoi
Jlassi Khaled
On appelle reprsentation (ou codification) d'un nombre la faon selon laquelle il est dcrit
sous forme binaire. La reprsentation des nombres sur un ordinateur est indispensable pour
que celui-ci puisse les stocker et les manipuler. Toutefois le problme est qu'un nombre
mathmatique peut tre infini (aussi grand que l'on veut), mais la reprsentation d'un nombre
dans un ordinateur doit tre fait sur un nombre de bits prdfini. Il s'agit donc de prdfinir un
nombre de bits et la manire de les utiliser pour que ceux-ci servent le plus efficacement
possible reprsenter l'entit.
IV.1 Reprsentation d'un entier naturel.
Un entier naturel est un entier positif ou nul. Le choix faire (c'est--dire le nombre de bits
utiliser) dpend de la fourchette des nombres que l'on dsire utiliser. Pour coder des nombres
entiers naturels compris entre 0 et 255, il nous suffira de 8 bits (un octet) car 28=256. D'une
manire gnrale un codage sur n bits pourra permettre de reprsenter des nombres entiers
naturels compris entre 0 et 2n-1. Pour reprsenter un nombre entier naturel, aprs avoir dfini
le nombre de bits sur lequel on le code, il suffit de ranger chaque bit dans la cellule binaire
correspondant son poids binaire de la droite vers la gauche, puis on "remplit" les bits non
utiliss par des zros.
5
Jlassi Khaled
Jlassi Khaled
IEEE
est:
10000100100000000000010000011011
Jlassi Khaled
I. Mise en situation.
Un systme numrique, intgrant de llectronique, fait souvent apparatre des fonctions ayant
pour rle le traitement dinformations : oprations arithmtiques (addition, multiplication...)
ou logiques (ET, OU...) entre plusieurs signaux dentre permettant de gnrer des signaux de
sortie. Ces fonctions peuvent tre ralises par des circuits intgrs analogiques ou logiques.
Mais, lorsque le systme devient complexe, et quil est alors ncessaire de raliser un
ensemble important de traitements dinformations, il devient plus simple de faire appel une
structure base de microcontrleur ou microprocesseur. Le dveloppement de ces
composants programmables a t rendu possible grce lessor considrable qua connu la
microlectronique et notamment les techniques dintgration. Cette volution a permis en
1971, la fabrication du premier microprocesseur par la socit INTEL. Ce microprocesseur, le
4004 , comportait dj 2300 transistors et fonctionnait avec un bus de donnes de 4 bits.
Depuis, lintgration du nombre de transistors dans les microprocesseurs na cess dvoluer,
paralllement la puissance de calcul et la rapidit dexcution. Aujourdhui, un
microprocesseur Pentium IV comporte a peu prs 24 millions de transistors et peut traiter des
donnes de 8, 16, 32, 64 bits en mme temps.
Jlassi Khaled
puissance de calcul dun microprocesseur CISC daujourdhui est considrable. Son caractre
gnraliste lui permet dtre par excellence le composant de base de linformatique. Mais en
instrumentation
le plus utilis. Il
comporte sur sa puce un certain nombre d'interfaces qui n'existent pas sur un microprocesseur,
par contre il est gnralement moins puissant en terme de rapidit ou de taille de mmoire
adressable et le plus souvent cantonn aux donnes de 8 ou 16 bits. Les microcontrleurs
utilisent la technologie RISC (Reduced Instruction Set Computer), dont la traduction est
"ordinateur jeu d'instructions rduit" et n'a pas de fonctions supplmentaires cbles. Ce qui
qui implique une programmation plus difficile et un compilateur plus puissant. Les
instructions dun microcontrleur sont tellement peu nombreuses (en moyenne une
soixantaine) qu'il est possible de les graver directement sur le silicium sans alourdir de
manire dramatique leur fabrication. L'avantage d'une telle architecture est bien videmment
le cot rduit au niveau de la fabrication des processeurs l'utilisant. De plus, les instructions,
tant simples, ils sont excuts en un cycle d'horloge, ce qui rend l'excution des programmes
plus rapides qu'avec des processeurs bass sur une architecture CISC. En plus, de tels
processeurs sont capables de traiter plusieurs instructions simultanment en les traitant en
parallle. Les microcontrleurs ont permis de faire voluer les systmes micro programms
vers encore plus de simplicit et de rapidit. Ils sont aujourdhui utiliss dans la plupart des
ralisations industrielles grand public ou professionnelles, ils grent au plus juste et au plus
vite les applications. Leur volution a permis l'intgration de circuits complexes varis. Ces
circuits ont t intgrs sur une mme puce donnant ainsi beaucoup de flexibilit et de
puissance de commande au microcontrleur. Cette polyvalence lui permet d'occuper une place
importante que ce soit en instrumentation, en commande ou en automatisme industriel. Le
meilleur exemple est bien videmment les automates programmables qui sont tous quips de
microcontrleurs.
II. Description et structure interne dun microcontrleur.
Un microcontrleur est un composant runissant sur un seul et mme silicium un
micro-processeur, divers dispositifs d'entres/sorties et de contrle d'interruptions ainsi
que de la mmoire, notamment pour stocker le programme dapplication. Ddi au
contrle, il embarque galement un certain nombre de priphriques spcifiques
3
Jlassi Khaled
) Un microprocesseur (C.P.U.),
) Des bus,
) De la mmoire de donne (RAM et EEPROM),
) De la mmoire programme (ROM, OTPROM, UVPROM ou EEPROM),
) Des interfaces parallles pour la connexion des entres / sorties,
) Des interfaces sries (synchrone ou asynchrone) pour le dialogue avec dautres
units,
) Des timers pour gnrer ou mesurer des signaux avec une grande prcision
temporelle.
Jlassi Khaled
MMOIRE
PROGRAMME
MMOIRE
DE DONNE
CHIEN
INT
MICROPROCESSEUR
ROM
EEPROM
RAM
DE
GARDE
INTERFACE
INTERFACE
SRIE
SIN
PORT C
PORT B
PORT A
TIMER2
TIMER1
PARALLLE
SCLK
C.A.N
SOUT
TIMERS
La prsence de ces divers lments de base est indispensable et, mme s'ils ne sont
pas toujours aussi visibles que sur notre synoptique, ils sont toujours prsents. Ces
lments sont les mmes que pour un systme informatique classique mais, dans le
cadre d'une application pouvant tre traite par un microcontrleur, leurs tailles et
fonctions diffrent un peu de ce que nous avons peut-tre l'habitude de voir. L'unit
centrale, gnralement constitue par un microprocesseur plus ou moins volu,
excute le programme qui va donner vie l'application. Pour les applications
industrielles, ces programmes ont en commun le fait qu'ils ne ncessitent que trs
rarement des calculs complexes alors qu'ils sont trs friands de manipulations
d'informations d'entres/sorties. Cest pour cette raison que la majorit des
microcontrleurs inclut une interface parallle de type PIA( Peripheral Interface
Adapter figure (2.1)). Etant donn la nature des applications des microcontrleurs
souvent les programmes sont contenus dans le deuxime lment de la figure (2.1)
qui est la mmoire morte ou ROM. Cette mmoire peut-tre constitue de diverses
faons: mmoire programme par masque, mmoire UVPROM ou EEPROM. De
cette faon, nous navons plus besoin de charger le programme dapplication
chaque
5
mise
sous
tension.
Lexcution
de
lapplication
est
enclenche
Jlassi Khaled
automatiquement la mise sous tension, ce qui nest pas le cas pour les systmes
base de microprocesseur qui ncessitent un programme de dmarrage (systme
dexploitation
ou
moniteur).
Pour
pouvoir
travailler
correctement
notre
Jlassi Khaled
fonctionnent
gnralement
en
compteurs,
dcompteurs,
gnrateurs
Enfin, bien que ce ne soit pas une vritable interface d'entre/sortie au sens o nous
l'entendons, certains microcontrleurs disposent d'un accs leur bus interne. Ceci permet de
connecter des botiers destins accomplir des fonctions qui font dfaut sur la puce ce qui est
parfois utile. Prcisons, mais c'est une vidence, que tous les microcontrleurs sans mmoire
morte interne disposent ncessairement de cette interface puisqu'il faut imprativement leur
permettre d'accder une mmoire morte externe contenant le programme de lapplication.
Bien sr, notre schma-type ne peut recouvrir tous les cas mais il vous donne une ide assez
prcise de ce que contient un microcontrleur. Il est bien vident daprs ce schma que la
puissance dun microcontrleur est directement lie au processeur quil intgre. C'est
7
Jlassi Khaled
pourquoi les constructeurs dveloppent souvent un cur de processeur destin aussi bien
dcliner une gamme de microprocesseurs que de microcontrleurs ; La tendance aujourdhui
et un cur de processeur 16 ou 32 bits qui reprsente une augmentation de la surface occupe
sur le silicium de seulement quelques pour-cent par rapport un circuit en 8 bits. Le prix du
microcontrleur tant directement li sa taille, embarquer une puissance suprieure est un
choix qui ne grve plus le budget. Opter pour un cur de processeur en 16 ou en 32 bits, c'est
permettre entre autres des excutions parallles, un espace mmoire largi, des interfaces de
communications ou encore le remplacement de fonctions analogiques par des traitements
numriques. Le cur de processeur 32 bits le plus pris aujourd'hui est l'ARM7. Pour preuve,
plusieurs fabricants lutilisent aujourdhui pour le dveloppement de microcontrleurs 32 bits.
Les secteurs les plus viss sont surtout les systmes de communication sans fil, les tlphones
portables et lindustrie automobile. Par exemple les microcontrleurs de la famille STR7 de
STMicroelectronics sont bass sur le cur ARM7. Ces microcontrleurs intgrent une
multitude dinterfaces srie (CAN, USB, I2C, SPI,..), de la mmoire SDRAM, de la mmoire
FLASH, des convertisseurs analogiques numriques, 48 entres/sorties, une interface JTAG,
plusieurs horloges temps rel,.. L tude dun microcontrleur bas sur le cur ARM7 comme
le STR7 dpasse largement le cadre de ce cours. La diversit des priphriques quil intgre
rend sa comprhension trs difficile cest pourquoi nous prfrons prsenter un cur de
processeur beaucoup plus simple comme exemple dtude dans le cadre de ce cours. Dans le
paragraphe suivant nous allons prsenter les lments gnraux communs aux divers types de
processeurs.
III. Le processeur.
Le processeur (microprocesseur) est le composant hardware le plus connu d'un systme
micro-programm. C'est l'unit intelligente de traitement des informations. Son travail
consiste lire des programmes (des suites d'instructions), les dcoder et les excuter. Les
annes 80 voyaient l'mergence de ces circuits avec les Zylog Z80, 6800 de Motorola, le 8085
de Intel qui est souvent utilis en tant que microcontrleur. Avec l'arrive des PC-XT d'IBM
et l'utilisation du 8088, INTEL devenait matre du march fin des annes 80. L'interfaage du
processeur avec lextrieur ncessite 3 bus: un bus de donnes, un bus d'adresse et un bus de
commande. Il existe des processeurs bass sur l'architecture CISC et dautres bass sur
larchitecture RISC. Cependant certains processeurs sont difficilement classifiables comme le
CPU i486 galement appel 80486. Ce vritable processeur 32 bits (bus internes et externes)
est mi chemin entre le tout CISC et le tout RISC. Ce processeur offre des performances
similaires aux processeurs RISC 32 bits, tout en restant compatible 100% avec son
8
Jlassi Khaled
prdcesseur CISC le 80386. Par contre le processeur 68040 de Motorola est bas sur
larchitecture CISC. Il est prsent par Motorola comme tant un processeur CISC pur et dur.
Les premiers concepteurs de processeurs rajoutaient le plus d'instructions possibles pour
permettre l'utilisateur de peaufiner ses programmes. Nanmoins, ces multiples instructions
ralentissent le fonctionnement du microprocesseur et sont peu utilises en pratique.
Actuellement, on utilise de plus en plus de processeurs RISC (Reduced Instruction Set
Computer). Le nombre d'instructions est rduit, mais excutes nettement plus rapidement.
Chaque instruction complexe peut tre programme par plusieurs instructions simples. Un
processeur est constitu de:
une unit de traitement (UAL - unit arithmtique et logique) qui excute les
instructions;
dun bus de donnes interne reliant lunit de commande lUAL et les registres.
Lorsque tous ces lments sont regroups sur une mme puce, on parle alors de
microprocesseur. La figure ci dessous donne une ide sur larchitecture interne dun
microprocesseur. Sur cette figure nous pouvons voir les 3 bus qui permettent au
microprocesseur de communiquer avec lextrieur.
Jlassi Khaled
I. Mise en situation.
Un systme numrique, intgrant de llectronique, fait souvent apparatre des fonctions ayant
pour rle le traitement dinformations : oprations arithmtiques (addition, multiplication...)
ou logiques (ET, OU...) entre plusieurs signaux dentre permettant de gnrer des signaux de
sortie. Ces fonctions peuvent tre ralises par des circuits intgrs analogiques ou logiques.
Mais, lorsque le systme devient complexe, et quil est alors ncessaire de raliser un
ensemble important de traitements dinformations, il devient plus simple de faire appel une
structure base de microcontrleur ou microprocesseur. Le dveloppement de ces
composants programmables a t rendu possible grce lessor considrable qua connu la
microlectronique et notamment les techniques dintgration. Cette volution a permis en
1971, la fabrication du premier microprocesseur par la socit INTEL. Ce microprocesseur, le
4004 , comportait dj 2300 transistors et fonctionnait avec un bus de donnes de 4 bits.
Depuis, lintgration du nombre de transistors dans les microprocesseurs na cess dvoluer,
paralllement la puissance de calcul et la rapidit dexcution. Aujourdhui, un
microprocesseur Pentium IV comporte a peu prs 24 millions de transistors et peut traiter des
donnes de 8, 16, 32, 64 bits en mme temps.
Jlassi Khaled
microprocesseurs ont une architecture CISC (Complex Instruction Set Computer, ce qui
signifie "ordinateur avec jeu d'instructions complexes". Cest le cas des processeurs de type
x86, c'est--dire les processeurs fabriqus par Intel, AMD, Cyrix, ... Les processeurs bass sur
l'architecture CISC peuvent traiter des instructions complexes, qui sont directement cbles
sur leurs circuits lectroniques, c'est--dire que certaines instructions difficiles crer partir
des instructions de base sont directement imprimes sur le silicium de la puce afin de gagner
en rapidit d'excution. L'inconvnient de ce type d'architecture provient justement du fait que
des fonctions supplmentaires sont imprimes sur le silicium, d'o un cot lev. D'autre part,
les instructions sont de longueurs variables et peuvent parfois prendre plus d'un cycle
d'horloge ce qui les rend lentes l'excution. Nanmoins, avec la considrable augmentation
de la taille des puces lectroniques et la gigantesque acclration des frquences d'horloge, la
puissance de calcul dun microprocesseur CISC daujourdhui est considrable. Son caractre
gnraliste lui permet dtre par excellence le composant de base de linformatique. Mais en
instrumentation
le plus utilis. Il
comporte sur sa puce un certain nombre d'interfaces qui n'existent pas sur un microprocesseur,
par contre il est gnralement moins puissant en terme de rapidit ou de taille de mmoire
adressable et le plus souvent cantonn aux donnes de 8 ou 16 bits. Les microcontrleurs
utilisent la technologie RISC (Reduced Instruction Set Computer), dont la traduction est
"ordinateur jeu d'instructions rduit" et n'a pas de fonctions supplmentaires cbles. Ce qui
qui implique une programmation plus difficile et un compilateur plus puissant. Les
instructions dun microcontrleur sont tellement peu nombreuses (en moyenne une
soixantaine) qu'il est possible de les graver directement sur le silicium sans alourdir de
manire dramatique leur fabrication. L'avantage d'une telle architecture est bien videmment
le cot rduit au niveau de la fabrication des processeurs l'utilisant. De plus, les instructions,
tant simples, ils sont excuts en un cycle d'horloge, ce qui rend l'excution des programmes
plus rapides qu'avec des processeurs bass sur une architecture CISC. En plus, de tels
processeurs sont capables de traiter plusieurs instructions simultanment en les traitant en
parallle. Les microcontrleurs ont permis de faire voluer les systmes micro programms
vers encore plus de simplicit et de rapidit. Ils sont aujourdhui utiliss dans la plupart des
ralisations industrielles grand public ou professionnelles, ils grent au plus juste et au plus
vite les applications. Leur volution a permis l'intgration de circuits complexes varis. Ces
11
Jlassi Khaled
circuits ont t intgrs sur une mme puce donnant ainsi beaucoup de flexibilit et de
puissance de commande au microcontrleur. Cette polyvalence lui permet d'occuper une place
importante que ce soit en instrumentation, en commande ou en automatisme industriel. Le
meilleur exemple est bien videmment les automates programmables qui sont tous quips de
microcontrleurs.
II. Description et structure interne dun microcontrleur.
Un microcontrleur est un composant runissant sur un seul et mme silicium un
micro-processeur, divers dispositifs d'entres/sorties et de contrle d'interruptions ainsi
que de la mmoire, notamment pour stocker le programme dapplication. Ddi au
contrle, il embarque galement un certain nombre de priphriques spcifiques
des domaines cibls (bus srie, interface parallle, convertisseur analogique
numrique, ...). Les microcontrleurs amliorent l'intgration et le cot (li la
conception et la ralisation) d'un systme base de microprocesseur en
rassemblant ces lments essentiels dans un seul circuit intgr. On parle alors de
"systme sur une puce" (en anglais : "System On chip"). Il existe plusieurs familles de
microcontrleurs, se diffrenciant par la vitesse de leur processeur et par le nombre
de priphriques qui les composent. Toutes ces familles ont un point commun cest
de runir tous les lments essentiels dune structure base de microprocesseur sur
une mme puce. Voici gnralement ce que lon trouve lintrieur dun tel
composant :
) Un microprocesseur (C.P.U.),
) Des bus,
) De la mmoire de donne (RAM et EEPROM),
) De la mmoire programme (ROM, OTPROM, UVPROM ou EEPROM),
) Des interfaces parallles pour la connexion des entres / sorties,
) Des interfaces sries (synchrone ou asynchrone) pour le dialogue avec dautres
units,
) Des timers pour gnrer ou mesurer des signaux avec une grande prcision
temporelle.
12
Jlassi Khaled
INT
MMOIRE
PROGRAMME
MMOIRE
DE DONNE
CHIEN
MICROPROCESSEUR
ROM
EEPROM
RAM
DE
GARDE
INTERFACE
INTERFACE
SRIE
SIN
PORT C
PORT B
PORT A
TIMER2
TIMER1
PARALLLE
SCLK
C.A.N
SOUT
TIMERS
La prsence de ces divers lments de base est indispensable et, mme s'ils ne sont
pas toujours aussi visibles que sur notre synoptique, ils sont toujours prsents. Ces
lments sont les mmes que pour un systme informatique classique mais, dans le
cadre d'une application pouvant tre traite par un microcontrleur, leurs tailles et
fonctions diffrent un peu de ce que nous avons peut-tre l'habitude de voir. L'unit
centrale, gnralement constitue par un microprocesseur plus ou moins volu,
excute le programme qui va donner vie l'application. Pour les applications
industrielles, ces programmes ont en commun le fait qu'ils ne ncessitent que trs
rarement des calculs complexes alors qu'ils sont trs friands de manipulations
d'informations d'entres/sorties. Cest pour cette raison que la majorit des
microcontrleurs inclut une interface parallle de type PIA( Peripheral Interface
Adapter figure (2.1)). Etant donn la nature des applications des microcontrleurs
souvent les programmes sont contenus dans le deuxime lment de la figure (2.1)
qui est la mmoire morte ou ROM. Cette mmoire peut-tre constitue de diverses
13
Jlassi Khaled
mise
sous
tension.
Lexcution
de
lapplication
est
enclenche
automatiquement la mise sous tension, ce qui nest pas le cas pour les systmes
base de microprocesseur qui ncessitent un programme de dmarrage (systme
dexploitation
ou
moniteur).
Pour
pouvoir
travailler
correctement
notre
14
Jlassi Khaled
fonctionnent
gnralement
en
compteurs,
dcompteurs,
gnrateurs
Enfin, bien que ce ne soit pas une vritable interface d'entre/sortie au sens o nous
l'entendons, certains microcontrleurs disposent d'un accs leur bus interne. Ceci permet de
connecter des botiers destins accomplir des fonctions qui font dfaut sur la puce ce qui est
parfois utile. Prcisons, mais c'est une vidence, que tous les microcontrleurs sans mmoire
morte interne disposent ncessairement de cette interface puisqu'il faut imprativement leur
permettre d'accder une mmoire morte externe contenant le programme de lapplication.
15
Jlassi Khaled
Bien sr, notre schma-type ne peut recouvrir tous les cas mais il vous donne une ide assez
prcise de ce que contient un microcontrleur. Il est bien vident daprs ce schma que la
puissance dun microcontrleur est directement lie au processeur quil intgre. C'est
pourquoi les constructeurs dveloppent souvent un cur de processeur destin aussi bien
dcliner une gamme de microprocesseurs que de microcontrleurs ; La tendance aujourdhui
et un cur de processeur 16 ou 32 bits qui reprsente une augmentation de la surface occupe
sur le silicium de seulement quelques pour-cent par rapport un circuit en 8 bits. Le prix du
microcontrleur tant directement li sa taille, embarquer une puissance suprieure est un
choix qui ne grve plus le budget. Opter pour un cur de processeur en 16 ou en 32 bits, c'est
permettre entre autres des excutions parallles, un espace mmoire largi, des interfaces de
communications ou encore le remplacement de fonctions analogiques par des traitements
numriques. Le cur de processeur 32 bits le plus pris aujourd'hui est l'ARM7. Pour preuve,
plusieurs fabricants lutilisent aujourdhui pour le dveloppement de microcontrleurs 32 bits.
Les secteurs les plus viss sont surtout les systmes de communication sans fil, les tlphones
portables et lindustrie automobile. Par exemple les microcontrleurs de la famille STR7 de
STMicroelectronics sont bass sur le cur ARM7. Ces microcontrleurs intgrent une
multitude dinterfaces srie (CAN, USB, I2C, SPI,..), de la mmoire SDRAM, de la mmoire
FLASH, des convertisseurs analogiques numriques, 48 entres/sorties, une interface JTAG,
plusieurs horloges temps rel,.. L tude dun microcontrleur bas sur le cur ARM7 comme
le STR7 dpasse largement le cadre de ce cours. La diversit des priphriques quil intgre
rend sa comprhension trs difficile cest pourquoi nous prfrons prsenter un cur de
processeur beaucoup plus simple comme exemple dtude dans le cadre de ce cours. Dans le
paragraphe suivant nous allons prsenter les lments gnraux communs aux divers types de
processeurs.
III. Le processeur.
Le processeur (microprocesseur) est le composant hardware le plus connu d'un systme
micro-programm. C'est l'unit intelligente de traitement des informations. Son travail
consiste lire des programmes (des suites d'instructions), les dcoder et les excuter. Les
annes 80 voyaient l'mergence de ces circuits avec les Zylog Z80, 6800 de Motorola, le 8085
de Intel qui est souvent utilis en tant que microcontrleur. Avec l'arrive des PC-XT d'IBM
et l'utilisation du 8088, INTEL devenait matre du march fin des annes 80. L'interfaage du
processeur avec lextrieur ncessite 3 bus: un bus de donnes, un bus d'adresse et un bus de
commande. Il existe des processeurs bass sur l'architecture CISC et dautres bass sur
larchitecture RISC. Cependant certains processeurs sont difficilement classifiables comme le
16
Jlassi Khaled
CPU i486 galement appel 80486. Ce vritable processeur 32 bits (bus internes et externes)
est mi chemin entre le tout CISC et le tout RISC. Ce processeur offre des performances
similaires aux processeurs RISC 32 bits, tout en restant compatible 100% avec son
prdcesseur CISC le 80386. Par contre le processeur 68040 de Motorola est bas sur
larchitecture CISC. Il est prsent par Motorola comme tant un processeur CISC pur et dur.
Les premiers concepteurs de processeurs rajoutaient le plus d'instructions possibles pour
permettre l'utilisateur de peaufiner ses programmes. Nanmoins, ces multiples instructions
ralentissent le fonctionnement du microprocesseur et sont peu utilises en pratique.
Actuellement, on utilise de plus en plus de processeurs RISC (Reduced Instruction Set
Computer). Le nombre d'instructions est rduit, mais excutes nettement plus rapidement.
Chaque instruction complexe peut tre programme par plusieurs instructions simples. Un
processeur est constitu de:
une unit de traitement (UAL - unit arithmtique et logique) qui excute les
instructions;
dun bus de donnes interne reliant lunit de commande lUAL et les registres.
Lorsque tous ces lments sont regroups sur une mme puce, on parle alors de
microprocesseur. La figure ci dessous donne une ide sur larchitecture interne dun
microprocesseur. Sur cette figure nous pouvons voir les 3 bus qui permettent au
microprocesseur de communiquer avec lextrieur.
Jlassi Khaled
18
Jlassi Khaled
10000010
carry : 1 =
01111110
FCH
carry :
1
82H
7EH
Sur cet exemple, nous pouvons remarquer que le rsultat sur 8 bits est faux (7EH).
Toutefois le bit de retenu expuls nest pas dfinitivement perdu. Ce bit C (carry) est
stock dans le registre dtat est peut tre test par lutilisateur. De la mme
manire lors d'une opration de dcalage ou de rotation ce bit peut tre positionn
en cas de dbordement. Par exemple, soit le dcalage gauche sur d'un bit de cet
octet : 10010110, aprs le dcalage nous avons 00101100. En ce qui concerne le
carry, il va tre positionn 1, puisque le bit expuls est gal 1.
19
Jlassi Khaled
Cet indicateur est mis 1, lorsqu'il y a un dpassement de capacit pour les oprations
arithmtiques en complment 2. Sur 8 bits, on peut coder de -128 (1000 0000) +127 (0111
1111).
104
+ 26
=130
0110 1000
+ 0001 1010
= 1000 0010 (-126)
- 18
- 118
-136
1110 1110
1000 1010
0111 1000 (120) avec C=1
Dans cet exemple et dans les deux cas de figure (opration droite ou opration gauche), le
bit O est positionn 1. L'indicateur de dbordement est une fonction logique (OU exclusif)
de la retenue (C) et du signe (S).
20
Jlassi Khaled
Jlassi Khaled
22
Jlassi Khaled
Sur cette figure le programme commence par sauvegarder le contenu de C dans la pile (PUSH
C). Pour cela (SP) est dcrment de deux ((SP)=31000H-2=30FFEH), puis on effectue
l'criture de (C) dans la mmoire l'adresse (SP) : (30FFEH) = 6142H. Pour PUSH A on
obtient : (30FFCH)=1234H, et pour PUSH B : (30FFAH)=2D5AH. Pour l'instruction POP
B, (SP) est charg dans le registre B (SP=30FFAH ; B=2D5AH) puis (SP) est incrment de
deux (SP= 30FFAH+2=30FFCH). Enfin, pour POP A on obtient : A=1234H et
(SP=30FFCH + 2 = 30FFEH).
III.1.3.2.3 Les registres d'index (index source SI et index destination DI).
Les registres d'index permettent de mmoriser une adresse particulire (par exemple
: dbut d'un tableau). Ces registres sont aussi utiliss pour adresser la mmoire de
manire diffrente. C'est le mode d'adressage index.
Exemple :
MOV A,[SI+10000H] place le contenu de la mmoire d'adresse 10000H + le contenu
de SI, dans le registre A.
23
Jlassi Khaled
24
Jlassi Khaled
25
Jlassi Khaled
Jlassi Khaled
La mmoire est compose de nombreuses cases mmoires. Chaque case est repre par une
adresse. Lorsque le microprocesseur veut, par exemple, lire une case, il doit indiquer quelle
adresse elle se trouve. Il met cette adresse sur le bus des adresses. La case mmoire reconnat
alors son adresse et met sur le bus de donnes son contenu.
Exemple : Bus dadresse 16 bits - donnes sur 8 bits.
27
Jlassi Khaled
Dans l'exemple prcdent, le microprocesseur crit la donne 10101111 dans la case mmoire
d'adresse 1011 1111 0110 1010.
Le bus dadresse est unidirectionnel : du microprocesseur vers les autres composants.
Il se compose de 16 32 fils, suivant les microprocesseurs, que l'on nomme A0, A1, ..., An-1.
Le tableau suivant donne lespace mmoire adressable en fonction du nombre des lignes
dadresses.
16 bits
adressage de 216
20 bits
adressage de 220
32 bits
adressage de 232
lorsque la cellule doit agir. De mme, lors d'une criture du microprocesseur vers la
28
Jlassi Khaled
V. Les Mmoires.
La mmoire vive, gnralement appele RAM (Random Access Memory, mmoire accs
alatoire), est la mmoire principale du systme, c'est--dire qu'il s'agit d'un espace
permettant de stocker de manire temporaire des donnes lors de l'excution d'un programme.
En effet le stockage de donnes dans la mmoire vive est temporaire, contrairement au
stockage de donnes sur une mmoire de masse telle que le disque dur, car elle permet
uniquement de stocker des donnes tant qu'elle est alimente lectriquement. Ainsi, chaque
fois que l'ordinateur est teint, toutes les donnes prsentes en mmoire sont
irrmdiablement effaces.
La mmoire morte, appele ROM pour Read Only Memory (mmoire lecture seulement) est
un type de mmoire permettant de conserver les informations qui y sont contenues mme
lorsque la mmoire n'est plus alimente lectriquement. A la base ce type de mmoire ne peut
tre accde qu'en lecture. Toutefois il est dsormais possible d'enregistrer des informations
dans certaines mmoires de type ROM.
V.1 Fonctionnement de la mmoire vive.
La mmoire vive est constitue de centaines de milliers de petits condensateurs emmagasinant
des charges. Lorsqu'il est charg, l'tat logique du condensateur est gal 1, dans le cas
contraire il est 0, ce qui signifie que chaque condensateur reprsente un bit de la mmoire.
Etant donn que les condensateurs se dchargent, il faut constamment les recharger (le terme
exact est rafrachir) un intervalle de temps rgulier appel cycle de rafrachissement (d'une
dure d'environ 15 nanosecondes (ns) pour une mmoire DRAM). Chaque condensateur est
coupl un transistor (de type MOS) permettant de "rcuprer" ou de modifier l'tat du
condensateur. Ces transistors sont rangs sous forme de tableau (matrice), c'est--dire que l'on
accde une "case mmoire" (aussi appele point mmoire) par une ligne et une colonne. Un
botier mmoire est donc constitu d'un ensemble d'entits mmoire lmentaires (cellules
mmoire) stockant un lment binaire (bit : Binary digIT) ayant pour valeur 0 ou 1. Ces
cellules sont groupes en mot (word) de p bits (en gnral p=1 ou 8 bits). Le nombre n de
29
Jlassi Khaled
30
Jlassi Khaled
relier leurs bus ensembles. Pour cela, il est ncessaire d'avoir adquation entre le nombre de
bits des bus de donnes et dadresse de la mmoire et du microprocesseur.
V.2 Slection dune case mmoire.
Sur la figure 2.10 apparat une broche de validation. Elle permet de slectionner un botier
mmoire parmi plusieurs, d'o son appellation : "chip select". Cette broche permet dviter les
conflits sur le bus de donnes. En effet dans le cas gnral, il existe plusieurs botiers
mmoire sur la carte, tous branchs sur le mme bus de donnes. Dans ce cas, il est ncessaire
de construire un signal qui permettra un seul botier d'accder au bus de donnes. Ce signal
Jlassi Khaled
les variables du bus dadresse (A0-An-1). Le choix des plages de validation des CSi
sont exclusives les unes par rapport aux autres. C'est dire qu'elles ne se recouvrent
pas.
Si CSi(A0-An-1) = 1 =>CSj(A0-An-1) = 0 quelque soit j i
Exemple:
Prenons l'exemple de la figure 2.13, si le bus dadresse se compose de 16 fils (A0A15). Supposons que la taille mmoire des deux botiers soit 32*1024 = 32K = 215
adresses.
Il y a donc 15 broches adresses sur chaque botier. Nous pourrons mettre les fils A0A14 du bus dadresse sur ces broches. On peut prendre CS1 = /A15 (complment de
A15)
et
32
Jlassi Khaled
Exemple :
Nous disposons d'un microprocesseur utilisant un bus de donnes de dimension 16 fils (D0D15) et pouvant adresser 1 Mo cases de mmoire (bus dadresse sur 20 fils A0-A19 :
220=1Mo). Nous disposons galement de botiers mmoire de 128 Ko octets chacun. De plus,
nous dsirons travailler sur des mots de 16 bits. Chaque botier mmoire a besoin de17 fils du
bus dadresse A1-A17 (217=128K) pour tre branchs sur ses broches dadresse. Il reste donc
A0, A18 et A19. On va se servir de A18 et A19 pour construire les quatre CS des 8 botiers
mmoire et de A0 pour slectionner partie basse ou haute du bus de donnes. La solution de
ce problme se trouve dans la figure (2.15), o nous utilisons un dcodeur d'adresse deux
entres de slection et quatre sorties (CSi). On a immdiatement l'expression des fonctions
logiques CS0, CS1, CS2, CS3. (CS0=/A19*/A18
CS1=/A19*A18
CS2=A19*/A18
CS3=A19*A18)
33
Jlassi Khaled
A0
Y3
Y2
Y1
Y0
34
Jlassi Khaled
35
Jlassi Khaled
I. Introduction.
Dans cette partie du cours, nous allons tudier la programmation en langage
assembleur d'un microprocesseur de la famille INTEL. L'tude complte d'un
processeur rel, comme le 80486 ou le Pentium fabriqus par Intel, dpasse
largement le cadre de ce cours : le nombre d'instructions et de registres est trs
lev. Nous allons ici nous limiter un sous-ensemble du microprocesseur 80486
(seuls les registres et les instructions les plus simples seront tudis). De cette faon,
nous pourrons tester sur un PC les programmes en langage machine que nous
crivons. La gamme de microprocesseurs 80x86 quipe les micro-ordinateurs de
type PC et compatibles. Les premiers modles de PC, commercialiss au dbut des
annes 1980, utilisaient le 8086, un microprocesseur 16 bits. Les modles suivants ont
utilis successivement le 80286, 80386, 80486 et Pentium (ou 80586). Chacun de ces
processeurs est plus puissant que les prcdents : augmentation de la frquence
d'horloge, de la largeur de bus (32 bits d'adresse et de donnes), introduction de
nouvelles instructions (par exemple calcul sur les rels) et ajout de registres. Chacun
d'entre eux est compatible avec les modles prcdents; un programme crit dans
le langage machine du 80286 peut s'excuter sans modification sur un 486. L'inverse
n'est pas vrai, puisque chaque gnration a ajout des instructions nouvelles. On
parle donc de compatibilit ascendante. Du fait de cette compatibilit, il est
possible de programmer le Pentium comme un processeur 16 bits. C'est ce que nous
ferons dans nos exemples par souci de simplification. Ainsi, nous n'utiliserons que des
registres de 16 bits.
II. Architecture interne du microprocesseur 8086.
Quoique, nous ayons dj parl de larchitecture de base dun microprocesseur, nous pensons
quil est utile den reparler. Nous allons nous intresser ici larchitecture interne du
microprocesseur 8086, sujet de cette tude, avant dentamer ltude des instructions de ce
mme microprocesseur. Du fait de la compatibilit, ascendante des microprocesseurs de
INTEL, il est possible de programmer le Pentium avec les instructions du 8086 que nous allons
tudier dans cette partie. Les registres du microprocesseur 8086 sont tous des registres 16 bits.
Ils sont rpartis en 5 catgories: registres de travail, registres de segment, registres pointeurs,
registres index et registres spciaux. Les registres de travail sont au nombre de 4 et sont nots
AX, BX, CX, DX. Chacun d'eux peut tre utilis comme un registre 16 bits ou dcompos en 2
registres 8 bits au gr du programmeur. Le registre AX peut tre dcompos en AH (H pour
2
Jlassi Khaled
High, les 8 bits de fort poids de AX) et AL (L pour Low, les 8 bits de faible poids de AX). De la
mme faon BX peut tre dcompos en BH et BL, CX en CH et CL, DX en DH et DL. Dans
beaucoup d'instructions, ces registres sont banaliss et peuvent tre utiliss indiffremment.
Toutefois, dans certaines instructions, ils ont un rle bien prcis: le registre AX est utilis
implicitement comme accumulateur (dans les instructions de multiplication), BX comme
registre de base (pour des donnes dans le segment point par le registre de segment ES), CX
comme compteur d'itrations (dans les instructions de boucle) et DX contient l'adresse du port
d'E/S dans les instructions d'E/S IN et OUT.
Les registres de segment sont aussi au nombre de 4 et sont nots CS, DS, SS et ES.
Pendant l'excution d'un programme, ils contiennent les numros des segments
accessibles. Le registre CS contient le numro du segment de code (Code Segment),
DS le numro du segment de donnes (Data Segment), SS le numro du segment de
pile (Stack Segment) et ES le numro du segment de donnes supplmentaire (Extra
Segment). L'utilisation de ces registres est implicite sauf indication explicite du
programmeur. Les registres pointeurs sont au nombre de 2 et nots SP et BP. Ils sont
ddis l'utilisation de la pile. Le registre SP (Stack Pointer) pointe sur le sommet de la
pile et il est mis jour automatiquement par les instructions d'empilement et de
dpilement; BP (Base Pointer) pointe la base de la rgion de la pile contenant les
donnes accessibles (variables locales, paramtres,...) l'intrieur d'une procdure. Il
doit tre mis jour par le programmeur. Les registres d'index sont au nombre de 2 et
sont nots SI et DI. Chacun de ces 2 registres peut tre utilis pour indexer les lments
d'un tableau. Dans les instructions de mouvement de chanes d'octets, ils sont utiliss
simultanment: SI pour indexer les caractres de la chane mettrice, d'o son nom
Source Index et DI pour les caractres de la chane rceptrice, d'o son nom
Destination Index. Les registres spciaux sont au nombre de 2 et nots IP (Instruction
Pointer) et SR (Status Register). IP joue le rle de compteur ordinal et contient le
dplacement dans le segment de code de la prochaine instruction excuter. Le
couple CS:IP donne donc l'adresse physique sur 20 bits. Le registre SR contient l'tat du
microprocesseur matrialis par les indicateurs (Flags): O pour Overflow, D pour
Direction, I pour Interrupt, T pour Trace, S pour Sign, Z pour Zero, A pour Auxiliary carry,
P pour Parity et C pour Carry.
O D I
3
C
Jlassi Khaled
(16 bits)
0000
Jlassi Khaled
- Instructions avec une seule oprande: INC, DEC, NEG, NOT ....;
- Instructions avec deux oprandes: CMP, ADD, MOV, LEA, XCHG, AND ......
Une oprande peut se trouver dans un registre du 8086, dans un octet, dans un mot
16 bits ou dans un double mot 32 bits.
Les oprations peuvent avoir lieu:
- entre un registre et un autre registre,
- entre un registre et un octet ou un mot en mmoire mais pas entre 2 octets ou 2
mots en mmoire (il faut passer dans ce cas par un registre). Toutefois les instructions
de mouvement de chanes d'octets effectuent "directement" le transfert de
mmoire mmoire (octet par octet ou mot par mot), l'adressage se faisant par les
registres DS:SI et ES:DI.
ADD CL, 25
; CL:= CL + 25
OR AH,11000000
MOV BX,Total
MOV DX,ES:Nom
Dans cet exemple Total est l'identificateur d'une variable 16 bits dans le segment de
donnes bas par DS. Le symbole Total sera remplac dans l'instruction par la valeur
Jlassi Khaled
MOV AX,[BX]
MOV AX,[BP]
MOV AX,Tab[SI]
Dans cet exemple SI contient l'index dans le tableau Tab de l'lment rfrenc.
Ladresse physique est gale := (DS)*16+ dplacement de Tab + (SI).
MOV AX,[BX][SI]
MOV AX,[BP][SI]
Dans cet exemple, dans la premire instruction, ladresse de la table est donne par
BX et l'index dans la table par SI :
Jlassi Khaled
MOV AX,Compte[BX][SI]
Dans la premire instruction, nous chargeons ladresse de Tableau dans BX, par
contre dans la deuxime instruction nous chargeons ladresse contenu dans Tableau
indx avec SI dans BX.
Jlassi Khaled
ADD Destination,Source
ADC Destination,Source
Exemple:
Jlassi Khaled
ADD AX,BX
;AX reoit AX + BX
ADD CX,250
ADD Cumul,AX
ADD AX,Tab[SI]
ADD AX,0F00H
ADC DX,0
SUB Destination,Source
SBB Destination,Source
SUB AX,DX
SBB SI,100
INC Oprande
DEC Oprande
Exemples:
Jlassi Khaled
INC AX
; AX:= AX + 1
DEC CX
; CX:= CX - 1
; Valeur:= Valeur - 1
MUL Oprande
IMUL Oprande
MUL CL
MUL CX
DIV Oprande
IDIV Oprande
Fonction:
- division d'oprandes 8 bits:
Jlassi Khaled
;DX:AX est divis par BX, le reste est dans DX et le quotient dans AX
DIV BL
;AX est divis par BL, le reste est dans AH, le quotient dans AL.
AND Destination,Source
OR Destination,Source
XOR Destination,Source
Destination = registre/case mmoire
Source = registre/valeur immdiate/case mmoire condition que
OR AL,1
AND AX,Masque
XOR AX,-1
;fait le complment 1 de AX
RCL Oprande,Nombre
RCR Oprande,Nombre
ROL Oprande,Nombre
ROR Oprande,Nombre
Jlassi Khaled
Si
par
exemple AL contient la valeur binaire 00110111; alors, aprs l'instruction: RCR AL,1
AL contiendra la valeur 10011011 si Carry=1 ou la valeur 00011011 si Carry=0.
CMP Destination,Source
TEST Destination,Source
Destination = registre / case mmoire
Source = registre / case mmoire / valeur
Exemples:
CMP AL,CL
; compare AL CL
CMP AL,0
; compare AL 0
TEST AL,AH
; ET logique entre AL et AH
Remarque: TEST laisse les oprandes du ET logique inchanges; les indicateurs sont
positionns en fonction du rsultat du ET logique.
12
Jlassi Khaled
Syntaxe:
SAL Oprande,Nombre
SAR Oprande,Nombre
SHL Oprande,Nombre
SHR Oprande,Nombre
13
Jlassi Khaled
Saut rapproch (NEAR jump): C'est un saut intra-segment: l'adresse de saut est
situe l'intrieur du segment de code, de 32768 octets en arrire 32767 octets en
avant (adresse de saut code sur 16 bits).
Saut loign (FAR jump): Un FAR jump est un saut inter-segment: l'adresse du saut se
situe n'importe o dans la mmoire accessible et pas forcment dans le segment de
code.
Saut direct: Dans le saut direct (ou absolu), l'adresse du saut est indique dans
l'instruction elle-mme.
Saut indirect: L'adresse de saut est dans un registre ou dans une case mmoire. Elle
ne sera effectivement connue qu'au moment de l'excution.
Saut
inconditionnel:
Une
instruction
de
saut
inconditionnel
transfrera
JMP Cas1
;saut direct
JMP [BX]
JS / JNS
JO / JNO
14
Jlassi Khaled
JP / JNP
JZ / JNZ
Jump if Equal
JNE
JG
Jump if Greater
JGE
JL
Jump if Less
JLE
Jump if Above
JAE
JB
Jump if Below
JBE
LOOP
etiquette
LOOPE
etiquette
LOOPNE
etiquette
Jlassi Khaled
Exemples 1:
_sommation proc near
MOV CX,100
Boucle:
ADD
MOV
AX,0
AX,CX
LOOP Boucle
_sommation endp
Jlassi Khaled
MOVSB
MOVSW
db 5 dup(?)
table_2
dw 4 dup(?)
initial_1 db 1,2,5,4,9
17
Jlassi Khaled
initial_2 dw 1000,1002,1005,1008
.code
programme proc near
MOV ax,@data
mov ds,ax
mov es,ax
mov cx,5
; 5 lment transferer
cld
rep movsb
mov
cx,4
rep movsw
mov
ax,4c00h
int
21h
programme endp
end
programme
Jlassi Khaled
Jlassi Khaled
laquelle
on
associe
une
tiquette
en
assembleur.
Calcul
Instruction A
Instruction C
Instruction B
Call
Calcul
Instruction D
RET
L'excution d'une procdure est dclenche par un programme appelant. Une procdure peut
elle-mme appeler une autre procdure, et ainsi de suite.
VI.1 Instructions CALL et RET.
L'appel
d'une
procdure
est
effectu
par
l'instruction
CALL.
CALL
adresse_debut_procedure
L'adresse peut tre sur 16 bits, la procdure est donc dans le mme segment d'instructions ou
sur 32 bits lors dun appel inter-segment (Far Call). La fin d'une procdure est marque par
l'instruction RET. Le processeur passe alors l'instruction place immdiatement aprs le
CALL. RET est aussi une instruction de branchement : le registre IP (pointeur dinstructions)
est modifi pour revenir la valeur qu'il avait avant l'appel par CALL. On peut avoir un
nombre quelconque d'appels imbriqus, comme sur la figure ci dessous. L'adresse de retour,
utilise par RET, est en fait sauvegarde sur la pile par l'instruction CALL. Lorsque le
20
Jlassi Khaled
processeur excute l'instruction RET, il dpile l'adresse sur la pile (comme POP), et la range
dans IP.
Et l'instruction RET :
- Dpiler une valeur et la ranger dans IP.
VI.2 Dclaration d'une procdure.
L'assembleur possde quelques directives facilitant la dclaration de procdures.
On dclare une procdure dans le segment d'instruction comme suit :
Calcul
PROC
near
; instructions
RET
; derniere instruction
Calcul
ENDP
; fin de la procedure
Le mot clef PROC commence la dfinition d'une procdure, near indiquant qu'il s'agit
d'une procdure situe dans le mme segment d'instructions que le programme
appelant. L'appel s'crit simplement :
CALL Calcul
21
Jlassi Khaled
En gnral, une procdure effectue un traitement sur des donnes (paramtres) qui
sont fournies par le programme appelant, et produit un rsultat qui est transmis ce
programme. Plusieurs stratgies peuvent tre employes :
1. Passage par registre : les valeurs des paramtres sont contenues dans des registres du
processeur. C'est une mthode simple, mais qui ne convient que si le nombre de paramtres
est petit (il y a peu de registres).
2. Passage par la pile : les valeurs des paramtres sont empiles. La procdure lit la pile.
VI.2.1 Passage de paramtres par registres.
Exemple avec passage par registre : On va crire une procdure ''SOMME'' qui calcule la
somme de 2 nombres naturels de 16 bits. Convenons que les entiers sont passs par les
registres AX et BX, et que le rsultat sera plac dans le registre AX. La procdure s'crit alors
trs simplement :
SOMME PROC near ; AX <- AX + BX
ADD AX, BX
RET
SOMME ENDP
22
Jlassi Khaled
Le sommet de la pile contient l'adresse de retour (ancienne valeur de IP empile par CALL).
Chaque lment de la pile occupe deux octets.
La procdure SOMME2 s'crit donc :
SOMME2 PROC near
MOV BP, SP
MOV AX, [BP+2]
; ajoute argument 2
RET
SOMME2 ENDP
La valeur de retour est laisse dans AX. La solution avec passage par la pile parait plus lourde
sur cet exemple simple. Cependant, elle est beaucoup plus souple dans le cas gnral que le
passage par registre. Il est trs facile par exemple d'ajouter deux paramtres supplmentaires
sur la pile. Une procdure bien crite modifie le moins de registres possible. En gnral,
l'accumulateur est utilis pour transmettre le rsultat et est donc modifi. Les autres registres
utiliss par la procdure seront normalement sauvegards sur la pile. Voici une autre version
de SOMME2 qui ne modifie pas la valeur contenue par BP avant l'appel :
23
Jlassi Khaled
PUSH BP
MOV BP, SP
; sauvegarde BP
; adresse sommet pile
; charge argument 1
; ajoute argument 2
POP BP
; restaure ancien BP
RET
SOMME2 ENDP
Noter que les index des arguments (BP+4 et BP+6) sont modifis car on a ajout une valeur
au sommet de la pile.
VI.3 Traduction en assembleur du langage C sur PC.
Nous nous intressons dans cette section la traduction en assembleur des programmes en
langage C sur PC (processeurs de la famille 80x86 que nous avons un tudi auparavant). Le
dtail de cette traduction (ou compilation) dpend bien entendu du compilateur utilis et du
systme d'exploitation (DOS, Windows, UNIX,...). Il dpend aussi de divers rglages
modifiables par le programmeur : taille du type int (16 ou 32 bits), modle de mmoire utilis
(pointeurs sur 16 ou 32 bits, donnes et code dans des segments diffrents ou non, etc.).
Nous n'aborderons pas ces problmes dans ce cours (voir la documentation dtaille du
compilateur utilis si besoin), mais nous tudierons quelques exemples de programmes C et
leurs traductions. Le compilateur utilis est Turbo C++ version 3 (en mode ANSI C) sous
DOS, avec des entiers de 16 bits et le modle de mmoire ''small''. Normalement, ce
compilateur gnre directement du code objet (fichier .OBJ) partir d'un fichier source en
langage C (fichier .C ou .CPP). Il est cependant possible de demander l'arrt de la compilation
pour obtenir du langage assembleur (fichier .ASM). Pour cela, utiliser sous DOS la
commande :
C:\tc\bin\> tcc S exemple.c
Un fichier exemple.c
suivant :
void main(void) {
24
Jlassi Khaled
char X = 11;
char C = 'A';
int Res;
if (X < 0)
Res = -1;
else
Res = 1;
}
Trois variables, X, C et Res sont dfinies avec ou sans valeur initiale. Ensuite, on teste le
signe de X et range 1 ou -1 dans la variable Res.
Le programme suivant montre la traduction en assembleur effectue par Turbo C.
_TEXT SEGMENT byte public 'CODE'
;
;
void main(void) {
;
ASSUME
cs:_TEXT
_main PROC
PUSH
bp
MOV
SUB
near
bp,sp
sp, 4
;
;
char X = 11;
;
MOV
;
;
char C = 'A';
;
MOV
;
;
int Res;
25
Jlassi Khaled
if (X < 0)
;
CMP
JGE
@1@86
;
;
Res = -1;
;
MOV
JMP
@1@114
@1@86:
;
;
else
Res = 1;
;
MOV
@1@114:
;
; }
;
MOV
sp,bp
POP
bp
RET
_main ENDP
_TEXT ENDS
END
26
Jlassi Khaled
Noter l'utilisation de byte ptr pour indiquer que BP contient ici l'adresse d'une donne de taille
octet. Le test if (X <0) est traduit par une instruction CMP suivie d'un branchement
conditionnel, utilisant une tiquette place par le compilateur (d'o son nom trange :
@1@114). Chaque langage de programmation doit dfinir une convention de passage des
paramtres lors des appels de procdures ou de fonctions. Cette convention permet de prvoir
l'tat de la pile avant, pendant et aprs un appel de fonction (dans quel ordre sont empils les
paramtres ? Qui est responsable de leur dpilement ? Comment est passe la valeur de
retour ?). Etudions partir d'un exemple simple comment sont passs les paramtres lors des
appels de fonctions en langage C.
/* Programme EXEMPLE_2.C */
int ma_fonction( int x, int y ) {
return x + y;
}
void main(void) {
int X = 11;
int Y = 22;
int Res;
Res = ma_fonction(X, Y);
}
27
Jlassi Khaled
;
; return x + y;
;
MOV ax, [bp+4]
ADD ax, [bp+6]
; }
POP bp
RET
_ma_fonction ENDP
;
; void main(void) {
;
ASSUME cs:_TEXT
_main PROC near
PUSH bp
MOV bp,sp
SUB sp,6
; int X = 11;
MOV [bp-2], 11
; int Y = 22;
MOV [bp-4], 22
;
; int Res;
; Res = ma_fonction(X, Y);
PUSH word ptr [bp-4]
PUSH word ptr [bp-2]
CALL _ma_fonction
ADD sp, 4
MOV [bp-6],ax
;}
MOV sp,bp
POP bp
RET
_main ENDP
_TEXT ENDS
Le respect des conventions d'appel de procdures est bien entendu trs important si l'on dsire
mlanger des fonctions C et des procdures en assembleur.
28
Jlassi Khaled
de
la
mme
faon.
La
diffrence
vient
surtout
de
la
source
29
Jlassi Khaled
Les interruptions matrielles sont gnres par les priphriques : souris, clavier,
disque, horloge temps rel, etc. la diffrence des interruptions logicielles, elles
peuvent tre autorises ou interdites au moyen de lindicateur IF du registre dtat
EFLAGS . Comme le Pentium na que deux entres dinterruption matrielle, NMI et
INTR, on doit lui adjoindre un contrleur dinterruption programmable afin de pouvoir
disposer de plusieurs sources dinterruption avec une gestion de priorit. Cest le PIC
(Programmable Interrupt Controler 8259A).
Jlassi Khaled
des priphriques
31
Jlassi Khaled
Larchitecture est partiellement fige dans le cas des PC (historique par rapport au 286). Le
PIC matre va vers le processeur et le PIC esclave sur la broche 2 du matre.
Jlassi Khaled
actuellement. Souvent les interruptions 14 et 15 sont utilises par le contrleur de disque dur
(une par port IDE). L'interruption 12 est utilise par la souris PS2. Le port USB utilise
galement par dfaut cette interruption 12. Nanmoins, le port USB passe en 11 si une souris
PS2 est connecte. Ces interruptions peuvent tre vrifies par les outils fournis par les
systmes d'exploitation et pour certaines, elles sont affiches lors du dmarrage de la majorit
des PC. La vrification dans les PC sous DOS passe par le programme MSD.exe situ en
c:\DOS. Dans le cas de Windows cet utilitaire est situ dans le panneau de configuration. Il
permet les mmes vrifications, mais de manire plus tendues. Depuis Win98, un nouvel
utilitaire, Outils systmes Microsoft, situ dans le dossier Outils Systme du menu Dmarrer
permet une meilleure connaissance sur le systme en cour. En regardant ce tableau, si un PC
manque d'interruptions libre, il est possible d'en rcuprer en supprimant des ports de
communication. Si vous n'utilisez pas de ports srie (uniquement USB), vous pouvez rendre
inactif COM 1 et Com 2 (disabled) et rcuprer les interruptions 3 et 4. Idem pour le port
parallle. Si vous utilisez 2 ports parallles, vous pouvez mettre l'interruption de LPT2 en 5
(selon la norme) ou en 7. Si vous utilisez des disques SCSI, pourquoi pas rendre inactif les
ports IDE 1 et IDE2 dans le BIOS (rcupration des INT 14 et 15), ... Comme les systmes
Fonction
IRQ
Adresse
Commentaires
Horloge systme
Clavier
Ne peut-tre modifi
Com 2
Com 4
Com 1
2F8-2FF
2E8 - 2EF
4
Com 3
3F8-3FF
3E8-3EF
Libre
LPT 1
LPT 2
33
378 37A
7
(pour les
produits de
Jlassi Khaled
marque)
278 27A
Horloge: date et heure
Pas modifiable
10 (A)
Libre
11 (B)
Libre
12 (C)
Libre
14 (E)
15 (F)
Jlassi Khaled
Ainsi, si une application de niveau 3 veut excuter int 47, il faut que le descripteur IDT(47)
ait DPL=3. Dans un systme d'exploitation tel que Windows NT, la IDT se trouve en
mmoire protge, de sorte qu'il nest pas possible d'aller crire un descripteur directement
dans la IDT. Windows NT ne supporte pas non plus les INT 0x21 de MS-DOS. Toutefois, Il
est possible de les essayer en crivant un programme assembleur et en l'excutant dans la
fentre Invite de commande (DOS prompt). En particulier, si nous dsirons implanter notre
propre sous-programme de traitement d'interruption logicielle, l'appel systme int 21h (33)
fonction 25h permet de le faire facilement.
VII.3 Les interruptions logicielles.
Comme nous lavions crit plus haut, les interruptions logicielles, sont aussi appeles
trappes ou droutements. Elles incluent aussi les fautes et les arrts. Une faute se
produit quand le processeur dtecte une erreur durant le traitement d'une
instruction. Par exemple, division par 0, opcode invalide, etc. En mode rel (Mode
8086), quand le processeur rencontre une instruction telle que int immed8 (immed8 :
constante sur un octet), il va lire la table des vecteurs d'interruption IVT (Interrupt
Vector Table). Cette table de 1 Ko est situe l'adresse 0000:0000. Chaque entre
de la table contient le numro de segment de 16 bits et l'offset de 16 bits pour
l'adresse d'un sous- programme de traitement d'interruption (Interrupt Service
Routine ou ISR). Immed8 est utilis comme indice dans cette table (on doit le
multiplier par 4 pour avoir l'adresse physique correspondante). De plus, le registre
dtat FLAGS et les registres de segment CS et dinstructions IP sont empils dans
cet ordre exact, puis les indicateurs TF et IF sont mis 0. Le sous-programme
d'interruption devra se terminer par l'instruction IRET, pour dpiler correctement ces
paramtres. L'excution se poursuit ensuite l'adresse contenue dans la table. Par
exemple, int 8 ira lire le vecteur situ l'adresse 32 (0x20) et branchera l'adresse
qui y est contenue. A cette adresse doit dbuter un sous-programme de traitement
d'interruption. Certaines ISR font partie du systme d'exploitation et sont dj
dfinies, comme celles qui correspondent aux INT 0x21 de MS-DOS. Cette trappe y
sert de mcanisme d'appel au systme d'exploitation. Si vous voulez dfinir votre
propre sous-programme de traitement d'interruption, il suffit d'aller crire son adresse
l'endroit appropri dans la table des vecteurs d'interruption avant de l'utiliser.
35
Jlassi Khaled
mov ah,09
mov dx, offset string
int 33
mov ah, 0
int 26
Jlassi Khaled
counter dw 182
newint8 proc
dec cs:counter
; dcrmenter compteur
jnz done
mov cs:counter,182
; rinitialiser compteur
; mettre un bip
mov al, 7
int 10h
done: jmp cs:oldint8
newint8 endp
; la partie suivante ne sera excute qu'une fois, lors de l'installation
install proc near
mov ah, 35h
; IP va dans BX et CS dans ES
int 21 h
mov word ptr oldint8, bx
37
Jlassi Khaled
; interruption 8
int 21h
; arrondir multiple de 16
shr dx, 4
; division par 16
mov ah,31h
; rendre rsident
int 21 h
install endp
start ends
end main
38
Jlassi Khaled
39
Jlassi Khaled
MOV DS,AX
MOV AH,09H
MOV DX,OFFSET LIGNE
INT 21H
MOV AX,4C00H
INT 21H
END
MASM ou TASM
Ces deux compilateurs assembleurs sont compatibles entre eux. Chacun d'entre eux
a ses avantages et ses inconvnients, ils ont le mme prix et les mmes
performances. Le choix n'est donc pas vident. Toutefois si nous avons lintention
d'inclure des modules en assembleur dans des programmes crits en langage
volu, il est prfrable de prendre un assembleur de mme origine que le langage
volu. Si vous travaillez dj avec un langage de Borland (par ex: Turbo-Pascal ou
Turbo C/C++), TASM sera le meilleur choix. Si par contre, vous programmez en Fortran
ou en VB ou VC, il vaut mieux acheter MASM de Microsoft. MASM possde une
interface trs perfectionne avec les langages volus, ce qui facilite l'inclusion de
modules en assembleur. Par ailleurs, MASM 6.0 est compatible avec OS/2. Si vous
optez un jour pour ce systme, vous n'avez pas besoin de vous procurer une mise
jour de l'assembleur. TASM est rput pour sa vitesse de traduction. Quiconque
possde dj un langage Borland se sent immdiatement son aise. Vous pouvez
maintenant faire votre choix librement en toute connaissance de cause. Dans nos
exemples nous nous servirons essentiellement du macro assembleur MASM de
Microsoft. Il s'agit en effet de l'assembleur le plus rpandu. Tous les autres sont
gnralement compatibles avec lui.
VIII.1 Les Directives de compilation.
Initialement, les directives taient prvues pour simplifier la vie du programmeur, au
fur et mesure des versions successives des assembleurs, leur nombre s'est tellement
accru que l'effet inverse commence tre perceptible, mme en admettant que
chacune d'elles a son utilit, on peut lgitimement craindre d'tre quelque peu
submerg par la varit des possibilits offertes: La simple numration des directives
40
Jlassi Khaled
41
Jlassi Khaled
Jlassi Khaled
pour stocker des donnes non initialises accessibles par des adresses de type long
(segment:offset). Normalement ce segment ne se justifie que si le module en
assembleur doit tre inclus par la suite dans un programme de haut niveau. Dans ce
cas, il sera rempli par des dclarations du genre DB (?) ou DUP (?). Les segments que
nous venons de passer en revue sont rarement mis en service. La plupart des
programmes de haut niveau peuvent tre complts par des modules exploitant
uniquement les ressources des segments .CODE et .DATA. Nous donnons par la suite
quelques exemples de dclaration de variables utilisant les segment .DATA et
.DATA ?
-Dclaration de variables initialises
.DATA
octet db -2
octets db 8 dup(0)
chaine db "Bonjour",0
mot dw 7FFFh
doubleMots dd 2 dup(0FFFFFFFFh)
nombre_reel real4
1.0
.DATA ?
Mot dw ?
; mot de 16 bits
Octets db 8 dup(?)
; tableau de 8 octets
LENGTH equ 20
dix equ 10
Les structures de dcision des langages de haut niveau que nous pouvons utiliser sont les
suivants :
43
Jlassi Khaled
.IF condition1
instructions
[[.ELSEIF condition2
instructions]]
[[.ELSE
instructions]]
.ENDIF
Exemple:
.IF cx == 20
mov dx, 20
.ELSE
mov dx, 30
.ENDIF
.BREAK
Exemple :
.DATA
buf1 BYTE "This is a string",'$'
44
Jlassi Khaled
; mise zero de bx
mov buf2[bx], al
inc bx
; incrementation de bx
; Lire un caractre
.ENDW
push bp
mov bp, sp
push di
push si
mov
si,arg1
mov
di,arg2
mov
ax,arg3
add
ax,di
add
ax,si
pop si
pop di
mov sp, bp
pop bp
ret 6
;sauvegarde de BP
;faire pointer BP sur SP
;sauvegarde de di
;sauvegarde de si
;rcupration de si
;rcupration de di
;remettre sp sa valeur initiale
;rcupration de bp
;nettoyage de la pile (6 parce quil ya trois paramtres passs
; la procdure
addition endp
45
Jlassi Khaled
INVOKE addition, 1, 2, 3
Exemple:
.MODEL small, c
; Model mmoire ainsi que conventions dappel c
.
printf PROTO NEAR,
; prototype de la fonction printf (VARAG: arguments variables)
pstring:NEAR PTR BYTE, num1:WORD, num2:VARARG.DATA
format BYTE '%i %i', 13, 0
; chane de caractres afficher par printf
.CODE
_main PROC PUBLIC
; Procdure assembleur qui fait appel printf
.
INVOKE printf, OFFSET format, ax, bx
.
.
.
_main endp
END _main
; Fin de la procdure
Dans le dernier exemple nous donnons un programme complet, avec les explications
ncessaires, qui illustre bien linterfaage entre le langage C et lassembleur. En effet, il est
intressant parfois dinclure des procdures C dans un programme assembleur. Ceci a pour
but doptimiser le temps de programmation. Nous pouvons alors concentrer notre effort de
programmation en assembleur sur les procdures fortes contraintes temporelles (temps
dexcution le plus rapide). Il est tout fait possible dinclure nimporte quelle procdure C
dans un programme en assembleur condition de spcifier au moment de ldition des liens
46
Jlassi Khaled
extrn LECTURE:far
assume cs:code
assume ds:donnees
assume ss:pile
mov ax,donnees
mov ds,ax
push ds
pop es
mov bx,offset format
47
Jlassi Khaled
mov cx,10
boucle:
LECTURE
call LECTURE
push ax
call affichage
pop cx
loop boucle
mov ah,4ch
;revenir au SE
int 21h
_main endp
code ends
end _main
Le programme C des procdures char pascal LECTURE(void), void pascal AFFICHAGE (char x) est le
suivant prog_c.c :
char pascal LECTURE(void)
{
char x;
x=getch();
return(x);
}
void pascal AFFICHAGE (char x)
{
putchar(x);
printf("%c",x);
}
48
Jlassi Khaled
c:\masm\bin\>prog
49
Jlassi Khaled
I. Introduction.
Comme nous lavions dis prcdemment, un microcontrleur est un composant
runissant sur un seul et mme silicium un microprocesseur, divers dispositifs
d'entres/sorties et de contrle d'interruptions ainsi que de la mmoire, notamment
pour stocker le programme dapplication. Il intgre galement un certain nombre
de priphriques spcifiques des domaines cibls (bus srie, interface parallle,
convertisseur analogique numrique, ...). Les microcontrleurs amliorent donc
l'intgration et le cot (li la conception et la ralisation) d'un systme base de
microprocesseur en rassemblant les lments essentiels dun tel systme dans un seul
circuit intgr. On parle alors de "systme sur une puce" (en anglais : "System On
chip"). Il existe plusieurs familles de microcontrleurs, se diffrenciant par la vitesse de
leur processeur et par le nombre de priphriques qui les composent. Toutes ces
familles ont un point commun cest de runir tous les lments essentiels dune
structure base de microprocesseur sur une mme puce. Voici gnralement ce
que lon trouve lintrieur dun microcontrleur:
) Un processeur (C.P.U.),
) Des bus,
) De la mmoire de donne (RAM et EEPROM),
) De la mmoire programme (ROM, OTPROM, UVPROM ou EEPROM),
) Des interfaces parallles pour la connexion des entres / sorties,
) Des interfaces sries (synchrone ou asynchrone) pour le dialogue avec dautres
units,
) Des timers pour gnrer ou mesurer des signaux avec une grande prcision
temporelle.
Le microcontrleur apparat donc comme un systme extrmement complet et
performant, capable d'accomplir une ou plusieurs tches trs spcifiques, pour
lesquelles il a t programm. Ces tches peuvent tre trs diverses, si bien qu'on
trouve aujourd'hui des microcontrleurs presque partout: dans les appareils
lectromnagers
2
(rfrigrateurs,
fours
micro-ondes...),
les
tlviseurs
et
Jlassi Khaled
de
fonctions
analogiques
par
des
traitements
numriques.
Actuellement, une version 16 bits, voire 32 bits, a un cot comparable un 8 bits. Les
modles 8 bits ont encore leur lot d'applications mais, trop souvent pousss leur
limite sans oublier l'espace mmoire qui reste inexorablement plafonn 64 Ko.
II. Le processeur.
II.1 Structure classique.
Il est clair que la puissance dun microcontrleur est directement lie au processeur
quil intgre. Ce processeur est surtout caractris par la famille laquelle il
appartient (CISC, RISC, VLIW, DSP). Il est constitu par un certain nombre dlments
similaires ce que lon trouve dans un microprocesseur. Voici ce quon trouve
lintrieur :
- Une Unit Arithmtique et Logique (UAL, en anglais Aritmetic and Logical Unit ALU), qui prend en charge les calculs arithmtiques lmentaires et les tests.
- Une Unit de Contrle.
- Des registres, qui sont des mmoires de petite taille (quelques octets), suffisamment
rapides pour que l'UAL puisse manipuler leur contenu chaque cycle de lhorloge.
Un certains nombre de registres sont communs la plupart des processeurs :
3
Jlassi Khaled
Compteur
dinstructions :
Ce
registre
contient
ladresse
mmoire
de
Jlassi Khaled
- Une unit de prdiction de saut, qui permet au processeur danticiper un saut dans
le droulement dun programme, permettant dviter dattendre la valeur dfinitive
dadresse du saut. Cela permet de mieux remplir le pipeline.
- Une unit de calcul en virgule flottante (en anglais Floating Point Unit - FPU), qui
permet dacclrer les calculs sur des nombres rels cods en virgule flottante.
- La mmoire cache, qui permet dacclrer les traitements, en diminuant les accs
la RAM. Ces mmoires tampons sont en effet beaucoup plus rapides que la RAM
et ralentissent moins le CPU. Le cache instructions reoit les prochaines instructions
excuter, le cache donnes manipule les donnes. Parfois, un seul cache unifi est
utilis pour le code et les donnes. Plusieurs niveaux de caches peuvent coexister,
on les dsigne souvent sous les noms de L1, L2 ou L3. Dans les microprocesseurs
volus, des units spciales du processeur sont dvolues la recherche, par des
moyens statistiques et/ou prdictifs, des prochains accs en mmoire centrale.
II.3 Jeu dinstructions.
Jlassi Khaled
Signalons que, dans certains microcontrleurs, les priphriques sont considrs simplement
comme des cases mmoire, et grs par les instructions de transfert (E/S intgres mmoire).
D'autres microcontrleurs disposent d'instructions spcifiques pour les E/S (E/S
indpendantes).
II.3.5 Instructions de saut et de branchement.
Il s'agit d'instructions qui altrent le droulement normal du programme. On distingue les
sauts et les branchements.
Jlassi Khaled
Jlassi Khaled
priphriques intgrs. On appelle modes d'adressage les diffrentes faons de spcifier les
endroits o se trouvent les donnes dont on a besoin.
II.4.1 Adressage implicite.
Certaines oprations ne peuvent tre ralises que sur une donne se trouvant en un endroit
bien prcis du processeur (par exemple, l'accumulateur ou la pile). Dans ce cas, il n'est pas
ncessaire de spcifier l'adresse du registre en question et on parle d'adressage implicite.
II.4.2 Adressage registre ou inhrent.
Le processeur dispose d'un certain nombre de registres de travail. De nombreuses instructions
y font rfrence ; vu leur nombre peu lev (8, par exemple), il suffit d'un petit nombre de bits
pour spcifier le registre dsir (3 bits dans notre cas). On parle dans ce cas d'adressage
registre ou inhrent.
II.4.3 Adressage direct.
Dans ce mode d'adressage, on donne l'adresse (gnralement en 16 bits) de la donne en
mmoire (RAM, ou port d'E/S s'il est intgr la mmoire). Ce mode d'adressage permet
d'indiquer n'importe quel endroit dans la mmoire, linconvnient tant que l'on doit spcifier
l'adresse concerne dans son intgralit (2 4 octets). Ce qui conduit des instructions assez
longues. Certains processeurs implmentent aussi, pour rduire l'encombrement du
programme, l'adressage direct restreint : l'adresse ne comporte qu'un octet, et ce mode ne
permet d'accder qu'aux donnes se trouvant sur la page courante. Un registre de slection de
page est gnralement utilis pour spcifier la page mmoire en cours.
II.4.4 Adressage indirect registre.
Dans ce mode d'adressage, l'adresse de la donne se trouve dans un registre spcial du
processeur (du mme nombre de bits que son bus d'adresses), le pointeur de donnes.
L'avantage, par rapport l'adressage direct, est que l'adresse peut tre manipule
commodment, par exemple pour accder une suite de donnes conscutives en mmoire.
Ceci est particulirement utile lorsqu'on manipule des donnes stockes dans un tableau.
II.4.5 Adressage immdiat.
C'est un peu un abus de langage que de parler d'adressage dans ce cas-ci. En effet, la donne
suit tout simplement l'instruction.
II.4.6 Adressage index.
Ce mode est assez semblable l'adressage indirect registre. Il fait appel un registre spcial
appel registre d'index. Certains microprocesseurs ou microcontrleurs ne supportent pas ce
mode, d'autres au contraire ont 1 ou mme 2 registres d'index. Deux registres d'index sont
8
Jlassi Khaled
du
"bon"
circuit
adapt
pour
cette
application.
Le
choix
du
le C167 de Siemens/Infineon
la famille Hitachi H8
Jlassi Khaled
le Motorola 68HC11
Il est bien vident que, dans le cadre de ce cours dont le nombre de pages doit
forcment rester limit, il ne va pas tre possible de donner toutes les informations,
matrielles et logicielles, relatives tous ces microcontrleurs. Le manuel technique
de chacun d'entre eux comporte en effet plusieurs dizaines de pages, voir parfois
une centaine. Nous allons nous intresser dans le cadre de ce cours la famille Intel
C51. Cette famille, qui ne cesse de sagrandir, est bas sur l'architecture 8051 qui est
intemporelle et continuera d'voluer, car de nombreux concepteurs ne souhaitent
pas renoncer l'investissement ralis dans les progiciels, les outils et l'expertise
acquise avec le 8051. Il est vrai que l'utilisation du langage C, d'interfaces utilisateur
plus conviviales mais plus lourdes, de jeux de caractres multiples, de vitesses de
transmission acclres et l'enregistrement des donnes de masse ncessitent des
densits de mmoires beaucoup plus importantes que celle propose avec la
majorit des microcontrleurs de cette famille. Toutefois si nous prenons le cas de la
famille
PSD3200
bas
sur
larchitecture
8051,
elle
possde
deux
bancs
Jlassi Khaled
exemple de la famille
de
base,
qui
incorpore
un
certain
nombre
de
fonctions
D'autres
amliorations
comme
le
fonctionnement
statique,
une
Jlassi Khaled
Dans un premier temps nous allons examiner la version de base savoir le 80C51BH, puis par
la suite nous allons nous intresser au microcontrleur 80C552. Ce microcontrleur de
PHILIPS, base sur larchitecture 8051, dispose dune RAM interne plus grande, de ports
d'E/S plus nombreux, de convertisseurs A/N, de C/T supplmentaires (9 au total), dune
interface I2C matre esclave.
V. Le microcontrleur 80C51
Les performances du 8051 compares celles de microprocesseurs 16 bits classiques
permettent d'avoir une ide des possibilits du
Jlassi Khaled
performante.
Dans
cette
architecture,
la
mmoire
de
donnes
est
13
Jlassi Khaled
Tous les microcontrleurs de la famille 8051 sont caractriss par la particularit de pouvoir
adresser d'une faon spare un espace mmoire de programme et un espace mmoire de
donnes. La mmoire de donnes comporte en fait deux zones d'une part les 128 (ou 256)
octets internes au microcontrleur et d'autre part la RAM externe. L'organisation des 128
octets internes est donne par la figure suivante (Annexe N1) :
14
Jlassi Khaled
15
Jlassi Khaled
V.1
alors
doter
certaines
broches
correspondantes
des
lignes
16
Jlassi Khaled
Jlassi Khaled
assure par un 'ET' logique entre les signaux PSEN et RD. La sortie de ce port logique
est affecte OE. En effet la sortie PSEN (Program Store Enable ) passe ltat
logique 0 ds que le microcontrleur entreprend la rcupration dune instruction
de la mmoire programme externe. Il faut noter que lors dun accs la mmoire
externe de donnes, cette sortie reste ltat 1. Dans ce qui suit nous prsentons la
chronologie de ces signaux lors de la rcupration d'une donne et d'un code
depuis la mmoire externe.
Sur la figure suivante nous prsentons la chronologie de ces signaux lors de l'criture
d'une donne dans la mmoire externe.
18
Jlassi Khaled
19
Jlassi Khaled
Jlassi Khaled
Comme nous lavions dj vu au paragraphe II., Les parties essentielles dun processeur sont :
LUnit Arithmtique et Logique, L'Unit de Contrle, le Compteur dinstructions,
lAccumulateur, le Registre dadresses, le Registre dinstructions , le Registre dtat, le
Pointeurs de pile, les Registres gnraux, le squenceur et lhorloge. Le processeur C51
comme la majorit des processeurs intgre tous ces lments sur une mme puce. Il est charg
bien videmment dexcuter toutes les instructions du programme dapplication. Cette
excution se rsume par trois tapes : traitement de donnes, Gestion des adresses et
traitement des instructions.
V.4.1 traitement des donnes.
Cette tape implique 3 registres et une unit arithmtique et logique (UAL). Les donnes
manipules par le 8051 sont soit des octets ou tout au plus des mots (16 bits). La majorit des
oprations effectues sur ces donnes utilise implicitement laccumulateur comme registre de
destination. Le principe de fonctionnement est le suivant: les registres de 8 bits TMP1 et
TMP2 (registres usage gnrale) prsentent l'UAL la ou les donnes traiter. Aprs
traitement, le rsultat est plac dans l'accumulateur (Acc). Ce rsultat peut tre alors envoy
dans une mmoire (RAM ou registre de travail) ou vers un port de sortie.
L'UAL comporte les circuits suivants :
21
Jlassi Khaled
Le 8051 comporte donc trs naturellement trois registres consacrs la gestion des adresses.
- Le pointeur de programme, aussi appel compteur de programme (PC, Program
Counter), est un registre de 16 bits qui contient tout moment l'adresse de la
prochaine instruction excuter. Il est mis 0 au moment de la mise sous tension du
22
Jlassi Khaled
Jlassi Khaled
V.5.1.Instructions de transfert.
Les adresses de source et de destination peuvent tre l'Acc, un registre de travail, une case de
RAM interne ou externe, un port d'E/S ;
a) Transferts en RAM interne:
La structure des instructions est : MOV destination, source copie l'octet de l'adresse source
l'adresse de destination
MOV A,R7
MOV 70h,A
MOV A, @R1 ;copie le contenu de la case dont l'adresse est en R1 dans l'Acc
MOV 20h, 71h
24
Jlassi Khaled
dans l'Acc
MOVX @DPTR, A
le DPTR
Exemples :
ADD A, R5
ADD A,#17h
SUBB A,R2
MUL AB
DIV AB
25
Jlassi Khaled
INC R0
; met l'Acc 0
CPL A
ANL A, 35h
; ralise une fonction ET entre les bits de l'Acc et ceux de la case 35h
V.5.4.Instructions boolennes.
Il s'agit ici d'une innovation par rapport aux microprocesseurs, qui traitent toujours les
donnes par octets. Le 8051 contient un processeur complet agissant sur des donnes d'1 bit,
aussi appeles variables boolennes. C'est le Carry qui joue le rle d'Acc pour ces oprations.
Le RAM interne du 8051 contient 128 cases pouvant tre adresses individuellement. Un
certain nombre de bits des SFR sont aussi adressables individuellement, en particulier les bits
correspondant aux ports de sortie.
Exemples :
SETB 38h
CLR C
;met 0 le Carry
ORL C,20h
MOV C,45h
V.5.5.Instructions de branchement.
Rappelons que les instructions de branchement permettent de rompre la squence normale
d'excution d'un programme. On distingue :
26
Jlassi Khaled
- les sauts : on saute d'un endroit du programme un autre, sans espoir de retour ;
- les sous-routines ou sous-programmes : on part excuter un sous-programme, puis
on revient l'endroit d'o l'on tait parti (l'adresse de retour est sauvegarde dans la
pile).
Exemples :
LJMP addr16
LCALL addr16
JZ F8h
CJNE A,#20h,F8h
27
Jlassi Khaled
Pour utiliser une ligne en ligne de sortie, on crit le bit dsir dans la bascule D. La sortie Q/
(inverse de Q) pilote la grille d'un mosfet enrichissement. Si Q est 0, Q/ est 1, le mosfet
conduit et la ligne de sortie est tire 0. Si Q est 1, Q/ est 0, le mosfet est bloqu et la
ligne de sortie est tire vers Vcc par la rsistance de rappel (pull-up). Pour utiliser la ligne en
ligne d'entre, il faut crire un 1 dans la bascule D (c'est d'ailleurs l'tat par dfaut la mise
sous tension). Le circuit extrieur peut tirer la ligne 0; l'tat de la ligne apparat sur le bus de
donnes interne lorsqu'on fait une lecture du port. Lorsque l'on utilise des botiers de mmoire
externe, le nombre de ports d'E/S disponibles est rduit 2, en effet, les lignes de ports sont
utilises dans cette configuration comme bus d'adresses et de donnes multiplexs;
Les ports sont grs comme des registres 8 bits, en crivant ou lisant l'tat de toutes
les lignes d'un port simultanment par les instructions de transfert, ou comme
ensemble de bascules grant chacune 1 bit, grce aux instructions boolennes.
Signalons encore que certaines lignes du port 3 ont une double fonction puisqu'elles
peuvent tre utilises comme lignes de demande d'interruption ( V.6), comme
entres des compteurs ( V.7), comme entre et sortie du port srie ( V.8) et
comme lignes Read (lecture) et Write (criture) du bus de commande lorsqu'on fait
appel la RAM externe.
28
Jlassi Khaled
Le 8051 peut tre configur afin que lorsque l'un de ces vnements arrive, le programme
principal soit temporairement interrompu et le contrle soit pass une section spciale du
code qui effectue une fonction ddicace l'vnement. Une fois cette routine effectue, le
contrle est rendu au programme principal.
Il existe plusieurs types dinterruption. Chaque type est ddi un vnement bien prcis est
caractris par une adresse propre dans la zone mmoire programmes. Nous donnons dans le
tableau suivant les diffrentes adresses des 5 sources dinterruptions que comprend le 80C51.
Interruption
Flag
Adresse
Externe 0
IE0
0003h
Timer 0
TF0
000Bh
Externe 1
IE1
0013h
Timer 1
TF1
001Bh
Port Srie
RI/TI
0023h
Jlassi Khaled
signaler au 8051 quelles interruptions doivent tre actives. Le programme dapplication doit
activer ou dsactiver les interruptions en modifiant le registre IE (A8h). Ce registre IE est
compos des bits suivants :
Bit
Nom
EA
AFh
AEh
Indfini
ADh
Indfini
ES
ACh
ET1
ABh
EX1
AAh
ET0
A9h
EX0
A8h
Interruption Externe 0
Interruption Timer 0
Interruption Externe 1
Interruption Timer 1
Interruption Port Srie
30
Jlassi Khaled
Cela signifie que si une Interruption Port Srie intervient en mme temps qu'une Interruption
Externe 0, celle-ci sera excute en premier lieu et quand elle sera termine, le 8051
s'occupera de l'Interruption Port Srie. Ceci nous ramne parler des priorits dans la gestion
des interruptions. Le 8051 offre deux niveaux de priorits : niveau haut et niveau bas. Rien de
tel qu'un bon exemple pour comprendre l'utilit des priorits. Supposons que nous avions
activ linterruption du Timer 1 qui sera appel automatiquement chaque fois que le Timer 1
dborde. De la mme manire nous avions activ linterruption du port srie qui sera appel
chaque fois quun caractre sera reu via le port srie. Si nous considrons que la
communication avec le port srie est plus importante que linterruption du Timer 1, il faut
accorder une priorit plus leve au port srie. Cela veut dire si une interruption Timer 1 est
en cours, linterruption port srie peut prendre la main si un caractre arrive. Une fois celle-ci
termine, elle rend le contrle au Timer 1 qui son tour rendra la main au programme
principal lors de son achvement. Les priorits sont gres par le registre IP (B8h). Le tableau
suivant donne la composition du registre IP.
Bit
Nom
Indfini
Indfini
Indfini
PS
BCh
PT1
BBh
Priorit Timer 1
PX1
BAh
PT0
B9h
Priorit Timer 2
PX2
B8h
31
Jlassi Khaled
Chaque C/T comporte deux compteurs binaires de 8 bits. Diffrents modes de fonctionnement
sont possibles : les plus utiliss sont :
- le mode 1 : les compteurs sont mis en cascade pour former un compteur 16 bits ;
une demande d'interruption a lieu lorsqu'il y a dpassement de la capacit du
compteur, cest dire lorsque le compteur passe de FFFFh 0000h ;
- le mode 2 : l'un des compteurs est utilis comme compteur, l'autre comme registre
dans lequel on peut crire un nombre de 8 bits quelconque ; lorsqu'il y a
dpassement de capacit du compteur, un rechargement automatique de celui-ci
est effectu par le registre; cette technique permet donc d'obtenir des demandes
d'interruption rgulirement espaces si le compteur reoit des impulsions d'horloge.
32
Jlassi Khaled
Les paragraphes suivants dcrivent les diffrentes configurations possibles du Timer0. Mais
ce qui est valable pour le Timer0 lest galement pour le Timer1 (qui est gnralement
configur pour gnrer la vitesse de transmission du port srie (voir V.8).
a) Mode Temporisation
Pour configurer le Timer0 dans ce mode, les bits Gate et C/T du registre TMOD doivent tre
0. M1 et M0 servent alors choisir la valeur maximale que le Timer peut atteindre avant de
retourner 0: on parle de dbordement. Dans ce mode, le Timer0 est incrment une
frquence gale 1/12 de la frquence horloge du microcontrleur (figure 4.13)
33
Jlassi Khaled
16
34
Jlassi Khaled
#include <reg51.h>
P4 = P4 ^ 0x80 ;
TH0 = 0xDF ;
TL0 = 0x80 ;
}
- 0 0 0 1
TMOD = 0x01 ;
TH0 = 0xDF ;
TL0 = 0x80 ;
// TMOD
(Gate et C/T = 0 ; M1 M0 =
01)
EA = 1 ;
ET0 = 1 ;
TR0 = 1 ;
While (1)
{
}
b) Mode Comptage
La seule diffrence entre ce mode et le mode temporisation est la source de la cadence
dincrmentation : Cette source dans ce mode est issue des fronts descendants au niveau de la
broche T0 du microcontrleur pour le Timer0 et T1 pour le Timer1. Pour configurer le
Timer0 en mode comptage C/T doit tre 1 ; les autres bits gardent le mme rle dcrit en
mode temporisation (figure 4.14).
35
Jlassi Khaled
36
Jlassi Khaled
#include <reg51.h>
P4 = P4 ^ 0x01 ;
}
void main ( void )
{
TMOD = 0x06 ;
- 0 1 1 0
// TMOD
M1 M0 = 10)
(Gate=0 et C/T = 1 ;
TL0 = 0xFB ;
EA = 1 ;
ET0 = 1 ;
TR0 = 1 ;
While (1)
{
}
Sf ).
}
V.9 Le port srie
Pour certaines applications (transfert de donnes distance, commande de modems,...), il est
utile de disposer en plus des ports d'E/S parallles, d'un port d'entre/sortie srie ou sriel
(Serial Input/Output Port). Le principe des liaisons srie est trs simple : plutt que d'envoyer
simultanment 8 bits en parallle sur 8 lignes, on envoie les 8 bits l'un aprs l'autre sur une
seule ligne. Le 8051 dispose d'un port srie bidirectionnel utilisant une ligne pour l'envoi des
donnes, TxD, et une ligne pour la rception des donnes, RxD.
Plusieurs modes de fonctionnement sont possibles. Le mode le plus utilis emploie le
temporisateur 1 en mode de rechargement automatique pour dfinir la cadence d'envoi des
bits (baud rate). Les cadences standard vont de 300bps (bits par seconde) 19200bps.
37
Jlassi Khaled
Pour envoyer un caractre, il suffit de l'crire dans le registre Sbuf d'mission ; cela enclenche
automatiquement la procdure d'envoi du caractre :
- le premier bit s'appelle le bit Start, toujours 0 ;
- il est suivi par les 8 bits de l'octet transmettre ;
- on termine par le bit Stop, toujours 1 ; la prsence des bits Start et Stop assure qu'il
y a toujours un front descendant en dbut de transmission d'un octet ; la ligne reste
1 jusqu' l'octet suivant ;
Sur la figure suivante, nous prsentons le chronogramme de fonctionnement de la
liaison srie. Dans cet exemple nous avons choisi denvoyer le caractre E dont le
code ASCII est 69 (01000101) avec un bit de stop et sans bit de parit
Jlassi Khaled
rception et de validation de
rception :
SM0
SM1
REN
TI
RI
SM0
SM1
Mode
Description
Registre
dcalage
UART 8 bits
UART 9 bits
Vitesse
Fosc/12*
Variable
Fosc/64 ou Fosc/32*
Variable
UART 9 bits
39
Jlassi Khaled
1 : Timer1 est en
mode comptage
dvnements.
C/T
M1
M0
= 0x20
00 : compteur 13 bits.
01 : compteur 16 bits.
10 : compteur 8 bits
Ce timer peut tre activ ou arrt suivant ltat dun bit du registre TCON
adressable au niveau bit (Timer CONtrol) : il sagit
bit TR1
= 1 du
: Timer1
actif.
= 0 : Timer1 arrt.
40
Jlassi Khaled
Dans le cas de la configuration donne sur la figure 4.17, la valeur de TH1 est
charge dans TL1 qui est incrment avec une frquence Fosc /12*32. Une fois TL1
repasse 0, il ya indication de dbordement ainsi quun rechargement de TL1 avec
la valeur de TH1, et le cycle recommence : cest la frquence de dbordement du
timer qui fixe la vitesse de transmission (figure 4.19).
Exemple :
On veut tablir une liaison srie avec une vitesse de 9600 bits /seconde avec un
microcontrleur ayant une frquence dhorloge de 12 Mhz.
- Dterminer la valeur que doit contenir TH1.
TH1
Recharge
Fosc/12
TL1
Passage
Indication de
dbordement
Vitesse de
transmission
41
Pour avoir une vitesse de 9600 bits/sec, il faut avoir 9600 dbordements par
seconde.
TL1 doit dborder toutes les 1/9600 secondes ~ 104 secondes.
Donc TL1 doit tre incrment 104 fois* (104 sec / 32 sec) = 3,25 ~ 3 avant de
dborder et par consquent contenir la valeur 256- 3 = 253 (0xFD). Cest cette valeur
qui doit tre stocke dans TH1.
#include <reg51.h>
int i ;
//
1 1 - 1 42
- 0 0
Mode Rceptio
TI et RI
n valid initialiss 0
Jlassi Khaled
char datas[10] ;
TMOD = 0x20 ;
// Timer1 configur en temporisateur 8 bits.
// TMOD =
TH1 = 0x98 ;
// Voir exemple page 3.
TR1 = 1 ;
// Lancer le Timer1.
1.
RI = 0 ;
// Remettre RI 0.
// Transmission de 10 donnes.
while ( !TI) ;
TI = 0 ;
43
Jlassi Khaled
S0BUF = datas [ i ] ;
(passage de TI 1).
// Remettre TI 0.
REN = 0 ;
// dsactiver la rception.
Remarque :
44
Jlassi Khaled
La carte qui sera utilise pour illustrer nos exemples est base dun microcontrleur fabriqu
par Philips (80C552) et conu autour du noyau 8051 (famille Intel). La carte dtude est
quipe de trois circuits mmoires : une EPROM (64 Koctets), une RAM sauvegarde par
batterie (32 Koctets) et dune RAM (32 Koctets). Ces circuits peuvent tre configurs de
plusieurs manires travers 11 cavaliers (J1..J11), pour occuper des types (code, donnes) et
des zones dadressage diffrents.
La configuration utilise est la suivante :
U3
U1
U2
0000..7FFFh
0000..7FFFh
32 Ko
32 Ko
8000..FFFFh
32 Ko
Jlassi Khaled
Un programme crit, que ce soit en un langage volu tel que C, ou en langage assembleur va
tre trait (compilation + dition des liens) pour produire enfin une suite de donnes binaires
compatibles avec le jeu dinstruction du microcontrleur.
Programme (C, assembleur, .. )
Librairies de fonctions
(code )
Compilation
(Code + rfrences aux fonctions
t
)
Paramtres
de
soit de format .BIN, qui contient uniquement du code (image de la mmoire cible) et peut
tre implant directement sur une EPROM qui quipera ensuite la carte microcontrleur.
soit de format .HEX qui contient en plus du code, les adresses partir desquelles le code
doit tre log, ainsi que des donnes de dtection derreurs. Ce format est destin tre
transfr par liaison srie ou autre une carte c quipe dun moniteur pouvant grer ce
format (ce qui est notre cas).
Jlassi Khaled
Un fichier .HEX est compos dune suite de lignes, en voici un exemple dune ligne :
:10067500284B4559290054484953204953204120C6
Dbut de la
ligne
Nombre dinstructions
Donnes de
Les instructions en hexa
dans la ligne en hexa.
dtection
(16 instructions)
Type de
donnes
La dernire ligne dun fichier .HEX tant ( :00000001FF) et elle indique au moniteur
la fin du fichier.
Carte c
PC
cble srie
Terminal
Port srie
Moniteur
Port srie
Jlassi Khaled
Project>>New Project
Une
fois
on
choisi
le
chemin
slectionner
le
type
de
Jlassi Khaled
Jlassi Khaled
Exemple :
Le programme quon va traiter au cours de notre exemple est assez simple, mais
montre la richesse des librairies et la puissance de lenvironnement Keil surtout dans
les phases de dbogage et simulation.
Le programme utilise deux fonctions de la librairie fournie :
Jlassi Khaled
#include <reg552.h>
void Main(void)
int i;
/*Dclaration de variables
*/
char datas[10]="bonjour!!!";
/*
S0CON = 0x52 ;
TMOD = 0x20 ;
TH1 = 0xFD ;
TR1 = 1 ;
*/
/*lancer le timer1*/
{
while ( !TI) ;
TI = 0 ;
S0BUF = datas [ i ] ;
}
8
Jlassi Khaled
Maintenant, nous pouvons passer en mode dbogage avec le menu Debug>>Start/Stop Debug
Session.
ou bien licne correspondante de la barre doutils
Dans ce mode, il est possible dexcuter le programme pas pas, de simuler un grand nombre
de priphriques et visualiser le contenu des registres et des mmoires aprs chaque instruction.
Dans notre exemple, on sintressera au port srie. Keil dispose dune interface
graphique (fentre) : Toute donne envoye au port srie est affiche sur cette interface et toute
donne saisie au niveau de linterface est considre comme tant reue sur le port srie.
Il faut activer la fentre simulant le port srie avec le menu View >> Serial Window #1 et
ensuite lafficher en mme temps que le fichier C avec le menu Window >> Tile Horizontally.
Jlassi Khaled
10
Jlassi Khaled
Ainsi, le compilateur utilise des paramtres par dfaut qui diffrent gnralement de
ceux de la plate forme matrielle utilise. Ce qui conduit logiquement un
comportement imprvisible du programme une fois charg sur la carte. Dans notre
cas par exemple :
Dterminer les valeurs dinitialisation des registres importants (tel que SP :Stack
Pointer).
Etc.
Pour lutiliser, il faut en faire une copie dans le rpertoire de travail et lajouter au
projet.
Ainsi, pendant la simulation, on dispose de conditions semblables celles du
matriel et les rsultats obtenus durant cette phase peuvent tre considrs comme
11
Jlassi Khaled
concluants. Il faut noter que certains de ces paramtres peuvent tre dfinis
directement travers linterface graphique de Keil et cest ce quon va faire.
suivants :
Xtal (Mhz) :11.059 qui est la frquence
relle utilise dans la carte.
Memory Model : Large variables in
XDATA.
Code Rom Size : Large 64K program.
Operating system : None
Eprom : 0x9000. En effet le moniteur
utilisant les 32 Ko infrieurs, on ne
peut utiliser que la zone dadressage
partir de 8000h ; on a choisi 9000h.
Ram : 0x0000
12
Jlassi Khaled
Aprs avoir recompil le programme on devrait avoir un fichier .HEX prt tre charg dans
la zone code partir de ladresse 9000h.
IV.3 Chargement du programme.
Aprs avoir lanc le logiciel de transfert et reli le PC la carte et avoir mis la carte sous
tension, le chargement se fait en quatre tapes :
1. On indique au moniteur quon va lui transmettre un fichier .HEX avec la commande H :
taper la lettre h dans linterface dhyperterminal.
2. Le microcontrleur (moniteur) renvoie la lettre H pour indiquer quil est prt.
3. On envoie le fichier .HEX charger en utilisant la commande Transfert>>Envoyer un
fichier texte.. du menu de HYPERTERMINAL comme indiqu ci-dessous.
Jlassi Khaled
14
Jlassi Khaled
Microprocesseurs et Microcontrleurs
I. Introduction :
Le 8051 est un microcontrleur qui a t dvelopp par Intel et autour duquel, par la suite, ont
t conus d'autres microcontrleurs qui sont alors dit de la famille 8051. Plusieurs
constructeurs font aujourd'hui des microcontrleurs de cette famille (se reporter au chapitre
sur les microcontrleurs de la Famille 8051). Je vais particulirement m'intresser ici au
noyau 8051 et 8052 ainsi qu'aux 80C535 et 80C537 de Siemens, microcontrleurs trs
puissants. Il est alors important de s'intresser l'architecture du noyau 8051 qui est donc
commune tous les microcontrleurs de la famille, au dtail prs que sur des versions plus
perfectionnes, il y a ajout de fonctions. Notons au passage que le cycle machine dure 12 fois
la priode de l'oscillateur utilis. Voyons aussi une prsentation matrielle de ces
microcontrleurs, accompagne d'un exemple de mise en oeuvre avec de mmoire de
programme et de donnes externes. J'ai choisi de prsenter le 8031, 8032 ainsi que le
SAB80C535 et 80C537 de Siemens car ce sont les micros les plus courants dans cette famille.
Il est tant maintenant de prsenter le jeu d'instructions du 8051. J'ai mis disposition sur ce
site un assembleur ainsi qu'un simulateur. L'assembleur est un freeware et il est mon avis le
meilleur assembleur shareware car il respecte 100% l'assembleur Intel. De plus il est
compatible avec plus de 30 microcontrleurs de la famille.... Le mieux pour juger, c'est de le
charger: asem51.zip
Quant au simulateur, il s'agit d'un simulateur sous DOS en mode texte. Ce n'est qu'une version
d'valuation d'un soft payant mais il n'y a pas de restriction d'utilisation : emily.zip
Intressons nous maintenant la structure de la RAM interne du 8051, puis l'utilisation des
timers, du port srie, des interruptions; du convertisseur A/N et de l'unit arithmtique du
80C537.
Nom Marque Botier RAM
E/S
Parallle
E/S A/D
Srie (bits)
Timers
Source
Int
80C31
DIP40
128
32
1 port
2X16bits
80C32
DIP40
256
32
1 port
3X16bits
80C198
Intel
10
1X16 + WD
28
80C196
Intel
10
1X16 + WD
28
80C152
Intel
2X16 bits
11
NC
256
40E/S
2 ports
Jlassi Khaled
80C451
Intel
NC
128
56E/S
1 port
2X16 bits
3X16 + WD
3X16 + WD
80C557 Philips
PLCC
Jlassi Khaled
Entre /EA : (External Access) si EA=0, les instructions sont recherches dans la
mmoire programme externe.
RST : Entre d'initialisation. Un tat haut pendant deux cycles machines sur
cette broche entrane une initialision du microcontrleur.
Sortie /PSEN : (Programm Store ENable) passe 0 lorsque le micro va
rechercher une instruction en mmoire programme externe.
Sortie ALE : (Adress Latch Enable) prvue pour commander le dmultiplexage
du port P0. Si ALE est 1, P0 prsente la partie A0 A7 du bus d'adresse et si
ALE est 0, P0 sert de bus de donne. Pour mieux comprendre, se reporter
l'organisation du bus.
XTAL1 et XTAL2 : Placer le quartz entre ces deux broches avec deux
condensateurs de 22pF entre ces deux broches et la masse.
P0.0 P0.7 : 8 lignes du port P0 du type " drain ouvert". Si ces lignes sont
utilises en sortie, il est ncessaire de le doter de rsistances de rappel. Se
reporter au paragraphe l'organisation du bus.
P1.0 P1.7 : Port bidirectionnel avec rsistances de rappel au +5V intgres.
P2.0 P2.7 : Idem que port P1 sauf : fonction secondaire du port: adresses de
A8 A15. Se reporter au paragraphe l'organisation du bus.
P3.0 P3.7 : Idem que port P1 sauf : fonctions secondaires :
P3.0 : RxD entre de l'interface srie
P3.1 : TxD sortie de l'interface srie
P3.2 : /INT0 entre pour interruption externe
P3.3 : /INT1 Idem
P3.4 : T0 entre de comptage pour timer0
P3.5 : T1 entre de comptage pour timer1
P3.6 : /WR sortie criture de la mmoire externe
P3.7 : /RD sortie lecture de la mmoire externe
4
Jlassi Khaled
direct
@Ri
#data
Donne 8 bits
rel
addr11
addr16
Mnmonique Syntaxe
MOV
A, Rn
E8+n 1
MOV
A, direct
E5
MOV
A, @Ri
E6+i
MOV
A, #data
74
MOV
Rn, A
F8+n 1
MOV
Rn, direct
A8+n 2
MOV
Rn, #data
78+n 2
MOV
direct, A
F5
MOV
direct, Rn
88+n 2
Jlassi Khaled
MOV
direct, direct
85
MOV
direct, @Ri
86+i
MOV
direct, #data
75
MOV
@Ri, A
F2+i
MOV
@Ri, direct
A6+i
MOV
@Ri, #data
76+i
MOV
DPTR, #data16 90
83 1 2
E2+i 1 2
MOVX A,@DPTR E0
MOVX @Ri,A
F2+i 1 2
MOVX @DPTR,A F0
1 2
1 2
Jlassi Khaled
C8+n 1 1
XCH A, direct C5
XCH A, @Ri
2 1
C6+i 1 1
L'instruction XCHD : (XCHD A, @Ri) change les quartets de poids faible entre
l'accu A et l'octet adress.
XCHD A, @Ri D6+i 1 1
28+n 1 1
ADD A, direct 25
ADD A, @Ri
26+i 1 1
ADD A, #data 24
2 1
2 1
38+n 1 1
ADDC A, direct 35
ADDC A, @Ri
36+i 1 1
ADDC A, #data 34
2 1
2 1
Jlassi Khaled
98+n 1 1
SUBB A, direct 95
SUBB A, @Ri
2 1
96+i 1 1
SUBB A, #data 94
06+i 1 1
INC A
04
1 1
INC direct 05
2 1
INC Rn
08+n 1 1
INC DPTR A3
1 2
16+i 1 1
DEC A
14
1 1
DEC direct 15
2 1
DEC Rn
2 1
18+n 1 1
Jlassi Khaled
DA A D4 1 1
54
2 1
ANL A, @Ri
56+i 1 1
ANL A, direct
55
ANL A, Rn
58+n 1 1
2 1
3 2
ANL direct, A
52
2 1
ANL C, /bit
B0
2 2
ANL C, bit
82
2 2
44
2 1
ORL A,@Ri
46+i 1 1
ORL A, direct
45
ORL A, Rn
48+n 1 1
2 1
3 2
ORL direct, A
42
2 1
ORL C, /bit
A0
2 2
ORL C, bit
72
2 2
Jlassi Khaled
XRL A, #data
64
2 1
XRL A, @Ri
66+i 1 1
XRL A, direct
65
XRL A, Rn
68+n 1 1
2 1
3 2
XRL direct, A
2 1
62
10
RL
A 23 1 1
RLC
A 33 1 1
RR
A 03 1 1
RRC
A 13 1 1
Jlassi Khaled
SWAP A C4 1 1
E1 2 2
LJMP addr16
02 3 2
SJMP rel
80 2 2
JMP
@A+DPTR 73 1 2
11
rel
60 2 2
JNZ rel
70 2 2
JC
40 2 2
rel
Jlassi Khaled
JNC rel
JB
50 2 2
bit, rel 20 3 2
L'instruction CJNE : (CJNE <byte1>, <byte2>, <rel>) saut si byte1 et byte2 sont
diffrents
CJNE @Ri, #data, rel B6+i 3 2
CJNE A, #data, rel
B4
3 2
B5
3 2
3 2
D8+n 2 2
12
Jlassi Khaled
R7
R0
17H
10H
R7
R0
0FH
08H
R7
R0
07H
00H
R7
R0
16 octets peuvent tre adresss au niveau du bit (de 20H 2FH). L'adresse de chacun des bits
est exprime l'aide d'un octet :
Adresse b7 b6 b5 b4 b3 b2 b1 b0
13
2FH
7F 7E 7D 7C 7B 7A 79 78
2EH
77 76 75 74 73 72 71 70
2DH
6F 6E 6D 6C 6B 6A 69 68
2CH
67 66 65 64 63 62 61 60
2BH
5F 5E 5D 5C 5B 5A 59 58
2AH
57 56 55 54 53 52 51 50
29H
4F 4E 4D 4C 4B 4A 49 48
28H
47 46 45 44 43 42 41 40
Jlassi Khaled
27H
3F 3E 3D 3C 3B 3A 39 38
26H
37 36 35 34 33 32 31 30
25H
2F 2E 2D 2C 2B 2A 29 28
24H
27 26 25 24 23 22 21 20
23H
1F 1E 1D 1C 1B 1A 19 18
22H
17 16 15 14 13 12 11 10
21H
0F 0E 0D 0C 0B 0A 09 08
20H
07 06 05 04 03 02 01 00
IV.3 Cartographie des SFR d'un 8031 (et 8032 indiqu par un *)
Symbole
Fonction
Adresse
Etat
initial
F6
F5
F4
F3
F2
F1
F0
00000000
F0H
E7
ACC
Accumulateur
E0H
PSW
registre d'tat
D0H
E6
E5
E4
E3
E2
E1
E0
00000000
D7
D6
D5
D4
D3
D2
D1
D0
00000000
CY
AC
F0
RS1
RS0
0V ---
TH2*
Poids fort du
Timer 2
CEH
00000000
TL2*
poids faible du
Timer 2
CDH
00000000
RCAP2H*
Capture/rech
du T2
CCH
00000000
RCAP2L*
Idem
CBH
00000000
14
Jlassi Khaled
CF CE
T2CON*
Contrle du T2
CD
CC
CB
CA C9
C8
C8H
00000000
TF2 EXF2 RCLK TCLK EXEN2 TR2 C/T2 CP/RL2
IP
priorit des
interruptions
BF BE
Port P3
BC
BB
BA
B9
B8
PT1
PX1
PT0
PX0
B3
B2
B1
B0
xx000000
B8H
--- --- PT2
B7
P3
BD
B6
PS
B5 B4
B0H
11111111
RD WR T1 T0 INT1 INT0 TxD RxD
IE
Validation des
int.
AF AE
Port P2
AC
AB
AA
A9
A8
0x000000
A8H
EA --- ET2 ES
A7
P2
AD
A6
A5
ET1 EX1
A4
A3
ET0 EX0
A2
A1 A0
11111111
A0H
A15 A14 A13 A12 A11 A10 A9 A8
SBUF
Donnes du
port srie
SCON
Contrle du
port srie
99H
00000000
9F
Port P1
9D
9C
9B
9A
99 98
00000000
98H
SM0 SM1 SM2 REN TB8 RB8 TI RI
97
P1
9E
96
95
94
93
92
91
90
11111111
90H
---
---
---
---
---
---
T2EX
T2
TH1
Poids fort du
Timer 1
8DH
00000000
TH0
Poids fort du
Timer 0
8CH
00000000
TL1
poids faible du
T1
8BH
00000000
TL0
poids faible du
T0
8AH
00000000
15
Jlassi Khaled
TMOD
TCON
Modes pour T0
et T1
89H
Contrle de T1
et T2
88H
00000000
GATE C/T M1 M0 GATE C/T M1 M0
8F
8E
8D
8C
8B
8A
89
88
00000000
TF1
TR1
TF0
TR0
--------
-- -- -- -----
-----
---- -----
SMOD
-- -- -- GF1
GF0
PD IDL
Mode de
consommation
87H
DPH
Poids fort de
DPTR
83H
00000000
DPL
poids faible de
DPTR
82H
00000000
SP
Pointeur de pile
81H
00000111
PCON
0xxxxxxxx
87
P0
Port P0
86
85
84
83
82
81
80
11111111
80H
AD7 AD6 AD5 AD4 AD3 AD2 AD1 AD0
IV.4 SFR supplmentaires (ou changes) des 80C535 par rapport aux 8032 :
Symbole
Fonction
Adresse
P5
Port P5
F8H
Etat
Initial
FE
FD
FC
FB
FA
F9
F8
11111111
EF
EE
ED
EC
EB
EA
E9
E8
P4
Port P4
E8H
11111111
P6
Port P6 (8E)
DBH
-----------
DAPR
Contrle du
CAN
DAH
16
00000000
VinAREF
VinAGND
Jlassi Khaled
ADDAT
Donne du
CAN
ADCON
Contrle de
CAN
D8H
TH2
Poids fort de T2
CDH
00000000
TL2
poids faible de
T22
CCH
00000000
CRCH
registre 16 bits
de
CBH
00000000
CRCL
capture, cmp
et rech.
CAH
00000000
D9H
00000000
DF
DD DC
DB
DA
D9
D8
00000000
BD CLK
CF
T2CON Contrle du T2
DE
CE
CD
CC
CB
CA
C9
C8
00000000
C8H
T2PS I3FR I2FR T2R1 T2R0 T2CM T2I1 T2I0
CCH3
Registre de
capture
C7H
00000000
CCL3
et de comp. 3
C6H
00000000
CCH2
Registre de
capture
C5H
00000000
CCL2
et de comp 2
C4H
00000000
CCH1
Registre de
capture
C3H
00000000
CCL1
et de comp 1
C2H
00000000
CCEN
Validation
capt/Cmp
C1H
IRCON
Contrle des
Int
C0H
17
- - - COCAH3 COCAL3
COCAH0 COCAL0
2211
C7
C6 C5
C4
C3
C2
C1
C0
00000000
00000000
Jlassi Khaled
IP1
00000000
B9H
IP1.5 IP1.4 IP1.3 IP1.2 IP1.1 IP1.0
IEN1
IP0
BF
Validation de
Int
B8H
A9H
BE
BD BC
BB
BA
B9
B8
00000000
EXEN2 SWDT EX6 EX5 EX4 EX3 EX2 EADC
00000000
IP0.5 IP0.4 IP0.3 IP0.2 IP0.1 IP0.0
IEN0
PCON
18
AF
Validation des
Int
A8H
Mode de
consommation
87H
AE
AD AC
AB
AA
A9
A8
00000000
EAL WDT ET2 ES ET1 EX1 ET0 EX0
0xxxxxxx
SMOD PDS IDLS
Jlassi Khaled
Bibliographie
Microcontrleurs 8051 et 8052 : Description et mise en uvre
Edition Dunod : juillet 2001
Auteur : Bernard Odant
Microcontroller Projects in C for the 8051
Edition: Newnes: 2000
Auteur: Dogan Ibrahim
Microcontrleurs : principes et applications
Edition Radio : Paris 1991
Auteur : Christian Tavernier
http://perso.wanadoo.fr/michel.hubin/physique/microp/chap_mp1.htm#debut#debut
microprocesseur, microcontrleur, composant ASIC ou FPGA, informatique industrielle
http://perso.wanadoo.fr/e-lektronik/LEKTRONIK/C9A.htm#C9A2
Qu'est-ce qu'un microcontrleur?, Comment fonctionne un microcontrleur?, La
programmation d'un microcontrleur, A quoi servent les microcontrleurs?
http://www.ybet.be/hardware/hardware1.htm
Structure interne d'un processeur de base, Mmoire,Passage du CISC au RISC,
Architecture pipeline, superpipeline et superscalaire,Architecture interne des processeurs,
Architecture des Athlon 64 et Athlon XP
Dcodage d'adresses, Types de mmoires
http://www.jbaumann.ch
Historique des microprocesseurs,Gestion de la mmoire, Les ports d'entre / sortie (E/S)
Interruptions, E/S pilotes par interruption, Accs direct la mmoire (DMA)
http://www.polytech-lille.fr/~rlitwak/Cours_MuP
Microprocesseurs et micro-ordinateurs:Dfinitions, Architecture et constituants ,
Application des microprocesseurs.
Composants d'un microprocesseur:L'unit arithmtique et logique (UAL)
http://www-gtr.iutv.univ-paris13.fr/Cours
Introduction au langage machine, Branchements, Dclaration d'un segment en
assembleur, Notion de pile, Les fonctions du BIOS, Vecteurs d'interruptions, Les bus du
PC
http://www.qsl.net/f6flv/cntr.html
Le 8259 maitre (IRQ0 a IRQ7), Le 8259 esclave (IRQ8 a IRQ15), Affectation des
interruptions. Registres et programmation du 8259
http://www.qsl.net/f6flv/docbios.html
Donnees Timer, Donnees Video, Donnees unite de disquette, Donnees clavier, Interfaces
V24/RS232C
Tableau des primitives, Primitives du BIOS, Messages du Bios, Les Secrets du BIOS PC/AT
http://inferno.cs.univ-paris8.fr/~am/tutorial/os/tutorial07.html
Le processeur et les interruptions. Des interruptions matrielles gres par un chipset : le
8259A (1)
Des interruptions matrielles gres par un chipset : le 8259A (2)
Paramtrer le contrleur d'interruptions:
ICW1 (port 0x20 and 0xA0),ICW2 (port 0x21 et 0xA1), ICW3 (port 0x21 et 0xA1)
ICW4 (port 0x21 et 0xA1), OCW1 (ports 0x21 et 0xA1), OCW2 (ports 0x20 et 0xA0)
OCW3 (ports 0x20 et 0xA0)
http://www.uv.tietgen.dk/staff/mlha/pc/prog/asm/int/21
MASM:INT21, INT21.DOC,..,DEBUG,MASM,WASM,asm.doc
Warm Boot (~ Ctrl-Alt-Del),BOOT.COM, WARM.COM, Cold Boot (~ Reset)
http://www.nvg.ntnu.no/bbc/doc/Master%20512%20Technical%20Guide/m512techb_
int21.htm
Function 0- Program terminate, Function 1- Character input with echo,...,
Function 50h - Get disc information (Undocumented call),Fundion 56h - Rename
file,Function 57h - Get or set file date and time
http://physics.nist.gov./cuu/Units/binary.html