You are on page 1of 169

Microprocesseurs et Microcontrleurs

Reprsentation de linformation en numrique

Jlassi Khaled

Universit Virtuelle de Tunis

2008

Ce

module

Microprocesseurs

et

Microcontrleurs

sintresse

aux

systmes

microprogramms base de microprocesseurs et/ou de microcontrleurs. Les sujets choisis, le niveau auquel ils sont abords, ont t slectionns de manire concider avec les cours enseigns au niveau de certaines filires d'ingnieurs (Gnie lectrique, Tlcommunication, Informatique et certaines matrises technique). Concevoir une interface matrielle, pour un microprocesseur ou une application spcialise, 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

indpendantes mais complmentaires. L'tudiant ou l'tudiante devrait avoir une connaissance de base en systmes logiques et informatique. Toutefois Dans la premire partie nous avons fait un rappel sur les systmes numriques. C'est un pr requis ncessaire pour le reste du cours Ce Guide d'tude a pour objectif de vous prparer suivre le cours. Il dfinit en quelque sorte un mode d'emploi, non seulement pour le matriel didactique du cours, mais aussi pour le cheminement que vous devez adopter et les diffrentes exigences auxquelles vous devez rpondre. Bonne lecture et bon cours!

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. danalyser et pourquoi pas de concevoir des systmes minimales a base de microprocesseurs; quoique la pratique de plusieurs ralisations est ncessaire pour acqurir une connaissance relle de conception de systmes base de microprocesseurs. de proposer certaines solutions relatives des applications simples de commande et de contrle impliquant un microprocesseur ou un microcontrleur. de donner un avis professionnel sur les diffrentes familles de microcontrleurs et leurs champ dapplication. 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

accumulateur et de registres (quatre banques de huit registres). L'unit centrale du 80C51 incorpore un processeur boolen qui accrot considrablement la vitesse de traitement des instructions de manipulation de bits. Nous avons consacre la dernire partie de ce cours la programmation des microcontrleurs et notamment la famille C51. Pour cela nous avons pris le cas du

microcontrleur 80C552 de PHILPS. Ce microcontrleur incorpore une liaison srie RS232S et un bus I2C (rseau local) et 8 entres analogiques. Lenvironnement de programmation que nous avons choisi pour illustrer nos exemples et lenvironnement Keil. Cet environnement extrmement puissant prsente une plateforme logicielle complte pour la programmation des microcontrleurs. Lenvironnement Keil intgre un dbogueur avec Vision. Il peut tre utilis en mode simulateur ou moniteur temps rel charg sur cible. Le dialogue se faisant travers une liaison srie ou USB suivant les architectures. Le dboguage est facilit grce une intgration complte des microcontrleurs, on a ainsi une visibilit sur ltat de tous les priphriques internes en mode simulation. Keil fournit tous les fichiers de dmarrage (Startup, header..) pour chacune des architectures ainsi que de nombreux projets dexemples utilisant le CAN, lI2C, lEthernet et les priphriques internes. Le moniteur temps rel est pr-configur pour la plupart des cartes dvaluation du march. Grce son Editeur de liens tendue (LX51), Keil supporte aujourdhui tous les drivs 8051 ayant un adressage suprieur 64K. Un RTOS est aussi fourni en version allge et peut tre complt optionnellement (RTX 51, RTX 166 ou ARTX sur ARM, suivant l'architecture). Il supporte les dernires architectures XC166 d'Infineon et Super 10 de ST Microelectronics, incluant leurs fonctionnalits DSP.

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 0 1 0 1 0 1 0 1 0 1 0 1 0 1 20 =1 0 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

II.1 L'addition en binaire. L'addition 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

au-del des 10 premiers chiffres on a dcid d'ajouter les 6 premires lettres : 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F. Base 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 dcimale Base 0 1 2 3 4 5 6 7 8 9 A B C D E F hexa Base 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 binaire Un exemple : Le nombre 27 (en base 10) vaut en base 16 : 16+11=1*161 + 11*160= 1*161 + B*160 c'est--dire 1B en base 16. Le nombre FB3 (en base 16) vaut en base 10 : F*162 + B*161 + 3*160=3840+176+3=4019. Pour convertir un octet en hexadcimale, on le partage en 2 groupes de 4 bits, qui correspondent chacun un chiffre hexadcimal. 2 A D 5

0010 1010 1101 0101


IV. Reprsentation d'un nombre dans un ordinateur.

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

IV.2 Reprsentation d'un entier sign. Un entier sign est un entier pouvant tre ngatif. Il faut donc coder le nombre de telle faon que l'on puisse savoir s'il s'agit d'un nombre positif ou d'un nombre ngatif, et il faut de plus que les rgles d'addition soient conserves. L'astuce consiste utiliser un codage que l'on appelle complment deux.
- un entier relatif positif ou nul sera reprsent en binaire (base 2) comme un entier naturel, la seule diffrence que le bit de poids fort (le bit situ l'extrme gauche) reprsente le signe. Il faut donc s'assurer pour un entier positif ou nul qu'il est zro (0 correspond un signe positif, 1 un signe ngatif). Ainsi si on code un entier naturel sur 4 bits, le nombre le plus grand sera 0111 (c'est--dire 7 en base dcimale). D'une manire gnrale le plus grand entier relatif positif cod sur n bits sera 2n-1-1. -un entier relatif ngatif grce au codage en complment deux. Soit reprsenter un nombre ngatif. - Prenons son oppos (son quivalent en positif) - On le reprsente en base 2 sur n-1 bits - On complmente chaque bit (on inverse, c'est--dire que l'on remplace les zros par des 1 et vice-versa) - On ajoute 1 On remarquera qu'en ajoutant le nombre et son complment deux on obtient 0. Voyons maintenant cela sur un exemple: On dsire coder la valeur -5 sur 8 bits. Il suffit : - d'crire 5 en binaire: 00000101 - de complmenter 1: 11111010 - d'ajouter 1: 11111011 - la reprsentation binaire de -5 sur 8 bits est 11111011 Remarques: Le bit de poids fort est 1, on a donc bien un nombre ngatif. Si on ajoute 5 et -5 (00000101 et 11111011) on obtient 0 (avec une retenue de 1...) 6 Jlassi Khaled

IV.3 Reprsentation d'un nombre rel. Il s'agit d'aller reprsenter un nombre binaire virgule (par exemple 101,01 qui ne se lit pas cent un virgule zro un puisque c'est un nombre binaire mais 5,25 en dcimale) sous la forme 1,XXXXX... * 2n (c'est--dire dans notre exemple 1,0101*22). La norme IEEE dfinit la faon de coder un nombre rel. Cette norme se propose de coder le nombre sur 32 bits et dfinit trois composantes:
- le signe est reprsent par un seul bit, le bit de poids fort (celui le plus gauche) ; - l'exposant est cod sur les 8 bits conscutifs au signe ; - la mantisse (les bits situs aprs la virgule) sur les 23 bits restants ; Ainsi le codage se fait sous la forme suivante: seeeeeeeemmmmmmmmmmmmmmmmmmmmmmm - le s reprsente le bit relatif au signe - les e reprsentent les bits relatifs l'exposant - les m reprsentent les bits relatifs la mantisse

Certaines conditions sont toutefois respecter pour les exposants:


- l'exposant 00000000 est interdit - l'exposant 11111111 est interdit. On s'en sert toutefois pour signaler des erreurs, on appelle alors cette configuration du nombre NaN, ce qui signifie Not a number - les exposants peuvent ainsi aller de -126 127

Voyons voir ce codage sur un exemple. Soit coder la valeur 525,5 :


- 525,5 s'crit en base 2 de la faon suivante: 1000001101,1. On veut l'crire sous la forme : 1,0000011011 x 29 . Par consquent, le bit s vaut 1, l'exposant vaut 9 : soit 1001 et la mantisse est 10000011011. La reprsentation du nombre 525.5 en binaire avec la norme 10000100100000000000010000011011 IEEE est:

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. La puissance des microprocesseurs

daujourdhui a oriente leur utilisations vers le traitement des informations de masse (Gestion dune base de donne, Gestion des priphriques bloc, ), le calcul scientifique ainsi que tout ce qui est interface homme machine ractif (clavier, souris, cran, ). Comme nous pouvons le constater, le domaine dapplication des microprocesseurs reste vaste. Cest pourquoi nous les classons dans la catgorie des composants programmables gnralistes, cela signifie qu'ils peuvent tout faire, mais ils ne sont optimiss pour rien. La majorit des 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
2 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 et automatisme on lui prfrera gnralement des composants plus

spcialiss ne ncessitant pas, ni un calcul complexe ni un traitement dinformations de masse. Cest pourquoi dans les applications industrielles, que ce soit dautomatisme ou dinstrumentation, le microcontrleur est le composant programmable 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

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.

Sur la figure (2.1) nous prsentons le schma type dun microcontrleur.

Jlassi Khaled

OSCIN OSCOUT RESET OSCILLATEUR MMOIRE PROGRAMME MMOIRE DE DONNE

INT

CHIEN MICROPROCESSEUR ROM RAM EEPROM


DE

GARDE

BUS DONNES - CONTRLE - ADRESSES

TIMERS

C.A.N

INTERFACE PARALLLE

INTERFACE SRIE

TIMER1

TIMER2

PORT A

PORT B

PORT C

Figure 2.1. Schma type de tout appareil programmable.

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

SOUT

SCLK

SIN

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 microprocesseur a souvent besoin de stocker des donnes temporaires quelque part et c'est l qu'intervient la mmoire vive ou RAM qui, contrairement aux systmes informatiques classiques, peut tre de trs petite taille. Le dernier lment qui ne manque pas dimportance dans les applications susceptible de faire appel un microcontrleur est tout ce qui concerne les circuits d'interface avec le monde extrieur. Contrairement aux systmes informatiques classiques o les interfaces sont bien connues, de types assez peu diversifis et en nombre relativement limit; les interfaces que nous pouvons rencontrer dans des applications industrielles sont absolument quelconques. Il y a en effet assez peu de points communs entre un moteur pas pas, un afficheur cristaux liquides ou bien encore un programmateur de machine laver. Le schma type dun microcontrleur est issu dune analyse assez forte des divers systmes de commande et dautomatisme raliss avant l'avnement des microcontrleurs. Les fabricants de circuits intgrs ont affins un peu la dfinition de ce qu'il fallait intgrer pour arriver un schma-type analogue celui de la figure (1.1). Nous y retrouvons bien videmment un microprocesseur, gnralement simplifi et avec un jeu dinstructions rduit mais auquel des instructions de manipulation de bits, trs utiles pour faire des entres/sorties, lui ont t ajoutes. Dans certains cas, ce microprocesseur se voit dot d'un trs grand nombre de registres internes qui servent alors de mmoire vive. Ce qui vite lutilisation dune mmoire externe pour le stockage des donnes et rend le systme encore plus compact. Dans un grand nombre de microcontrleurs, nous trouvons galement de la mmoire morte intgr. Avec les progrs technologiques les fabricants ont appris placer sur la puce de la mmoire programmable lectriquement et effaable aux ultraviolets (UVPROM) ou, plus rcemment encore, de la mmoire programmable et effaable lectriquement (EEPROM). On trouve donc l'heure actuelle au moins quatre types diffrents de microcontrleurs : - ceux sans aucune mmoire morte ; - ceux avec EPROM (programmable et effaable lultra violet); -ceux avec EEPROM ;

Jlassi Khaled

-ceux avec un mlange de ces combinaisons (ROM -EEPROM ou UVPROM EEPROM). Pour ce qui est de la mmoire vive ou RAM, la situation est plus simple. Quasiment tous les microcontrleurs disposent d'une RAM interne de taille en principe assez faible et, lorsqu'elle n'est pas explicitement visible sur le synoptique, c'est que l'unit centrale dispose d'assez de registres pour servir de RAM comme nous l'avons expliqu prcdemment. Il est un peu plus dlicat de faire un schma type au niveau des circuits d'interface car c'est l que les diffrents microcontrleurs se distinguent en fonction des crneaux d'applications qu'ils visent. Nanmoins, on rencontre gnralement les lments de base suivants : - des lignes d'entres/sorties parallles en nombre variable selon la vocation et la taille du botier (un problme de nombre maximum de pattes se posant trs vite avec l'accroissement du nombre de ces lignes); - au moins une interface d'entre/sortie srie asynchrone, plus ou moins volue selon les circuits; - un ou plusieurs timers internes dont les possibilits peuvent tre trs variables mais qui fonctionnent gnralement en compteurs, dcompteurs, gnrateurs d'impulsions programmables, etc. ; - parfois, mais c'est un peu plus rare, un ou des convertisseurs analogiques numriques prcds ou non de multiplexeurs pour offrir plusieurs voies ; - parfois aussi, mais c'est galement plus rare, un convertisseur numrique analogique.

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 commande qui lit les instructions et les dcode; une unit de traitement (UAL - unit arithmtique et logique) qui excute les instructions; dun ensemble de mmoire appels registres; dun bus de donnes externe; dun bus dadresse externe; dun bus de commande externe; 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.

III.1 Architecture de base dun microprocesseur


III.1.1 L'unit de commande. Elle permet de "squencer" le droulement des instructions. Elle effectue la recherche en mmoire de l'instruction, le dcodage, l'excution et la prparation de l'instruction suivante. L'unit de commande labore tous les signaux de synchronisation internes ou externes (bus des commandes) au microprocesseur. III.1.2 L'unit arithmtique et logique (UAL). C'est l'organe qui effectue les oprations: Arithmtiques : addition, soustraction, multiplication, ... Logiques : et, ou, non, dcalage, rotation, .... 9 Jlassi Khaled

Deux registres sont associs l'UAL : l'accumulateur et le registre d'tat. III.1.2.1 L'accumulateur (nomm : A).
C'est une des deux entres de l'UAL. Il est impliqu dans presque toutes les oprations ralises par l'UAL. Certains constructeurs ont des microprocesseurs deux accumulateurs (Motorola : 6800). Exemple: A tant l'accumulateur et B un registre, on peut avoir : A+B (ADD A,B : addition du contenu du registre A avec celui du registre B, le rsultat tant mis dans A)

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. La puissance des microprocesseurs

daujourdhui a oriente leur utilisations vers le traitement des informations de masse (Gestion dune base de donne, Gestion des priphriques bloc, ), le calcul scientifique ainsi que tout ce qui est interface homme machine ractif (clavier, souris, cran, ). Comme nous pouvons le constater, le domaine dapplication des microprocesseurs reste vaste. Cest pourquoi nous les classons dans la catgorie des composants programmables gnralistes, cela signifie qu'ils peuvent tout faire, mais ils ne sont optimiss pour rien. La majorit des
10 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 et automatisme on lui prfrera gnralement des composants plus

spcialiss ne ncessitant pas, ni un calcul complexe ni un traitement dinformations de masse. Cest pourquoi dans les applications industrielles, que ce soit dautomatisme ou dinstrumentation, le microcontrleur est le composant programmable 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

Sur la figure (2.1) nous prsentons le schma type dun microcontrleur.


OSCIN OSCOUT RESET OSCILLATEUR MMOIRE PROGRAMME MMOIRE DE DONNE

INT

CHIEN MICROPROCESSEUR ROM RAM EEPROM


DE

GARDE

BUS DONNES - CONTRLE - ADRESSES

TIMERS

C.A.N

INTERFACE PARALLLE

INTERFACE SRIE

TIMER1

TIMER2

PORT A

PORT B

PORT C

Figure 2.1. Schma type de tout appareil programmable.

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

SOUT

SCLK

SIN

faons: mmoire programme par masque, mmoire UVPROM ou EEPROM. De cette faon, nous navons plus besoin de charger le programme dapplication chaque 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 microprocesseur a souvent besoin de stocker des donnes temporaires quelque part et c'est l qu'intervient la mmoire vive ou RAM qui, contrairement aux systmes informatiques classiques, peut tre de trs petite taille. Le dernier lment qui ne manque pas dimportance dans les applications susceptible de faire appel un microcontrleur est tout ce qui concerne les circuits d'interface avec le monde extrieur. Contrairement aux systmes informatiques classiques o les interfaces sont bien connues, de types assez peu diversifis et en nombre relativement limit; les interfaces que nous pouvons rencontrer dans des applications industrielles sont absolument quelconques. Il y a en effet assez peu de points communs entre un moteur pas pas, un afficheur cristaux liquides ou bien encore un programmateur de machine laver. Le schma type dun microcontrleur est issu dune analyse assez forte des divers systmes de commande et dautomatisme raliss avant l'avnement des microcontrleurs. Les fabricants de circuits intgrs ont affins un peu la dfinition de ce qu'il fallait intgrer pour arriver un schma-type analogue celui de la figure (1.1). Nous y retrouvons bien videmment un microprocesseur, gnralement simplifi et avec un jeu dinstructions rduit mais auquel des instructions de manipulation de bits, trs utiles pour faire des entres/sorties, lui ont t ajoutes. Dans certains cas, ce microprocesseur se voit dot d'un trs grand nombre de registres internes qui servent alors de mmoire vive. Ce qui vite lutilisation dune mmoire externe pour le stockage des donnes et rend le systme encore plus compact. Dans un grand nombre de microcontrleurs, nous trouvons galement de la mmoire morte intgr. Avec les progrs technologiques les fabricants ont appris placer sur la puce de la mmoire programmable lectriquement et effaable aux ultraviolets (UVPROM) ou, plus rcemment encore, de la mmoire programmable et effaable lectriquement (EEPROM). On trouve donc l'heure actuelle au moins quatre types diffrents de microcontrleurs : - ceux sans aucune mmoire morte ;

14

Jlassi Khaled

- ceux avec EPROM (programmable et effaable lultra violet); -ceux avec EEPROM ; -ceux avec un mlange de ces combinaisons (ROM -EEPROM ou UVPROM EEPROM). Pour ce qui est de la mmoire vive ou RAM, la situation est plus simple. Quasiment tous les microcontrleurs disposent d'une RAM interne de taille en principe assez faible et, lorsqu'elle n'est pas explicitement visible sur le synoptique, c'est que l'unit centrale dispose d'assez de registres pour servir de RAM comme nous l'avons expliqu prcdemment. Il est un peu plus dlicat de faire un schma type au niveau des circuits d'interface car c'est l que les diffrents microcontrleurs se distinguent en fonction des crneaux d'applications qu'ils visent. Nanmoins, on rencontre gnralement les lments de base suivants : - des lignes d'entres/sorties parallles en nombre variable selon la vocation et la taille du botier (un problme de nombre maximum de pattes se posant trs vite avec l'accroissement du nombre de ces lignes); - au moins une interface d'entre/sortie srie asynchrone, plus ou moins volue selon les circuits; - un ou plusieurs timers internes dont les possibilits peuvent tre trs variables mais qui fonctionnent gnralement en compteurs, dcompteurs, gnrateurs d'impulsions programmables, etc. ; - parfois, mais c'est un peu plus rare, un ou des convertisseurs analogiques numriques prcds ou non de multiplexeurs pour offrir plusieurs voies ; - parfois aussi, mais c'est galement plus rare, un convertisseur numrique analogique.

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 commande qui lit les instructions et les dcode; une unit de traitement (UAL - unit arithmtique et logique) qui excute les instructions; dun ensemble de mmoire appels registres; dun bus de donnes externe; dun bus dadresse externe; dun bus de commande externe; 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.

III.1 Architecture de base dun microprocesseur


III.1.1 L'unit de commande. Elle permet de "squencer" le droulement des instructions. Elle effectue la recherche en mmoire de l'instruction, le dcodage, l'excution et la prparation de l'instruction suivante. L'unit de commande labore tous les signaux de synchronisation internes ou externes (bus des commandes) au microprocesseur. III.1.2 L'unit arithmtique et logique (UAL). C'est l'organe qui effectue les oprations: 17 Jlassi Khaled

Arithmtiques : addition, soustraction, multiplication, ... Logiques : et, ou, non, dcalage, rotation, ....

Deux registres sont associs l'UAL : l'accumulateur et le registre d'tat. III.1.2.1 L'accumulateur (nomm : A).
C'est une des deux entres de l'UAL. Il est impliqu dans presque toutes les oprations ralises par l'UAL. Certains constructeurs ont des microprocesseurs deux accumulateurs (Motorola : 6800). Exemple: A tant l'accumulateur et B un registre, on peut avoir : A+B (ADD A,B : addition du contenu du registre A avec celui du registre B, le rsultat tant mis dans A)

Figure 2.2. Architecture de base de microprocesseur.


III.1.2.2 Le registre d'tat (Flags : F) A chaque opration, le microprocesseur positionne un certain nombre de bascules d'tat. Ces bascules sont appeles aussi indicateurs d'tat ou drapeaux (status, flags). Par exemple, si une soustraction donne un rsultat nul, l'indicateur de zro (Z) sera mis 1. Ces bascules sont regroupes dans le registre d'tat

18

Jlassi Khaled

On peut citer comme indicateurs: - retenue (carry : C) - retenue intermdiaire (Auxiliary-Carry : AC) - signe (Sign : S) - dbordement (Overflow : O) - zro (Z) - parit (Parity : P)

III.1.2.2.1 Retenue : (carry : C). Exemple: addition de nombres binaire sur 8 bits
11111100 + carry : 1 = 10000010 01111110 carry : 1 + = FCH 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.

III.1.2.2.2 Retenue intermdiaire : (Auxiliary Carry : AC). Sur les oprations arithmtiques, ce bit signale une retenue entre groupes de 4 bits (Half-byte: demi-octet) d'une quantit de 8 bits. III.1.2.2.3 Signe: (S) Ce bit est mise 1 lorsque le rsultat de l'opration est ngatif (MSB: bit de plus fort poids du rsultat: 1). III.1.2.2.4 Dbordement : (overflow : O)

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

III.1.2.2.5 Le bit Zro : (Zro : Z) Ce bit est mis 1 lorsque le rsultat de l'opration est nul. III.1.2.2.6 Le bit de parit : (P) Ce bit est mis 1 lorsque le nombre de 1 de l'accumulateur est pair.
Remarque : La plupart des instructions modifient le registre d'tat. Exemple : ADD A, B positionne les drapeaux : O, S, Z, A, P, C OR B, C (B ou C -> B) positionne S, Z, P tandis que MOV A, B (Move, Transfrer le contenu de B dans A) n'en positionne aucun. III.1.3 Les registres. Il ya deux type de registres : les registres d'usage gnral, et les registres d'adresses (pointeurs).

III.1.3.1 Les registres d'usage gnral.


Ce sont des mmoires rapides, l'intrieur du microprocesseur, qui permettent l'UAL de manipuler des donnes vitesse leve. Ils sont connects au bus de donnes interne au microprocesseur. L'adresse d'un registre est associe son nom (on donne gnralement comme nom une lettre) A, B,C... Exemple : MOV C,B: transfert du contenu du registre B dans le registre C.

III.1.3.2 Les registres d'adresses (pointeurs).


Ce sont des registres connects sur le bus dadresses. On peut citer comme registre:

- Le compteur ordinal (pointeur de programme PC) ;


- Le pointeur de pile (stack pointer SP) ; - Les registres d'index (index source SI et index destination DI).

III.1.3.2.1 Le compteur ordinal (pointeur de programme PC.) Il contient l'adresse de l'instruction rechercher en mmoire. L'unit de commande incrmente le compteur ordinal (PC) du nombre d'octets sur lequel l'instruction, en cours d'excution, est code. Le compteur ordinal contiendra alors l'adresse de l'instruction suivante. Prenons lexemple dun microprocesseur 8086 de INTEL : Exemple : (PC)=10000H ; il pointe la mmoire qui contient l'instruction MOV CX,BX qui est code sur deux octets (89 D9H) ; l'unit de commande incrmentera de deux le contenu du
21 Jlassi Khaled

PC : (PC) = 10002H (la mmoire sera suppose tre organise en octets).

Figure 2.3 Compteur de Programme (PC). III.1.3.2.2 Le pointeur de pile (stack pointer SP). Il contient l'adresse de la pile. Celle-ci est une partie de la mmoire, elle permet de stocker des informations (le contenu des registres) relatives au traitement des interruptions et des sousprogrammes. La pile est gre en LIFO : (Last IN First Out) dernier entr premier sorti. Le fonctionnement est identique une pile d'assiettes. Le pointeur de pile SP pointe le haut de la pile (31000H figure 2.4), il est dcrment avant chaque empilement, et incrment aprs chaque dpilement. Il existe deux instructions pour empiler et dpiler: PUSH et POP. exemple: PUSH A empilera le registre A et POP A le dpilera. La figure suivante montre lvolution du pointeur de pile durant lexcution du programme commenant en 12E30H.

22

Jlassi Khaled

Figure 2.4. Principe de fonctionnement de la pile.

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

Figure 2.5. Exemple dopration sur le registre d'index. III.2 Principe dexcution d'une instruction. Dans cette architecture standard, lexcution dune instruction se fait en trois tapes: -Recherche de l'instruction (Fetch) ;
-Dcodage (decode) ; -Excution (execute).

III.2.1 Recherche de l'instruction.


Le contenu de PC (compteur ordinal) est plac sur le bus dadresse (c'est l'unit de commande qui tablit la connexion). L'unit de commande (UC) met un ordre de lecture (READ=RD=1). Au bout d'un certain temps (temps d'accs la mmoire), le contenu de la case mmoire slectionne est disponible sur le bus des donnes. L'unit de commande charge la donne dans le registre d'instruction pour dcodage. Le microprocesseur place le contenu de PC (10000H) sur le bus dadresse et met RD 1 (cycle de lecture). La mmoire met sur le bus de donnes le contenu de sa mmoire n 10000H (ici 89D9H qui est le code de MOV C,B ). Le microprocesseur place dans son registre d'instruction le contenu du bus de donnes (89D9H). L'unit de commande dcode et excute l'instruction MOV C,B.

24

Jlassi Khaled

Figure 2.6 Compteur de Programme (PC).

III.2.2 Le Dcodage de linstruction. Le registre d'instruction contient maintenant le premier mot de l'instruction qui peut tre code sur plusieurs mots. Ce premier mot contient le code opratoire qui dfinit la nature de l'opration effectuer (addition, rotation,...) et le nombre de mots de l'instruction. L'unit de commande dcode le code opratoire et peut alors excuter l'instruction. III.2.3 Lexcution de linstruction.
Aprs lexcution de linstruction par micro-programme, les indicateurs sont positionns (O, S, Z, A, P, C). L'unit de commande positionne le compteur ordinal (PC) pour l'instruction suivante.

IV. Les BUS. Comme nous lavions vu plus haut, les trois lments fondamentaux dun systme microprogramm sont : le microprocesseur ou microcontrleur, la mmoire et les botiers dentres sorties. Tous ces lments sont relis entre eux par des bus comme le montre la figure ci dessous :

25

Jlassi Khaled

Figure 2.7. Architecture de base dun micro-ordinateur On appelle Bus, en informatique, un ensemble de liaisons physiques (cbles, pistes de circuits imprims, ...) pouvant tre exploites en commun par plusieurs lments matriels afin de communiquer. Les Bus ont pour but de rduire le nombre de traces ncessaires la communication des diffrents composants en mutualisant les communications sur une seule voie de donnes. Dans le cas o la ligne sert uniquement la communication de deux composants matriels, on parle parfois de port (port srie, port parallle, ...). Un Bus est caractris par le volume d'informations transmises simultanment (exprim en bits), correspondant au nombre de lignes sur lesquelles les donnes sont envoyes de manire simultan. Une nappe de 32 fils permet ainsi de transmettre 32 bits en parallle. On parle ainsi de "largeur de bus" pour dsigner le nombre de bits qu'il peut transmettre simultanment. D'autre part, la vitesse du bus est galement dfinie par sa frquence (exprime en Hertz), c'est--dire le nombre de paquets de donnes envoys ou reus par seconde. On parle de cycle pour dsigner chaque envoi ou rception de donnes. De cette faon, il est possible de connatre la bande passante d'un bus, c'est--dire le dbit de donnes qu'il peut transporter, en multipliant sa largeur par sa frquence. Un Bus d'une largeur de 16 bits, cadenc une frquence de 133 Mhz possde donc une bande passante gale : 16 * 133.106 = 2128*106 bit/s, soit 2128*106/8 = 266*106 octets/s soit 266*106 /1024 = 259.7*103 Ko/s
26 Jlassi Khaled

soit 259.7*103 /1024 = 253.7 Mo/s Pour la communication, un microprocesseur a besoin en gnral de trois Bus. Un Bus de donnes, un Bus dadresse et un Bus de commande. Sur la figure suivante nous prsentons un systme base de microprocesseur classique avec ces trois Bus. Chaque Bus a une fonction particulire :

Figure 2.8. Les bus dextensions


IV.1 Bus de donnes.

Il permet de vhiculer des donnes du microprocesseur vers un composant ou d'un composant vers le microprocesseur. Il est donc bidirectionnel. Le nombre de fils de ce bus varie suivant les microprocesseurs (8 / 16 / 32 / 64 bits). Dans la littrature, les diffrents fils de ce bus sont appels D0, D1, ..., Dp-1, si le bus a "p" fils.
IV.2 Bus dadresse.

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

Figure 2.9. Adressage de la mmoire.

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 64x1024 mots = 64 Kmots

20 bits

adressage de 220

1024x1024 mots = 1Mmots

32 bits

adressage de 232

4096x1024 x1024 mots = 4 Gmots

Tableau 1. Espace mmoire adressable en fonction des lignes dadresses.

IV.3 Bus des commandes. Le bus des commandes est constitu d'un ensemble de fils de "commandes", permettant la synchronisation et bien sr la commande des botiers mmoires et entres/sorties par le microprocesseur. Dans le cas prcdent, la cellule mmoire doit savoir quel instant elle doit mettre son contenu sur le bus de donnes. Pour cela, le microprocesseur possde une broche appele Read ( ) qu'il met 0 (0v) lorsque la cellule doit agir. De mme, lors d'une criture du microprocesseur vers la 28 Jlassi Khaled

cellule, il met sa broche Write (

) 0 (0V). Les signaux RD et WR sont des signaux

de synchronisation, de contrle et de commande. Ils sont relis aux autres composants par un bus: le bus des commandes. Celui-ci comporte d'autres signaux de commandes.

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

cases mmoire de p bits appel capacit ou taille de la mmoire s'exprime en Kilo (1Ko=210=1024) ou en Mga ( 1Mo=220=1024*1024=1048576). Chaque point mmoire est donc caractris par une adresse, correspondant un numro de ligne et un numro de colonne. Or cet accs n'est pas instantan et s'effectue pendant un dlai appel temps de latence. Par consquent l'accs une donne en mmoire dure un temps gal au temps de cycle auquel il faut ajouter le temps de latence. Ainsi, pour une mmoire de type DRAM, le temps d'accs est de 60 nanosecondes (35 ns de dlai de cycle et 25 ns de temps

Figure 2.9. Schma interne dune mmoire vive. de latence). Sur un ordinateur, le temps de cycle correspond l'inverse de la frquence de l'horloge, par exemple pour un ordinateur cadenc 200 Mhz, le temps de cycle est de 5ns (1/(200.106)). Par consquent un ordinateur ayant une frquence leve et utilisant des mmoires dont le temps d'accs est beaucoup plus long que le temps de cycle du processeur doit effectuer des cycles d'attente (en anglais wait state) pour accder la mmoire. Dans le cas d'un ordinateur cadenc 200Mhz utilisant des mmoires de types DRAM (dont le temps d'accs est de 60ns), il y a 11 cycles d'attente pour un cycle de transfert. Les performances de l'ordinateur sont d'autant diminues qu'il y a de cycles d'attentes, il est donc conseill d'utiliser des mmoires plus rapides. Les mmoires sont connectes un bus dadresse de n bits, un bus de donnes de p bits et des lignes de commandes (figure 2.8). Pour pouvoir communiquer avec le microprocesseur, on va

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

Figure 2.10. Organisation externe de la mmoire. est appel CS (chip select) slection de botier ou CE (chip enable) validation de botier. Il faut crer autant de CS qu'il y a de botiers. Dans notre exemple figure 2.11, il nous faut fabriquer deux CS : CS1, CS2
Exemple : Le bus dadresse est sur 16 bits, le bus de donnes est sur 8 bits (figure 2.11). A l'adresse 1000H, le premier botier mmoire contient A7H et le second contient A6H. Si le microprocesseur fait une lecture l'adresse 1000H (RD=1). Le premier botier mettra A7H sur le bus de donnes et le deuxime A6H sur le bus de donnes. Le bus de donnes D7- D0 a donc sur son fil D0 un "0" et un "1" ; c'est dire 5 volts et la masse. C'est donc un court-circuit. Les slections de botiers "CS" (CS1 et CS2 sur la figure suivante) sont des fonctions logiques. Elles proviennent de circuits combinatoires appels "logique de dcodage ou encore dcodage adresse". Les variables logiques de ces fonctions logiques sont 31 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

Figure 2.11 Conflit sur un bus.

32

Jlassi Khaled

Figure 2.12 Slection de la mmoire.


CS2=A15. Une lecture du microprocesseur l'adresse 1000H donnera : CS1 =1 et CS2 =0. Ce sera donc le premier botier qui sera valid et qui mettra le contenu de sa mmoire n 0001 0000 0000 0000 sur le bus de donnes (A7H si on reprend l'exercice prcdent). L'assemblage de plusieurs botiers forme un plan mmoire de plus grande capacit. L'assemblage horizontal (en largeur) permet de raliser des mmoires de mots plus grands. Les botiers partagent le mme bus dadresses et de contrle. Tandis que l'assemblage vertical (en profondeur) augmente la capacit (taille) mmoire du micro-ordinateur, les botiers partagent le mme bus de donnes.

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 CS3=A19*A18) CS1=/A19*A18 CS2=A19*/A18

33

Jlassi Khaled

Figure 2.13 Ralisation d'une slection botier. V.3 Rappel sur les dcodeurs.
A1 0 0 1 1 A0 0 1 0 1 Y3 0 0 0 1 Y2 0 0 1 0 Y1 0 1 0 0 Y0 1 0 0 0

Figure 2.14. Le dcodeur 2 -> 4.

34

Jlassi Khaled

Figure 2.15. Ralisation du plan mmoire.


Le dcodeur positionne 1 (5v) la sortie n "A1A0". Exemple: A1A0=11b (binaire) = 3d (dcimal) =>Y3Y2Y1Y0=(1000)b. Dans le cas de la figure ci dessus les entres A1 et A0 du dcodeur sont les lignes dadresse A19 et A18 du microprocesseur, ce qui permet de slectionner 128 Ko par sortie Yi du dcodeur (CS1, CS2, CS3 et CS4). La mmoire totale slectionne est alors de 512 Ko par banc mmoire. Soit au total 1Mo de cases mmoires slectionnes.

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

Figure 3.1 Registre dtat SR

III. Organisation de l'espace adressable.


L'espace adress par le 8086 est un espace de 1 Moctets organis en segments ayant des tailles pouvant aller jusqu' 64K octets. Ces segments peuvent se chevaucher et leurs adresses dbut sont multiples de 16: ainsi les segments de numros 0, 1, 2, 3, 4, 5 ... auront les adresses physiques 0, 16, 32, 48, 64, 80...Les adresses sont des adresses segmentes: formes par le couple (numro de segment, dplacement). Le numro de segment et le dplacement sont cods chacun sur 16 bits. Cette structuration rpond au dcoupage logique des programmes. Elle offre en outre l'avantage de ne spcifier que le dplacement dans les instructions rfrence mmoire, le numro de segment tant implicite (il demeure le mme tant qu'on n'accde qu' des donnes ou instructions situes dans un mme segment). Ainsi la plupart de ces instructions contiennent une adresse de 16 bits au lieu de 20 bits. L'adresse physique envoye par le 8086 sur le bus est une adresse 20 bits. Elle est calcule partir du numro de segment (conserv dans un registre) et du dplacement fourni par l'instruction: elle est obtenue en additionnant le numro de segment dcal de 4 positions vers la gauche (ce qui donne l'adresse physique du dbut du segment sur 20 bits) au dplacement sur 16 bits.
numro de segment + (16 bits) 0000

dplacement (16 bits)

adresse physique 20 bits

Figure 3.2. Formation d'une adresse physique par le microprocesseur

IV. Modes d'adressage.


Les instructions peuvent avoir 0, 1, ou 2 oprandes. Exemples : - Instructions sans oprande: NOP, STI, CLI, PUSHF, CBW...;

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.

IV.1 adressage registre registre. Les 2 oprandes se trouvent dans des registres.
Exemple: MOV AX, BX ; oprandes 16 bits ADD CH, DL ; oprandes 8 bits

IV.2 adressage immdiat .


L'une des oprandes est une constante code dans l'instruction elle mme. Exemples: MOV AX, 0A1EBH ADD CL, 25 OR AH,11000000 ; AX:= valeur hexa A1EB ; CL:= CL + 25 ; forcer les 2 bits de fort poids de AH 1

IV.3 adressage direct.


Le dplacement de l'un des oprandes est spcifi dans l'instruction. Exemples: 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

numrique du dplacement de la variable par rapport ce segment. Par contre la variable dsigne par Nom se trouve dans le segment de donnes bas par ES.

IV.4 adressage indirect (ou bas).


Un registre est utilis pour contenir l'adresse d'une oprande; ce registre peut tre BX ou BP. Exemples: MOV AX,[BX] MOV AX,[BP] Dans cet exemple BX contient ladresse de l'oprande dans le segment de donnes DS (adresse physique:= (DS)*16+(BX)). BP contient ladresse de l'oprande dans le segment SS (adresse physique:= (SS)*16+(BP)). L'avantage de ce mode d'adressage est qu'il permet avec la mme instruction excute plusieurs fois (dans une boucle par exemple) d'accder des variables diffrentes en modifiant entre 2 excutions le contenu du registre BX ou BP. IV.5 adressage index. Ici, on utilise un index qui est mis dans le registre SI ou DI. Exemple: 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).

IV.6 adressage indirect index (ou bas index).


Ici, on utilise un registre d'indirection (BX ou BP) et un registre d'index (SI ou DI). Exemples: 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 : adresse physique:= (DS)*16+(BX)+(SI). Cette instruction peut accder aux lments de 2 tables diffrentes en changeant entre 2 excutions le contenu de BX. Par contre dans la deuxime instruction, ladresse de la table se trouve dans la pile, son dplacement est dans BP : adresse physique:= (SS)*16+(BP)+(SI).

Jlassi Khaled

IV.7 adressage bas index avec dplacement.


Ce mode d'adressage est utile pour accder un lment d'une structure (enregistrement). Exemple: MOV AX,Compte[BX][SI]

Dans cet exemple, Compte est le dplacement de lenregistrement dans le segment de donnes, BX pointe un champ de l'enregistrement et SI un lment dans le champ: adresse physique:= (DS)*16+Compte+(BX)+(SI).

V. les principales instructions de l'assembleur X86. V.1 Les instructions de transfert de donnes. V.1.1 L'instruction MOV.
Syntaxe: MOV Destination,Source Destination = registre/case mmoire. Source = registre/case mmoire/valeur immdiate. Exemple: MOV AX,CX : charger dans AX le contenu de CX. Le contenu de CX reste inchang.

V.1.2 L'instruction LEA (Load Effective Address).


Syntaxe: LEA registre,oprande registre = registre 16 bits oprande = nom d'tiquette (dplacement 16 bits). L'instruction LEA peut tre remplace par linstruction MOV contenant la directive OFFSET. Exemples: LEA BX,Tableau ou bien MOV BX,OFFSET Tableau LEA BX,Tableau[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

V.1.3 L'instruction XCHG.


Syntaxe: XCHG oprande1,oprande2 oprande1 = registre de donne/case mmoire oprande2 = registre de donne Exemple: XCHG AX,Somme: change des contenus de AX et de Somme V.1.4 Les instructions PUSH et POP. Syntaxe: PUSH Source POP Destination Source = registre ou case mmoire dont le contenu doit tre plac sur la pile Destination = registre ou case mmoire auquel est affecte la valeur retire du sommet de la pile, les lments de la pile tant des mots 16 bits. Source et Destination doivent tre sur 16 bits. Exemple: PUSH SI empile le contenu de SI Remarque: Pour empiler/dpiler le registre d'tat SR, il faut utiliser les instructions PUSHF et POPF (F pour Flags).

V.2 Les instructions arithmtiques. V.2.1 Les instructions d'addition ADD et ADC.
Syntaxe: ADD Destination,Source ADC Destination,Source Destination = registre/case mmoire. Source = valeur immdiate/ registre/case mmoire condition que Destination ne soit pas une case mmoire. Fonction: ADD fait Destination:= Destination + Source ADC fait Destination:= Destination + Source + Carry Exemple:

Jlassi Khaled

ADD AX,BX ADD CX,250 ADD Cumul,AX ADD AX,Tab[SI] ADD AX,0F00H ADC DX,0

;AX reoit AX + BX ;CX reoit CX + 250 ;Cumul reoit Cumul + AX ;AX reoit AX + Tab[SI] ;ces 2 instructions additionnent la ;valeur immdiate 0F00H la paire de registres DX:AX (32 bits).

V.2.2 Les instructions de soustraction SUB et SBB.


Syntaxe: SUB Destination,Source SBB Destination,Source Destination = registre/case mmoire Source = valeur immdiate/ registre/case mmoire condition que Destination ne soit pas une case mmoire. Fonction: SUB fait Destination:= Destination - Source SBB fait Destination:= Destination - Source Borrow Borrow prend la valeur de Carry (retenue). Exemple: SUB AX,DX SBB SI,100 ;AX reoit AX-DX ;SI reoit SI-100 - Carry

IV.2.3 Les instructions d'incrmentation et dcrmentation: INC et DEC.


Syntaxe: INC Oprande DEC Oprande Oprande = registre/case mmoire Fonction: INC fait +1 sur l'oprande DEC fait -1 sur l'oprande Exemples:

Jlassi Khaled

INC AX DEC CX DEC WORD PTR Valeur

; AX:= AX + 1 ; CX:= CX - 1 ; Valeur:= Valeur - 1

V.2.4 Les instructions de multiplication: MUL et IMUL.


Syntaxe: MUL Oprande IMUL Oprande Oprande = registre ou case mmoire La deuxime oprande est implicitement dans AL ou AX. Le rsultat sera dans AX pour les multiplications 8 bits x 8bits. Il sera dans la paire DX:AX pour les multiplications 16 bits x 16 bits. Exemples: MUL CL MUL CX ; AX:=AL * CL rsultat sur 16 bits ; DX:AX:= AX * CX; rsultat sur 32 bits

MUL ignore le signe des oprandes. IMUL tient compte du signe des oprandes.

V.2.5 Les instructions de division: DIV et IDIV.


Syntaxe: DIV Oprande IDIV Oprande Oprande = registre / case mmoire Le dividende est dans AX ou dans la paire DX:AX.

Fonction: - division d'oprandes 8 bits: division du contenu de AX par l'oprande (8 bits), le

quotient est dans AL, le reste dans AH - division d'oprandes 16 bits: division du contenu de DX:AX par l'oprande 16 bits, le quotient est dans AX, le reste dans DX. 10 Jlassi Khaled

DIV ignore le signe des oprandes. IDIV tient compte du signe des oprandes. Exemples: DIV BX DIV BL ;DX:AX est divis par BX, le reste est dans DX et le quotient dans AX ;AX est divis par BL, le reste est dans AH, le quotient dans AL.

V.3 Les instructions logiques AND, OR et XOR.


Syntaxe: AND Destination,Source OR Destination,Source XOR Destination,Source Destination = registre/case mmoire Source = registre/valeur immdiate/case mmoire condition que Destination ne soit pas une case mmoire. Exemples: AND AX,0FFF0H OR AL,1 AND AX,Masque ;met 0 les 4 bits de faible poids de AX ;met 1 le bit de faible poids de AL ;fait un ET logique entre le contenu de AX et celui de Masque, rsultat ;dans AX XOR AX,-1 ;fait le complment 1 de AX

V.4 Les instructions de rotation RCL, RCR, ROL, ROR.


Syntaxe: RCL Oprande,Nombre RCR Oprande,Nombre ROL Oprande,Nombre ROR Oprande,Nombre Oprande = registre ou case mmoire Nombre = soit la valeur immdiate, soit la valeur positive contenue dans CL. 11 Jlassi Khaled

Fonctions et exemples: ROL fait la rotation gauche de l'oprande: Si AL = 00110111 alors aprs l'instruction ROL AL,1 AL contiendra la valeur 01101110. ROR fait la rotation droite de l'oprande: Si AL = 00110111 alors aprs l'instruction ROR AL,1 AL contiendra la valeur 10011011. RCL fait la rotation gauche de l'oprande en faisant intervenir le bit Carry dans la rotation (la valeur de Carry est introduite dans le bit LSB de l'oprande et Carry prend la valeur du bit MSB de l'oprande). Si par exemple AL contient la valeur 37h correspondant 00110111, alors aprs l'instruction RCL AL,1 AL contiendra la valeur 01101110 si Carry=0 ou la valeur 01101111 si Carry=1. RCR fait la rotation droite de l'oprande avec le bit Carry: 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.

V.5 Les instructions de comparaison: CMP et TEST.


Syntaxe: CMP Destination,Source TEST Destination,Source Destination = registre / case mmoire Source = registre / case mmoire / valeur Exemples: CMP AL,CL CMP AL,0 TEST AL,AH ; compare AL CL ; compare AL 0 ; 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.

V.6 Les instructions de dcalage: SAL/SAR et SHL/SHR.


Fonction: SAL Dcalage arithmtique gauche SAR Dcalage arithmtique droite SHL Dcalage logique gauche SHR Dcalage logique droite

12

Jlassi Khaled

Syntaxe:

SAL Oprande,Nombre SAR Oprande,Nombre SHL Oprande,Nombre SHR Oprande,Nombre

Oprande = registre / case mmoire Nombre = soit la valeur 1, soit la valeur contenue dans CL. Exemples: Si AL contient la valeur B7H ou 10110111 binaire, alors aprs l'instruction SAL AL,1 AL contiendra la valeur 01101110. Aprs les instructions MOV CL,3 et SAL AL,CL AL contiendra la valeur initiale 10110111 dcale de 3 positions vers la gauche c'est dire la valeur binaire 10111000. SAR fait un dcalage droite de l'oprande considre comme une quantit signe; c'est ainsi que le bit de poids fort remplace les positions dcales vers la droite. Par exemple si AL=10011101 et CL=3 alors aprs l'instruction SAR AL,CL; AL contiendra la valeur 11110011. Si AL contenait la valeur 01110111 la mme instruction donnerait la valeur 00001110 dans AL. SHR et SHL fonctionnent comme SAL et SAR sans extension du signe.

V.7 Les instructions de saut (ou de branchement).


Les instructions de saut (appeles aussi instructions de branchement) servent faire passer l'excution d'un programme d'un emplacement du programme un autre. Il y a plusieurs sortes d'instructions de saut et 3 distances de saut diffrentes. Un saut peut tre : - court (SHORT), rapproch (NEAR) ou loign (FAR). - direct ou indirect. - inconditionnel ou conditionnel. Petit saut (SHORT jump) : Une destination de saut sera de ce type si le saut ne dpasse pas 127 octets en avant ou 128 octets en arrire (par rapport cette instruction de saut) dans le segment de code (adresse de saut code sur 8 bits).

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

automatiquement l'excution l'adresse de saut indique. Saut conditionnel: Une instruction de saut conditionnel transfre l'excution l'adresse de saut selon la valeur des indicateurs: overflow, carry, sign, zero, parity. Si l'indicateur concern n'est pas positionn, l'excution continue l'instruction qui suit l'instruction de saut.

V.7.1 Les instructions de saut inconditionnel.


L'instruction de base est JMP. Exemple: JMP Cas1 JMP [BX] ;saut direct ;saut indirect l'adresse contenue dans BX

V.7.2 Les instructions de saut conditionnel.


Ces instructions sont rparties en 3 groupes: saut sur valeur de flag, saut sur test arithmtique signe, saut sur test arithmtique non signe. V.7.2.1 Les instructions de saut testant un flag. JC / JNC JS / JNS JO / JNO Jump if Carry / not Carry Jump if Sign/ not Sign Jump if Overflow / not Overflow

14

Jlassi Khaled

JP / JNP JZ / JNZ

Jump if Parity / not Parity Jump if Zero / not Zero

V.7.2.2 Les instructions de saut sur test arithmtique sign. JE JNE JG JGE JL JLE Jump if Equal Jump if Not Equal Jump if Greater Jump if Greater or Equal Jump if Less Jump if Less or Equal

V.7.2.3 Les instructions de saut sur test arithmtique non sign. JA JAE JB JBE Jump if Above Jump if Above or Equal Jump if Below Jump if Below or Equal

V.8 Les instructions de boucle: LOOP, LOOPE et LOOPNE.


Ces instructions permettent de programmer les structures itratives: do { instructions } While (condition), While (condition) {instructions},... Elles utilisent le registre CX comme dcompteur. Aussi il est recommand de ne pas modifier CX l'intrieur de la boucle. Ce registre CX doit tre initialis une valeur positive avant l'entre dans la boucle. Syntaxe: LOOP LOOPE LOOPNE etiquette etiquette etiquette

LOOP dcrmente le contenu de CX et le compare 0; si CX est encore positif, il y a branchement tiquette. LOOPE dcrmente le contenu de CX et le compare 15 Jlassi Khaled

0; si CX est encore positif et le flag Z est 1, il y a branchement tiquette. LOOPNE dcrmente le contenu de CX et le compare 0; si CX est encore positif et le flag Z est 0, il y a branchement tiquette.

Exemples 1:
_sommation proc near MOV CX,100 Boucle: ADD MOV AX,CX AX,0

LOOP Boucle _sommation endp

Ce petit exemple permet de faire la sommation des lments de 0 100 en utilisant linstruction LOOP. Lquivalent de cette procdure en langage C serait :
int near sommation(void) { int x=0; _CX=100; do { x=x+_CX; _CX=_CX-1; } while (_CX!=0); return(x); }

V.9 Les instructions sur chanes d'octets.


16 Jlassi Khaled

Ce sont les instructions: MOVS (ou MOVSB, MOVSW), CMPS SCAS, LODS et STOS

V.9.1 MOVS (Move String).


Syntaxe: MOVS chane-destination,chane-source Fonction: transfre un octet ou un mot de la chane-source (adresse par SI) vers la chane-destination (adresse par DI) et met jour SI et DI pour que ces registres pointent vers llment suivant de leurs chanes respectives. Quand MOVS est utilise avec REP, elle permet le transfert d'une zone mmoire vers une autre zone mmoire.

V.9.2 MOVSB et MOVSW.


Syntaxe: MOVSB MOVSW Fonction: Ces instructions ont la mme fonction que MOVS. Elles ont l'avantage de spcifier l'unit de transfert: octet ou mot (16 bits). Une autre diffrence par rapport MOVS est que MOVSB et MOVSW n'ont pas d'arguments: la chane source est adresse par SI et la chane destination par DI. Ces instructions supposent que la chane source est adresse relativement DS et celle de destination est adresse relativement ES. Nous donnons ci-dessous un exemple qui permet dexpliquer un peu mieux le fonctionnement de ces instructions. Dans cet exemple le programme permet de faire le transfert des lments du tableau doctets initial_1 vers le tableau du mme type table_1. Ce programme fait galement le transfert des lments du tableau de mots initial_2 vers le tableau du mme type table_2.
.model small .data table_1 table_2 db 5 dup(?) 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 cld mov si,offset initial_1 mov di,offset table_1 rep movsb mov cx,4 ; 5 lment transferer ; transfert dans le sens croissant ; adresse du tableau source dans SI ; adresse du tableau destination dans DI ; transfert des lments de initial_1 vers table_1 ; nombre dlments transferer ; adresse du tableau source dans SI ; adresse du tableau destination dans DI ; transfert des lments de initial_2 vers table_2

mov si,offset initial_2 mov di,offset table_2 rep movsw mov int ax,4c00h 21h

; Fin du programme et retour au systme dexploitation

programme endp end programme

V.9.3 Linstruction CMPS.


Syntaxe: CMPS chane-destination,chane-source Fonction: CMPS (Compare String) soustrait l'octet ou le mot de la chane-destination (adresse par ES:DI) de l'octet ou du mot de la chane-source (adresse par DS:SI). Les indicateurs sont positionns en fonction du rsultat de la soustraction. Les oprandes restent inchanges. SI et DI sont mis jour pour pointer vers l'lment 18 Jlassi Khaled

suivant de leur chane respective. Par exemple, si un JG (branchement si suprieur) est utilis aprs CMPS, le branchement a lieu si l'lment de destination est plus grand que l'lment source. Si CMPS est prfixe par REPE ou REPZ, l'instruction est interprte comme : "Tantque non fin_de_chane ET lments de chane gaux Faire comparaison". La fin de chane est dtecte quand CX = 0. Si CMPS est prfixe par REPNE ou REPNZ, l'instruction est interprte comme : " Tantque non fin_de_chane ET lments de chane diffrents Faire comparaison " .

V.9.4 Linstruction SCAS.


Syntaxe: SCAS chaine-destination Fonction: SCAS (Scan String) soustrait l'lment de la chaine-destination (octet ou mot) adress par DI du contenu de AL (s'il s'agit d'une chane d'octets) ou du contenu de AX (s'il s'agit d'une chane de mots) puis met jour les indicateurs en fonction du rsultat de cette soustraction. La chane-destination n'est pas modifie de mme que le registre AX. De plus SCAS met jour DI pour qu'il pointe vers l'lment suivant de chane-destination. Si SCAS est prfixe par REPE ou REPZ, l'instruction est interprte comme: "Tantque non fin_de_chane ET lment de chane=valeur du registre (ZF=1) Faire SCAS". Si SCAS est prfixe par REPNE ou REPNZ, l'instruction est interprte comme: "Tant que non fin_de_chane ET lment de chane=valeur du registre (ZF=0) Faire SCAS ".

V.9.5 Linstruction LODSB ou LODSW.


Syntaxe: LODS chane-source Fonction: LODS (Load String) transfre l'lment de chane (octet ou mot) adress par SI vers AL (LODSB) ou vers AX (LODSW); puis met jour SI pour qu'il pointe vers l'lment prochain de la chane.

V.9.6 Linstruction STOSB ou STOSW.


Syntaxe: STOS chane-destination Fonction: STOS (Store String) transfre un octet ou un mot contenu dans AL (STOSB) ou dans AX (STOSW) vers la chane-destination puis met jour DI pour qu'il pointe vers l'lment suivant de la chane-destination.

VI. Notion de procdure.


La notion de procdure en assembleur correspond celle de fonction en langage 19 Jlassi Khaled

C, ou de sous-programme dans d'autres langages. Dans lexemple ci dessous, la procdure est nomme calcul. Aprs l'instruction B, le processeur passe l'instruction C de la procdure, puis continue jusqu' rencontrer RET et revient l'instruction D. Une procdure est une suite d'instructions effectuant une action prcise, qui sont regroupes par commodit et pour viter d'avoir les crire plusieurs reprises dans le programme. Les procdures sont repres par l'adresse de leur premire instruction, laquelle on associe une tiquette en assembleur.

Calcul Instruction A Instruction B Call Calcul RET Instruction C

Instruction D

Figure 3.3 Appel d'une procdure.

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.

Figure 3.4 Plusieurs appels de procdures imbriqus. L'instruction CALL effectue donc les oprations : - Empiler la valeur de IP. A ce moment, IP pointe sur l'instruction qui suit le CALL.
- Placer dans IP l'adresse de la premire instruction de la procdure (donne en argument).

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 ; procedure nommee Calcul

; instructions

RET Calcul ENDP

; derniere instruction ; 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

et son appel, par exemple pour ajouter 6 la variable var :


MOV AX, 6 MOV BX, var CALL SOMME MOV var, AX

VI.2.2 Passage de paramtres par piles. Exemple avec passage par la pile : Cette technique met oeuvre un nouveau registre, BP (Base Pointer), qui permet de lire des valeurs sur la pile sans les dpiler ni modifier SP. Le registre BP permet un mode d'adressage indirect spcial, de la forme : MOV AX, [BP+6] Cette instruction charge le contenu du mot mmoire d'adresse BP+6 dans AX. Ainsi, on lira le sommet de la pile avec : MOV BP, SP
MOV AX, [BP]

; BP pointe sur le sommet


; lit sans depiler

22

Jlassi Khaled

et le mot suivant avec : MOV AX, [BP+2] ; 2 car 2 octets par mot de pile. L'appel de la procdure ''SOMME2'' avec passage par la pile est : PUSH 6 PUSH var CALL SOMME2 La procdure SOMME2 va lire la pile pour obtenir la valeur des paramtres. Pour cela, il faut bien comprendre quel est le contenu de la pile aprs le CALL :
SP IP (adresse de retour) SP+2 var (premier paramtre) SP+4 6 (deuxime paramtre)

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] ADD AX, [BP+4] RET SOMME2 ENDP ; AX <- arg1 + arg2 ; adresse sommet pile ; charge argument 1 ; ajoute argument 2

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 :

SOMME2 PROC NEAR

; AX <- arg1 + arg2

23

Jlassi Khaled

PUSH BP MOV BP, SP MOV AX, [BP+4] ADD AX, [BP+6] POP BP RET SOMME2 ENDP

; sauvegarde BP ; adresse sommet pile ; charge argument 1 ; ajoute argument 2 ; restaure ancien BP

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 :

est alors cr.

Considrons le programme en langage C

/* Programme EXEMPLE_1.c en langage C */

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' ; ; ; ASSUME cs:_TEXT near void main(void) {

_main PROC PUSH MOV SUB ; ; ; MOV ; ; ; MOV ; ; int Res; bp bp,sp sp, 4

char X = 11;

byte ptr [bp-1], 11

char C = 'A';

byte ptr [bp-2], 65

25

Jlassi Khaled

; ; CMP JGE ; ; ; MOV JMP @1@86: ; ; ; ; MOV

if (X < 0)

byte ptr [bp-1], 0 @1@86

Res = -1;

word ptr [bp-4], 65535 @1@114

else Res = 1;

word ptr [bp-4], 1

@1@114: ; ; } ; MOV POP RET _main ENDP _TEXT ENDS END sp,bp bp

Remarquons les points suivants : 1. La fonction main() est considre ce stade comme une procdure ordinaire (PROC near). C'est plus tard, lors de la phase d'dition de lien, qu'il sera indiqu que la fonction main()

26

Jlassi Khaled

correspond au point d'entre du programme (premire instruction excuter). La fonction est termine par l'instruction RET.
2. On n'utilise pas ici de segment de donnes : toutes les variables sont alloues sur la pile. 3. L'allocation des variables sur la pile s'effectue simplement en soustrayant au pointeur SP le nombre d'octets que l'on va utiliser (ici 4, car 2 variables X et C d'un octet, plus une variable Res de 2 octets).

4. La ligne X = 11 est traduite par :


MOV byte ptr [bp-1], 11

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); }

La traduction en assembleur de ce programme (effectue par Turbo C) donne le programme suivant :


_TEXT SEGMENT byte public 'CODE' ; ; int ma_fonction( int x, int y ) { ASSUME cs:_TEXT _ma_fonction PROC near PUSH bp MOV bp,sp

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

En tudiant cet exemple, on constate que : 1. la fonction C ma_fonction() a t traduite par une procdure assembleur nomme _ma_fonction, qui lit ses arguments sur la pile l'aide de la technique que nous avons vue plus haut. 2. la fonction ne modifie pas l'tat de la pile;
3. Avant l'appel de la fonction (CALL ), les arguments sont empils (PUSH). Aprs le retour de la fonction, le pointeur SP est incrment pour remettre la pile dans son tat prcdent (ADD sp, 4 est quivalent deux instructions POP 2 octets). 4. La valeur retourne par la fonction est passe dans AX (d'o l'instruction MOV [bp6], ax).

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

VII. Les exceptions & Interruptions. VII.1 Introduction. Nous tudions dans cette partie les interruptions matrielles (ou externes), c'est dire dclenches par le matriel (hardware) extrieur au processeur. Les interruptions permettent au matriel de communiquer avec le processeur. On peut distinguer deux sortes d'interruptions. Les interruptions matrielles et les interruptions logicielles. Les interruptions internes, dues lexcution du programme (division par zro, dpassement de capacit d'un registre, tentative d'accs une zone mmoire protge, ..) sont considres comme interruptions logicielles. Ces interruptions sont souvent appeles exceptions. Les interruptions ainsi que les exceptions sont toutes traites de la mme faon. La diffrence vient surtout de la source denclenchement de linterruption. En effet les interruptions matrielles et les exceptions peuvent se produire n'importe quand, tandis que les interruptions logicielles se produisent un endroit prcis du code o se trouve une des instructions int ou into ou trap (a dpend du microprocesseur). De plus, les interruptions matrielles peuvent tre masques (interdites ou autorises) l'aide de l'indicateur IF (Registre dtat). Une interruption externe est signale au processeur par un signal lectrique sur une des ses pattes prvues pour ceci. Lors de la rception de ce signal, le processeur ''traite'' l'interruption ds la fin de l'instruction en cour dexcution. Ce traitement consiste excuter un programme qui est appel automatiquement lorsque linterruption survient. L'adresse de dbut du programme doit tre pralablement stocke dans une table dite des vecteurs d'interruptions. Lorsque la routine dinterruption est excute une instruction IRET permet au processeur de reprendre l'excution l'endroit o il avait t interrompu. Il est aussi possible d'ignorer lvnement et passer normalement l'instruction suivante dans le cas des interruptions masquables. Il est en effet parfois ncessaire de pouvoir ignorer les interruptions pendant un certain temps, pour effectuer des traitements plus urgents. Lorsque le traitement est termin, le processeur dmasque les interruptions et les prend alors en compte. La procdure dinterruption est donc une tache spciale associe un vnement externe ou interne. VII.2 Les interruptions matrielles. VII.2.1 Cas des processeurs de la famille INTEL.

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).

Figure 3.5 Le contrleur dinterruption PIC 8259A.

Figure 3.6 Schma interne du PIC 8259.


Le 8259A peut accepter les interruptions de 8 sources externes, et on peut grer jusqu' 64 sources diffrentes en cascadant plusieurs 8259A. Il gre la priorit entre les interruptions simultanes, interrompt le processeur et lui passe un code pour identifier la source d'interruption. Une source d'interruption est connecte chacune des 8 entres IR0 IR7. Selon sa priorit, et s'il n'y a pas d'autre interruption en cour, le PIC dcide s'il peut transmettre l'interruption au CPU. Si oui, il affirme la ligne INT, qui est connecte l'entre INTR (Interrupt Request) du CPU. Si le CPU est prt 30 Jlassi Khaled

accepter l'interruption, il rpond au PIC via la ligne INTA (Interrupt Acknowledge). Le PIC rpond son tour en envoyant le numro d'interruption sur les lignes D0 D7. Ce numro est un index dans la table des vecteurs d'interruption. Le CPU est maintenant prt appeler le sous-programme de traitement d'interruption appropri. Quand le sous-programme de traitement d'interruption a termin son excution, il en avertit le PIC pour qu'il puisse permettre d'autres interruptions d'atteindre le CPU. Les interruptions matrielles servent une gestion efficace des priphriques d'entre/sortie. Dans un ordinateur moderne, il y a continuellement des interruptions matrielles. Le temporisateur, l'horloge temps rel, les touches du clavier, les mouvements et les clics de la souris, le modem, l'imprimante, les disques durs et souples, le CDRom, sont tous des sources d'interruptions. Les circuits contrleurs de priphriques contiennent plusieurs registres d'interface avec le CPU. Il ya habituellement un registre de contrle, un registre d'tat, et un ou plusieurs registres de donnes. Pour connatre l'tat d'un priphrique, le CPU peut interroger le registre d'tat. L'approche des drapeaux (flags) consiste interroger de faon rptitive le registre d'tat, pour savoir o le priphrique est rendu dans le transfert des donnes. A-t-il reu une nouvelle donne ? A-t-il termin la transmission de la dernire donne envoye ? etc. Cette approche consomme trop de temps de la part du processeur. L'approche interruption est beaucoup plus performante. Le priphrique envoie une interruption matrielle au processeur quand il a quelque chose signaler. Le processeur interrompt alors la tche en cour, enregistre en mmoire l'tat de la machine, et vient interroger le registre d'tat du priphrique, pour connatre la cause de l'interruption. Il effectue ensuite le traitement appropri et limine la source de l'interruption Ce traitement consiste, par exemple, lire la donne reue dans le registre de rception et l'inscrire en mmoire, ou lire en mmoire la prochaine donne transmettre et l'inscrire dans le registre de transmission du priphrique. Le processeur retourne ensuite la tche interrompue aprs avoir restaur l'tat de la machine qu'il avait enregistr au moment de l'interruption. Le sous-programme de traitement a donc 4 tches excuter : -Sauvegarder l'tat de la machine en empilant les registres susceptibles d'tre modifis dans le sous-programme de traitement d'interruption (ISR). Ceci inclut EFLAGS (registre dtat);

31

Jlassi Khaled

-Interroger le registre d'tat d u priphrique pour savoir quelle opration effectuer ; -liminer la source de l'interruption en effectuant l'opration d'entre-sortie ; -Restaurer l'tat de la machine et retourner la tche interrompue en dpilant les registres empils. VII.2.2 PIC dans le cas du PC.

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.

Figure 3.7 Cascade de deux contrleurs dinterruptions PIC 8259. Depuis le premier 8088 qui a quip les PC, les interruptions sont normalises pour les priphriques standard. La dernire composante d'un systme microprocesseur est l'accs direct la mmoire, le DMA (Direct Memory Access). Cette fonction permet de demander au processeur de se dconnecter des bus de donnes, adresse et contrle pendant qu'un priphrique prend le contrle de la mmoire. L'arrive du pseudo Plug & Play de Windows 95/98 et Win2000 coupl avec le plug & Play du Bios facilite dans certains cas le paramtrage des interruptions, mais il est parfois ncessaire de reprendre les configurations manuellement lorsque le nombre de priphriques augmente. Un priphrique est donc dtermin de manire hardware par une plage d'adresses (parfois une seule adresse), une interruption et ventuellement un canal DMA. Le 8088-8086 utilisait un 8259 d'INTEL, avec 8 niveaux d'interruptions notes de IRQ0 IRQ7. Le 80286 jusqu'aux 486 utilisaient 2 contrleurs 8259 chans ce qui permet davoir 16 sources dinterruptions. Ils sont nots de IRQ0 IRQ15, mais avec l'IRQ9 rserve pour le chanage. Depuis les Pentium (et un nouveau circuit gestionnaire d'interruptions), cette IRQ9 est accessible aux priphriques, mais ceci explique que peu de priphriques ne se branchent par dfaut sur ce niveau d'interruption. L'interruption non masquable (NMI) est galement utilise pour des erreurs de parit ou erreurs de connecteurs entres / sorties. Le tableau ci-dessous reprend l'ensemble des adresses et interruptions normalises du PC, mlanges avec les interruptions utilises par dfaut
32 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 Horloge systme Clavier Contrleur d'IRQ programma Com 2 Com 4 Com 1 Com 3 Libre

IRQ 0 1 2 3

Adresse

Commentaires Ne peut tre modifi Ne peut-tre modifi Ne peut tre modifi

2F8-2FF 2E8 - 2EF

Modifiable avec prudence

3F8-3FF 3E8-3EF

Modifiable avec prudence Gnralement utilis par la carte son, galement LPT2 en 278 Modifiable avec prudence

5 6 378 37A 7 (pour les produits de

Contrleur lecteur de disquet

LPT 1

LPT 2

Modifiable avec prudence. On peut mettre LPT1 et LPT2 sur la mme interruption, mais pas d'impressions simultanes

33

Jlassi Khaled

marque) 278 27A Horloge: date et heure 8 Pas modifiable Libre en Pentium et suivant, utilis en parallle avec IRQ2 dans les 486. Souvent utilis par les cartes sons Libre Libre Libre Ne peut tre modifi Libre, gnralement IDE 1 Libre, gnralement IDE 2

10 (A) 11 (B) 12 (C) Coprocesseur mathmatique13 (D) 14 (E) 15 (F)

Tableau 2. Ensemble des interruptions normalises du PC dexploitation Windows NT, 2000 et XP sont des systmes d'exploitation pleinement

protgs, les application: en mode utilisateur ne peuvent accder au matriel directement et doivent passer par un pilote de priphrique fonctionnant en mode noyau. C'est la couche HAL (HardwareAbstraction Layer) de NT qui gre les interruptions. La ralisation de tels pilotes de priphriques dpasse toutefois le cadre de ce cours. Cependant, les VDD (Virtual Device Drivers) mulent les applications 16 bits de MS-DOS. Ils pigent ce que l'application MS-DOS croit tre des rfrences des ports d'entre-sortie et les traduisent en fonctions natives d'entre-sortie Win32. L'application intitule Invite de commande ou, en anglais, DOS prompt, est un tel VDD. On peut y excuter la plupart des programmes crits pour MS-DOS, y compris certains qui utilisent des interruptions matrielles. C'est le cas des exemples qui suivent que vous pouvez compiler avec un assembleur tel que A86, MASM ou TASM. En mode protg, le processeur va plutt lire la table des descripteurs d'interruption IDT (Interrupt Descriptor Table). L'adresse de cette table est contenue dans le registre IDTR. Elle contient des descripteurs de 64 bits pour les sous-programmes de traitement d'interruption. Ces descripteurs sont appels Trap Gates dans le cas d'interruptions logicielles. La procdure qui veut utiliser ces instructions doit avoir un niveau de privilge lui permettant d'accder au descripteur d'interruption de la table IDT pour le numro de trappe en question.
34 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

Figure 3.8 Principe dexcution des interruptions

Exemple 1 : Interruption logicielle pour crire une chane l'cran :

mov ah,09 mov dx, offset string int 33

o on a dfini la chane de caractres string comme suit : string db 'Toto':$'

Exemple 2: Interruption logicielle pour la lecture de l'horloge systme.

L'horloge systme interrompt le processeur 18,2 fois par seconde si l'indicateur d'interruption IF est 1 (interruption matrielle 08). Chaque fois, le compteur de 32 bits situ aux adresses 0040:006C et 0040:006E est incrment de 1. Pour lire ce compteur, on peut utiliser l'interruption logicielle int 0x1A (26).

mov ah, 0
int 26

; mode lecture de l'horloge


; appel l'interruption d'horloge de MS-DOS

Aprs l'instruction int 26,


cx = TIMER-HIGH = mot de poids fort du compteur dx = TIMER-LOW = mot de poids faible du compteur 36 Jlassi Khaled

Si al = 0, on n'a pas dpass 24h depuis la dernire lecture Si al > 0, on a dpass 24h depuis la dernire lecture.

Exemple 3: Interruption logicielle pour lcriture dun programme rsident et dviation de l'interruption d'horloge temps rel. Voici un exemple d'un programme rsident qui utilise l'horloge temps rel et met un bip chaque 10 sec. La procdure de traitement de l'interruption 8 est dvie pour excuter notre sous-programme, puis continue avec l'ancienne procdure. Cette technique s'appelle un hook.
start segment org 100h main: jmp short install oldint8 dd ? counter dw 182 newint8 proc dec cs:counter jnz done mov cs:counter,182 mov ah, 0Eh 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 mov al, 08h int 21 h mov word ptr oldint8, bx ; enregistrer dans espace prvu ; charger CS:IP pour interruption 08 ; IP va dans BX et CS dans ES ; continuer dans l'ancien vecteur ; espace pour ancien vecteur ; 182 * 54,94 ms = 10 sec. ; nouvellSR pour interruption 8 ; dcrmenter compteur ; on ne fait rien tant que count > 0 ; rinitialiser compteur ; mettre un bip

37

Jlassi Khaled

mov word ptr oldint8+2, es mov dx, offset newint8 mov ah, 25h mov al, 08h int 21h ; ou lea dx, newint8 ; dfinir CS:IP pour nouvelle ; interruption 8 ; DX = IP, DS = CS par dfaut

mov dx, (offset install -offset start) ; taille du progr. rsident add dx, 15 shr dx, 4 mov ah,31h int 21 h install endp start ends end main ; arrondir multiple de 16 ; division par 16 ; rendre rsident

VIII. Le compilateur assembleur. Le compilateur assembleur traduit les programmes sources crits en assembleur en leur quivalent binaire (le code machine). Cette opration ncessite plusieurs tapes, et il faut utiliser les services d'un lieur (linker) ou diteur de liens (LINK.EXE, TLINK.EXE). Lditeur de liens transforme le code gnr par rassembleur en code excutable (fichier d'extension EXE). Il peut aussi raliser d'autres tches qui ne nous intresseront pas ici. Mais il se trouve que DOS connat une deuxime forme de programme excutable. Quoiqu'un peu ancienne, elle convient merveille au langage machine. Il s'agit des fichiers COM. Pour obtenir des programmes COM, il faut disposer d'un utilitaire appel EXE2BIN.EXE (sauf pour TASM). Prcisons bien qu'EXE2BIN ne constitue pas une partie de rassembleur : il s'agit d'un utilitaire appartenant au systme d'exploitation. Le programme systme DEBUG peut aussi traduire du code crit en assembleur et il est mme capable de l'excuter. Au point de vue confort d'utilisation, DEBUG est tout--fait limite. Par ailleurs DEBUG ne respecte pas intgralement les conventions mnmoniques des processeurs d'Intel (les mnmoniques sont les instructions en assembleur}. Nous allons donner un petit exemple de programmation avec DEBUG.

38

Jlassi Khaled

Un petit programme ralis avec DEBUG : Dclenchez le programme DEBUG en tapant au niveau du systme d'exploitation DEBUG.
Un tiret apparat l'cran pour vous inviter saisir des instructions. Tapez alors les lignes qui figurent ci-dessous. Chaque ligne doit se terminer par Enter. Observez bien le rsultat l'cran. Pour le moment, il n'est pas important de comprendre le sens des instructions. Notre but est simplement de montrer la diffrence entre DEBUG et un assembleur normal.
C:\DOS>debug -a 24A2 : 0100 ORG 200 24A2 : 0200 DB "Bien le bonjour de la part de DEBUG!$" 24A2 : 0225 ORG 100 24A2 : 0100 MOV AH,09 24A2 : 0102 MOV DX,200 24A2 : 0105 INT 21 24A2 : 0107 MOV AX,4C00 24A2 : 010A INT 21 24A2 : 010C [Return] -g

Voici en contrepartie le mme programme crit pour MASM/TASM :


DOSSEG .MODEL SMALL .STACK 50 .DATA LIGNE DB "Bien le bonjour de la part de MASM/TASM!$" .CODE MOV AX,@DATA

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

disponibles suffirait remplir quelques dizaines de pages. Leur nombre tant maintenant de loin suprieur celui des instructions machine, mais la pratique quotidienne ne ncessite qu'un petit noyau de directives. Dans les paragraphes suivants. Nous allons passer en revue les directives les plus 'couramment utilises. VIII.1.1 Directives de slection du processeur. En fonctionnement de base, les assembleurs MASM et TASM sont prvus pour traduire du code destin aux microprocesseurs 8088 et 8086 et au coprocesseur arithmtique associ. Lorsqu'un systme abrite un processeur Intel plus volu, de la classe x86, il peut tre intressant d'adapter le code pour en exploiter les perfectionnements. II faut alors demander l'assembleur de mettre en service les instructions spciales tendues. En pratique on insre dans le programme source une directive qui se compose d'un point et de la dsignation abrge du microprocesseur. Plus prcisment, les directives suivantes sont la disposition du programmeur : .8086 : Active le jeu d'instructions du 8086 et 8088 et du coprocesseur 8087. C'est le paramtrage par dfaut en l'absence de toute directive explicite de slection du processeur. .186 : Active le jeu des instructions du 80188 et 80186, y compris celles du coprocesseur 8087. .286 : Active le jeu d'instructions du 80286 en mode rel, y compris les instructions du coprocesseur 80287. .386 : Active le jeu des instructions du 80386 en mode rel, y compris les instructions du coprocesseur 80387. .8087, .287, .387 : Activent uniquement le jeu d'instructions du coprocesseur arithmtique dsign sans se proccuper du processeur. Les instructions en mode protg prvues pour le 80286 et 80386 et 80486 ne deviennent accessibles que si on accole la lettre "P" la directive de slection du processeur concern (.286P, .386P, .486P). Toutes ces directives peuvent tre utilises dans n'importe quel module source. Chacune d'elles annule la prcdente en vigueur.

41

Jlassi Khaled

VIII.1.2 Directives de slection du modle mmoire. .Model SMALL: Ensemble le segment de code et le segment de donnes ne doivent pas dpasser 64 Ko mais ils ne commencent pas forcment la mme adresse. Toutes les adresses du programme sont de type court (NEAR). .Model MEDIUM: La zone rserve aux donnes peut aller jusqu' 64 Ko. Le code, c'est--dire le programme proprement dit, peut occuper de 0 640 Ko. Ne convient qu'aux programmes .EXE. L'accs aux donnes est ralis par des adresses courtes (NEAR) tandis que le code contient des appels longs (FAR). .Model COMPACT : C'est un peu l'inverse du modle MEDIUM. Le code doit tenir dans 64 Ko. Mais la zone de donnes peut s'tendre de 0 640 Ko. Ne convient qu'aux programmes .EXE. L'accs au code est effectu par des appels courts (NEAR) tandis que les adresses des donnes sont systmatiquement de type long (FAR). .Model LARGE : Le code et les donnes peuvent occuper de 0 640 Ko. Ne convient qu'aux programmes .EXE. L'accs aux donnes et au code est uniquement assur par des appels ou des adresses de type long (FAR). .Model HUGE : Interprt de la mme faon que LARGE. .Model FLAT : Ce modle mmoire est utilis dans le cas dune programmation 32 bits. Cest le modle mmoire utilis par Windows. Pour les programmes en assembleur vocation autonome, il est plus simple de choisir le modle SMALL. Le code gnr est alors rapide et efficace. Il faut dire qu'un programme crit en assembleur dpasse rarement 64 Ko. Mais il ne suffit pas de dfinir le modle mmoire souhait, les donnes et le code doivent tre rangs sous des directives .DATA et .CODE. Les assembleurs connaissent ce sujet quelques variantes que nous allons voquer brivement. Le segment .DATA ? est prvu pour hberger des donnes non initialises du type court (adresses sous forme d'offsets). En temps normal, ce segment ne sert que si le module en assembleur est destin tre inclus dans un programme de haut niveau. Dans ce cas il sera rempli par des dclarations du type DB (?) et DUP (?). Le segment .FARDATA est prvu pour recevoir des donnes initialises accessibles par des adresses de type long (segment:offset). Normalement ce segment n'est utile que si le module en assembleur doit tre inclus par la suite dans un programme de haut niveau. Le segment .FARDATA ? est prvu 42 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

-Dclaration de variables non initialises

.DATA ? Mot dw ? Octets db 8 dup(?) LENGTH equ 20 dix equ 10 ; mot de 16 bits ; tableau de 8 octets ; dfinition dune constante ; dfinition dune constante

VIII.1.3 Directives de dcision.

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

Le code gnr est le suivant (en gras):


.IF cx == 20 0017 83 F9 14 cmp cx, 014h 001A 75 05 jne @C0001 001C BA 0014 mov dx, 20 .ELSE 001F EB 03 jmp @C0003 0021 @C0001: 0021 BA 001E mov dx, 30 .ENDIF 0024 @C0003:

VIII.1.4 Directives de programmation structure.

Les directives suivantes permettent de structurer le programme et de le rendre lisible et simple comprendre. .WHILE ... .ENDW .REPEAT ... .UNTIL
.REPEAT ... .UNTILCXZ

.BREAK Exemple :
.DATA buf1 BYTE "This is a string",'$'

44

Jlassi Khaled

buf2 BYTE 100 DUP (?) .CODE sub bx, bx .WHILE (buf1[bx] != '$') mov al, buf1[bx] mov buf2[bx], al inc bx .ENDW

; mise zero de bx ; Lire un caractre ; le placer dans buf2 ; incrementation de bx

VIII.1.5 Directives de dclaration de procdures. Nous ne pouvons pas donner dans le cadre de ce cours toutes les directives de dclarations de procdures. Leur nombre est assez lev et leurs explications ncessitent une dizaine de pages. Toutefois nous donnons quelques exemples utilisant certaines directives afin de montrer leur intrt ainsi que les possibilits quils offrent au programmeur pour mieux structurer son programme et le rendre simple comprendre et lisible. Nous donnons dans un premier exemple une procdure daddition de trois variables arg1, arg2 et arg3. Nous supposons que ces variables sont passes cette procdure en tant que paramtres. Nous avons volontairement utilis dans cette procdure la directive USES qui permet de sauvegarder les registres modifis par la procdure (ici di et si). Le code de la procdure crit en gras est automatiquement gnr par le compilateur. Exemple : addition PROC NEAR C USES di si, arg1:WORD, arg2:WORD, arg3:WORD

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 addition endp

;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

45

Jlassi Khaled

Lappel de cette procdure par le programme principal peut se faire simplement de la manire suivante:

INVOKE addition, 1, 2, 3

Il sagit bien videmment de laddition des 3 nombres 1, 2 et 3. Le rsultat de laddition est renvoy dans le registre AX. VIII.2 Interfaage entre lassembleur et le langage C. Dans cette partie nous allons surtout insister sur lappel de procdures C partir de lassembleur. Le cas inverse ne pose pas de problmes particuliers et a t dj abord dans le paragraphe VI. Dans lexemple suivant nous utilisons certaines directives qui permettent daccder partir de lassembleur aux procdures C. Nous avons pris comme exemple un appel partir de lassembleur de la procdure printf. Rappelons cet gard que le prototype de la procdure printf est le suivant : int Cdecl printf(const char *__format, ...);

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

(LINKER) la librairie C qui contient la procdure concerne. Les librairies du langage C sont CS.lib ou CM.lib ou CL.lib ou CH.lib. Dans le cas dun model mmoire SMALL la librairie est CS.lib. Prenons un Exemple :
Soit le programme suivant prog_asm.asm qui appelle les procdures C suivantes : - int Cdecl printf(const char *__format, ...)

- char pascal LECTURE(void) - void pascal AFFICHAGE (char x)


Les procdures LECTURE et AFFICHAGE sont des procdures utilisateur et la procdure printf et une procdure C.

pile segment stack 'pile' tab db 256dup(?) pile ends donnees segment para public 'donnees' format byte 'le resultat est %d %d',13,0 donnees ends code segment para public 'code' extrn AFFICHAGE:far extrn LECTURE:far ; procdure AFFICHAGE importer ; procdure LECTURE importer

printf proto far C , ; procdure prototyp C importer pstring:far ptr byte ,num1:word, num2:vararg public _main

_main proc near assume cs:code assume ds:donnees assume ss:pile mov ax,donnees mov ds,ax push ds pop es mov bx,offset format

; equivalent en C void main(void)

47

Jlassi Khaled

INVOKE printf, ds::bx,ax,di

; appel de printf avec 4 paramtres ; adresse sur 32 bits ; registres ax et di afficher par printf %i, %i

mov cx,10 boucle: LECTURE call LECTURE push cx

; 10 caractres lire et afficher ; passage du paramtre de la procdure

; procedure de lecture crite en 'C' ; valeur de retour toujours dans AX

push ax call affichage pop cx loop boucle mov ah,4ch int 21h _main endp code ends end _main

; passage du paramtre de la procdure AFFICHAGE ; affichage procdure d'affichge crite en 'C' ; boucle de lecture affichage de 10 caractres

;revenir au SE

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); }

Le programme prog_asm.asm doit tre compil bien videment avec MASM :

c:\masm\bin\ > masm prog_asm.asm


Ceci permettra de gnrer un fichier objet prog_asm.obj. Le programme prog_c.c doit tre compil avec le compilateur C :

48

Jlassi Khaled

c:\ tc\bin\> tcc /c prog_c.c ;


Ceci permettra de gnrer un fichier objet proc_c.obj

La troisime tape consiste invoquer lditeur de liens :


c:\masm\bin\>link c:\tc\lib\C0L.obj prog_asm.obj proc_c.obj

Run File [prog.exe]: List File [NUL.MAP]: Libraries [.LIB]: c:\tc\lib\CH.lib Definitions File [NUL.DEF] :

Le fichier prog.exe est alors gnr et peut tre excut:

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

magntoscopes, les tlphones sans fil, les priphriques informatiques (imprimantes, scanners...), les voitures (airbags, climatisation, ordinateur de bord, alarme...), les avions et vaisseaux spatiaux, les appareils de mesure ou de contrle des processus industriels, ... La force du microcontrleur, qui lui a permis de s'imposer de manire si envahissante en si peu de temps, c'est sa spcialisation, sa trs grande fiabilit et son cot assez faible (pour les modles produits en grande srie, notamment pour l'industrie automobile). L'objectif premier est d'offrir le plus de performances et de services pour un prix minimal de la puce. Or aujourd'hui un coeur de processeur de 16 ou 32 bits reprsente une augmentation de la surface occupe sur le silicium de seulement quelques pour-cent par rapport un circuit en 8 bits. Opter pour un coeur 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. 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

linstruction en cours dexcution. Accumulateur : Ce registre est utilis pour stocker les donnes en cours de traitement par lUAL. Registre dadresses : Il contient toujours ladresse de la prochaine information lire par lUAL, soit la suite de linstruction en cours, soit la prochaine instruction. Registre dinstructions : Il contient linstruction en cours de traitement. Registre dtat : Il sert stocker le contexte du processeur, ce qui veut dire que les diffrents bits de ce registre sont des drapeaux (flags) servant stocker des informations concernant le rsultat de la dernire instruction excute. Pointeurs de pile : Ce type de registre, dont le nombre varie en fonction du type de processeur, contient ladresse du sommet de la pile (ou des piles). Registres gnraux : Ces registres sont disponibles pour les calculs. - Un squenceur, qui permet de synchroniser les diffrents lments du processeur. En particulier, il initialise les registres lors du dmarrage de la machine et il gre les interruptions. - Une horloge qui synchronise toutes les actions de lunit centrale. Elle est prsente dans les processeurs synchrones, et absente des processeurs asynchrones et des processeurs autosynchrones - Une unit dentre-sortie, qui prend en charge la communication avec la mmoire de lordinateur ou la transmission des ordres destins piloter ses processeurs spcialiss, permettant au processeur daccder aux priphriques de lordinateur.

II.2 Structures Actuelles. Les processeurs actuels intgrent des lments plus complexes :
- Plusieurs UAL, ce qui permet de traiter plusieurs instructions en mme temps. L'architecture superscalaire, en particulier, permet de disposer des UAL en parallle, chaque UAL pouvant excuter une instruction indpendamment de l'autre. - L'architecture superpipeline permet de dcouper temporellement les traitements effectuer. Cest une technique qui vient du monde des supercalculateurs.

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.

On peut classer les instructions qu'un microprocesseur ou microcontrleur est capable d'effectuer en quelques groupes. II.3.1 Instructions de transfert. Le microprocesseur ou microcontrleur passe une grande partie de son temps transfrer des octets d'un emplacement vers un autre : d'un priphrique vers un registre interne, d'un registre interne vers la mmoire RAM ou vice-versa, d'un registre interne vers un priphrique ; ce qui ne peut en gnral pas tre fait, c'est un transfert direct d'une case mmoire une autre ou vers un priphrique; Quoique certains instructions de transfert utilisent comme oprande source un emplacement mmoire et comme oprande destination un autre emplacement mmoire. Ceci ne veut pas dire quun transfert direct mmoire-mmoire est possible. En faite linformation source est dabord lue par le processeur, ensuite elle est crite dans lemplacement mmoire de destination. II.3.2 Instructions arithmtiques La majorit des microcontrleurs ne comprennent que les instructions arithmtiques de base! Tout au plus ils sont capables d'effectuer des additions, des soustractions, des multiplications et des divisions sur des nombres binaires de 8 bits ou 16 bits. Toutes les oprations mathmatiques complexes faisant intervenir des puissances, des racines carres, des fonctions
5 Jlassi Khaled

trigonomtriques, logarithmiques et exponentielles doivent tre ramenes une succession d'oprations simples portant seulement sur des octets. Des librairies mathmatiques ont t dveloppes pour la plupart des microcontrleurs populaires pour faire, faire au microcontrleur, des oprations arithmtiques complexes partir des oprations arithmtiques de base (division, multiplication, soustraction, addition). II.3.3 Instructions logiques Les instructions logiques sont considres comme tant les instructions les plus simples faire du point de vue temps de calcul. Les oprations logiques de bases sont: ET, OU, XOU (XOR), NON (inverseur), rotations, dcalages. La majorit des microcontrleurs sont capables deffectuer ces oprations (ET, OU, XOR, NON) sur des bits ce qui nest pas le cas des microprocesseurs qui manipulent des informations multiples doctets (8 bits, 16 bits, 32 bits, 64 bits voire 128 bits). La comparaison de deux octets A et B est considre aussi comme une opration logique. Elle est ralise comme une soustraction dont on nglige le rsultat ; on s'intresse simplement au rsultat de la comparaison (A = B), ou (A > B) ou (A < B). Ces indications sont inscrites dans des indicateurs d'tats (petites mmoires d'1 bit situes dans le registre dtat du processeur). II.3.4 Instructions d'entres/sorties Ces instructions sont utilises pour : - lire l'tat d'un port d'entre (permettant l'interfaage d'interrupteurs, de commutateurs, d'optocoupleurs, de convertisseurs analogiques/numriques, de claviers...) ;
- crire une information dans le registre d'un port de sortie, qui maintient l'information la disposition des circuits extrieurs : leds, moteurs, relais, convertisseurs numriques/analogiques... ; - crire ou lire une information dans les registres d'un port srie.

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

- Les sauts provoquent un branchement conditionnel ou inconditionnel du programme vers une adresse mmoire qui n'est pas contigu l'endroit o l'on se trouve. Lexcution du programme continuera ladresse du saut. - Les branchements provoquent un saut vers un sous programme. Une fois lexcution du sous programme faite le processeur pointe sur linstruction qui est juste aprs linstruction qui a provoqu le branchement vers le sous programme. La grande diffrence par rapport au saut, c'est qu'au moment du branchement il faut mmoriser l'adresse d'o l'on vient, afin de pouvoir y revenir une fois le sousprogramme termin. La mmorisation de ladresse de dpart se fait par lintermdiaire dun registre interne du processeur appel souvent stack pointer ou pile. Les saut et branchements peuvent tre : - inconditionnels ; - conditionnels, cest dire que le branchement n'a lieu que si une certaine condition est remplie ; gnralement le test se fait par rapport lun des bits du registre dtat ; ceux-ci indiquent par exemple si le contenu de l'accumulateur est nul, positif, ngatif, de parit paire ou impaires.

II.3.6 Instructions diverses. On trouve dans ce groupe :


- des instructions de gestion de la pile. La pile est une zone de mmoire RAM gre automatiquement par le microcontrleur pour la sauvegarde des registres ou pour la mmorisation des adresses de retour en cas dun branchement vers un sous programme. - des instructions de contrle du processeur : par exemple passage en mode basse consommation, contrle des priphriques embarqus (cest dire sur la mme puce que le processeur) ; - des instructions permettant de positionner des indicateurs internes du processeur.

II.4 Modes d'adressage pour les donnes. De nombreuses instructions font rfrence des donnes se trouvant diffrents endroits du microcontrleurs : registres internes du processeur, RAM, EEPROM, ports d'E/S,
7 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

particulirement bienvenus lorsqu'il s'agit de dplacer un bloc de donnes dans la mmoire RAM dun emplacement vers un autre. Le premier servira alors pour pointer la zone mmoire source et le second pour pointer la zone mmoire destination.
III. Le choix d'un microcontrleur. Nous n'avons pour l'instant voqu que des gnralits applicables tous les microcontrleurs du march, sans citer de marque prcise. En effet, toute la difficult du choix d'un microcontrleur pour une application donne rside dans la slection du "bon" circuit adapt pour cette application. Le choix du microcontrleur est surtout dict par deux critres principaux : - l'adaptation de son architecture interne aux besoins de l'application (prsence de convertisseurs A/N par exemple ou d'un timer disposant d'un mode particulier, ); - le fait de possder dj ou non un systme de dveloppement. En effet, si l'on ne possde rien, on peut se laisser guider par le premier critre en comparant toutefois les investissements de dveloppement prvoir. Si l'on est dj quip, mieux vaut choisir un circuit un peu moins bien adapt, quitte lui adjoindre des circuits externes, que le circuit qui va bien mais qui impose un changement de systme. Pour simplifier un peu ce deuxime dilemme, les fabricants ont essay de dvelopper non pas des microcontrleurs isols mais des familles de circuits, plus ou moins compatibles entre eux tant au niveau de l'architecture qu'au niveau de la programmation et des outils de dveloppement. Il existe plusieurs familles de microcontrleurs dont les plus connues sont : la famille Atmel AT91 la famille Atmel AVR le C167 de Siemens/Infineon la famille Hitachi H8 la famille Intel 8051, qui ne cesse de grandir ; de plus, certains processeurs rcents utilisent un cur 8051, qui est complt par divers priphriques (ports d'E/S, compteurs/temporisateurs, convertisseurs A/N et N/A, chien de garde, superviseur de tension...) l'Intel 8085, l'origine conu pour tre un microprocesseur, a en pratique souvent t utilis en tant que microcontrleur 9 Jlassi Khaled

le Motorola 68HC11 la famille des PIC de Microchip la famille des ST6 de STMicroelectronics la famille ADuC d'Analog Devices la famille 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. 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 indpendants de mmoire Flash (256 ko et 32 ko), capables de fonctionner simultanment en lecture et en criture, 8 ko de SRAM et plus de 3000 portes de logique programmable avec 16 macrocellules. Le jeu de priphriques intgre une interface USB, deux canaux UART, quatre units PWM 8 bits, quatre canaux ADC 8 bits, une interface matre-esclave IC, un canal d'affichage de donnes, des fonctions de supervision comme l'horloge chien de garde et la dtection de basse tension, et jusqu' 50 broches d'entre/sortie multi-usages. Il est clair que ce modle de microcontrleur 8 bits bas sur larchitecture C51 na rien envier aux modles 16 et 32 bits. Il convient particulirement aux systmes embarqus ncessitant de grandes quantits de stockage de code et/ou de donnes, l'instar des priphriques utiliss sur les lieux de vente : lecteurs de chques et de cartes, imprimantes thermiques, lecteurs de codes-barres et contrleurs de distributeurs automatiques. Autres applications galement bien prises en charge : la scurit des immeubles, les alarmes, le contrle d'accs, le contrle industriel, les applications GPS portables, les tlphones publics et l'instrumentation. Il est bien clair daprs cet 10 Jlassi Khaled

exemple de la famille

PSD3200 base sur larchitecture 8051, que les

microcontrleurs 8 bits ont encore leur lot dapplications et quils continueront concurrencer les microcontrleurs 16 et 32 bits. La famille PSD3200 de St Microelectronics nest quun exemple, en effet plusieurs constructeurs font aujourdhui des microcontrleurs utilisant larchitecture 8051.

IV. La Famille MCS51


La famille MCS-51 est l'une des plus prolifiques parmi celles des microcontrleurs. Ce processeur cr tout au dbut des annes quatre-vingt par la socit INTEL a connu au fil des annes de nombreux descendants. On distingue actuellement de trs nombreuses variantes fournies par six principaux constructeurs (Intel, DallasSemiconductor, Philips/Signetics, Oki, Siemens, Amd, Matra-Harris), sans compter quelques modles peu rpandus, raliss par des fabricants moins connus. Cette famille MCS-51 est la plus vendue (ou la seconde selon les sources) sur le march mondial des microcontrleurs 8 bits non ddis. Le march des microcontrleurs, qui tait le second de l'lectronique, est maintenant le premier devant celui des mmoires, loin devant celui des microprocesseurs (source Electronic World News). Les circuits MCS-51 sont fabriqus selon les deux technologies MOS (NMOS et CMOS) et plusieurs de leurs variantes. Alors que le composant NMOS classique consomme environ de 100 mA 300 mA (selon la variante) sous une tension de 5V, certains types en technologie CMOS peuvent se contenter de 1,8V sous 2,5 mA (on trouve ces modles dans les cartes puce et les tlphones auto aliments). Le microcontrleur de base, qui incorpore un certain nombre de fonctions priphriques lmentaires, est commercialis en un botier de 40 broches (DIL) ou de 44 broches (botier plat PLCC). Les variantes, pures ou alourdies de nombreux priphriques supplmentaires, sont incluses dans des botiers de 24 broches (botier DIL troit) 84 broches (botier carrs plats divers). Le composant devenant ancien, la socit Intel a (en raison du succs exceptionnel du contrleur) mis sur le march une version modernise compatible appele 80C251 et comportant un pipeline d'excution rendant le processeur quatre fois plus rapide frquence d'horloge gale. D'autres amliorations comme le fonctionnement statique, une consommation nettement moindre, une capacit d'adressage tendue ont t apportes. Philips, pour sa part, commercialise depuis peu une variante 16 bits 11 Jlassi Khaled

appele 80C51-XA compatible au niveau du code source aux performances galement fortement amliores par rapport au composant initial.

Les diffrentes versions possdent en outre quelques caractristiques spcifiques supplmentaires. Ainsi le 8052AH possde 6 entres d'interruption au lieu de 5 dans la version de base, les versions HCMOS possdent des possibilits de mise en veille pour rduire la consommation, le 83C152 dispose de deux canaux d'accs direct la mmoire, ainsi que d'un cinquime port et possde un brochage diffrent. De plus une version spciale du 8052 dispose du basic intgr en rom (8052AH-BASIC). Le tableau ci-dessous prsente les principales versions construites par INTEL.

Tableau 4.1. Famille MCS51

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 composant. Dans le cas d'une application de contrle, typique de ce que l'on peut demander un microcontrleur, la vitesse de calcul d'un 8051 12 MHz est comparable celle d'un 8086 8MHz (compatible PC XT TURBO), ou d'un 68000 (MACINTOSH Classique). Les versions haute vitesse (horloge 30 MHz et plus) du 8051 donnent des rsultats comparables ceux des 80286 8 MHz (compatibles AT TURBO), ou 68020 cadencement moyen. Le rapport de performance dpend considrablement du type de logiciel excut. Pour les calculs boolens, le 8051 triple sa performance relative par rapport aux autres processeurs (grce son processeur boolen) ; par 12 Jlassi Khaled

contre, dans le cas de calculs arithmtiques sur des entiers de 16 ou 32 bits, sa performance s'croule. Le noyau du 80C51 reprend partiellement les principes des processeurs RISC (dcodeur d'instructions entirement cbl et jeu d'instructions rduit). Il excute 70% des instructions en un cycle machine, et les autres en deux cycles (hormis celles de multiplication et de division qui s'excutent en quatre cycles). A titre de comparaison, un 8086 qui est microprogramm demande plus de 20 cycles machine pour excuter certaines instructions de chargement. L'unit centrale du 80C51 incorpore un processeur boolen qui accrot considrablement la vitesse de traitement des instructions de manipulation de bits. Le microcontrleur 8051 est un microcontrleur 8 bits car il traite des donnes sur 8 bits ; le bus de donnes comporte donc 8 lignes ; comme la plupart des microcontrleurs 8 bits, le 8051 gre des adresses en 16 bits, ce qui donne un espace adressable de 216 soit 64Koctets, o K = 210 = 1024. Il exploite l'architecture de Harvard, plus complexe mais plus performante. Dans cette architecture, la mmoire de donnes est physiquement distincte de la mmoire de programme, chacune de ces deux mmoires ayant son propre dispositif d'adressage et de contrle. La mmoire interne de donnes est une mmoire vive volatile (de 128 octets 512 octets selon les modles), donc trs rduite; tandis que la mmoire interne de programme est une mmoire morte (reprogrammable ou non) dont la taille varie de 4 Koctets 32 Koctets selon le modle de contrleur. Il est possible de rajouter de la mmoire l'extrieur du contrleur. La limite maximale est de 64 Koctets de mmoire de donnes et autant de mmoire de programme. Le processeur ne gre pas le rafrachissement des mmoires dynamiques, ni les temps d'attente des mmoires lentes (simplicit oblige). Il est donc ncessaire de choisir des mmoires statiques ayant des temps d'accs suffisamment courts. Les caractristiques principales du noyau
80C51 sont : un CPU 8 bits spcialement conu pour la commande d'applications diverses une unit logique tendue au traitement sur un bit 32 entres/sorties bidirectionnelles qui peuvent tre adresses individuellement. 128 octets de RAM interne utilisation gnrale 21 registres spcialiss un port srie en full duplex 5 sources d'interruptions avec 2 niveaux de priorit 2 Compteurs/Timers sur 16 bits un oscillateur interne: la frquence d'oscillation maximale admise est de 12 MHz 64 Ko d'adresse mmoire de donnes 64 Ko d'adresse mmoire de programme un jeu d'instructions assez dvelopp

13

Jlassi Khaled

Ce noyau de l'architecture de base est prsent par le schma bloc de la figure suivante :

Figure 4.1. Schma bloc du noyau 80C51

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

Figure 4.2. Organisation de la mmoire interne

En ce qui concerne la mmoire externe, la figure suivante rsume un peu la situation. Nous avons 64 KO de mmoire programme et 64 KO de mmoire de donnes.

Figure 4.3. Organisation des espaces mmoires du 8051

15

Jlassi Khaled

V.1

Mmoire interne de donnes.

Cette mmoire se dcompose en deux parties de 128 octets chacune. Le bloc de 128 octets situ de l'adresse 0 l'adresse 7FH constitue la partie basse de cette mmoire interne et il est prsent dans tous les microcontrleurs de la famille MCS 51. Il en est de mme pour le bloc nomm SFR. L'appellation SFR se traduit par Registres Fonction Spciale. Ces registres occupent les adresses directes 80H 0FFH. Ces diffrents registres sont dcrits en dtail plus loin.

V.2 Sparation logique entre programme et donnes.


On dsigne par mmoire de programme la mmoire dans laquelle se trouve le code machine excut par le processeur, par opposition la mmoire de donnes o se trouvent les donnes manipules par le processeur. Cette sparation de fonctions se traduit par des modes d'accs et d'adressages diffrents. La mmoire de donnes est accessible aussi bien en lecture qu'en criture. Une RAM interne est prvue cet effet. Si la capacit de celle-ci s'avrait insuffisante, il est possible de complter l'espace de mmoire de donnes grce une mmoire externe. Le microcontrleur peut commander cette mmoire en lecture et criture l'aide des signaux RD et WR.

V.3 Addition d'une mmoire externe au microcontrleur. Bien que la fonction premire dun microcontrleur soit de permettre un contrle et une commande dun systme limit et fini, il peut aussi se prsenter comme une alternative lutilisation dun microprocesseur. Il faut donc quil soit capable de grer des plans mmoires externes ou des composants priphriques. Une solution consiste alors doter certaines broches correspondantes des lignes dentres/sorties, dune deuxime fonction dite fonction secondaire. Cest le cas des broches du port P0 et P2 qui pourront devenir bus de donnes et dadresses. Ils existent plusieurs configurations possibles de mmoires externes. La plus simple est donne par la figure suivante :

16

Jlassi Khaled

Figure 4.4. Association Microcontrleur et mmoire externe Sur cette figure la mmoire externe de type RAM est la fois mmoire programme et mmoire de donnes. Bien videmment, dans cette configuration, le programme dapplication doit se trouver pralablement dans cette mmoire ce qui implique lutilisation de mmoire RAM non volatiles ou sauvegardes par pile. La fonction du LATCH est de dmultiplexer le bus dadresse et de donne tandis que le rle de la fonction ET est de considrer la mmoire comme tant la fois mmoire de programme et de donnes. Remarquons sur cette figure que le dmultiplexage des donnes et des 8 adresses de poids faible est possible grce la proprit de la broche ALE (Adress Latch Enable). En faite cette dernire est prvue pour commander le dmultiplexage du port P0 lorsque celui-ci est valid dans sa fonction secondaire : poids faible du bus de donnes. Lorsque ALE est dans ltat 1, le port P0 prsente la partie A0/A7 de ladresse. Lors de la transition 1 vers 0 de ALE, ladresse toujours prsente doit tre mmorise grce un circuit externe 'LATCH' (bascule D). Durant la priode o ALE=0, le port P0 devient bus de donnes. Les pattes CE et A16 de la RAM sont lies ici la patte GND, ainsi la mmoire externe est toujours slectionne : La zone mmoire disponible dans ce cas est 0000H - FFFFH. Pour charger un programme dans la mmoire externe, il faut quelle soit accessible en tant que mmoire de donnes. Alors que dans la phase dexcution de ce programme, il faut quelle soit reconnue par le microcontrleur comme une mmoire programme. Au niveau logique cette fonction mixte est 17 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.

Figure 4.5. Chronogramme des 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

Figure 4.6. Chronogramme des signaux lors de l'criture d'une donne


dans la mmoire externe Pour confirmer exprimentalement ces chronogrammes nous donnons sur les figures 4.7 et 4.8 quelques rsultats que nous avons visualiss sur l'oscilloscope lors de la lecture et l'criture d'une donne. Notons que nous visualisons ici seulement la patte D6 des donnes.

Figure 4.7. Chronogramme des signaux lors de la rcupration d'une donne depuis la mmoire externe

19

Jlassi Khaled

Figure 4.8. Chronogramme des signaux lors de l'criture d'une donne


dans la mmoire externe

La deuxime configuration possible lors dune extension mmoire pour un 80C51 et de sparer la mmoire du code de celle des donnes. Pour mieux comprendre cette sparation, voici un exemple de mise en oeuvre d'un 8032 associ une EPROM de 8Ko pour la mmoire programme et une RAM de 8Ko galement pour stocker des donnes:

Figure 4.9. Mise en uvre du microcontrleur C51 avec sparation entre


20 Jlassi Khaled

mmoire de code et mmoire de donnes Le 74HC573 est un verrou 3 tats il permet le dmultiplexage du port P0. Lorsque ALE est 1, on recopie les entres du latch (74HC573) sur les sorties et lorsque ALE passe 0, les donnes restent sur les sorties du 74HC573, elles sont les adresses de A0 A7 et le microcontrleur se sert alors de son port P0 pour changer des donnes. On constate ici que /PSEN commande directement le signal /OE de l'EPROM. Quand le microcontrleur veut aller chercher des instructions dans sa mmoire programme, PSEN passe 0 et l'EPROM est alors valide en lecture. La RAM est dvalide car son CS est command par A13. Dans le cas o l'on dsire avoir 64Ko de RAM, il faut prvoir un dcodage d'adresse moins rudimentaire.
V.4 Structure du processeur C51.

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 :

un additionneur pour 2 nombres de 8 bits ; le 9me bit de l'addition est plac dans l'indicateur d'tat CY (Carry) ;

21

Jlassi Khaled

un soustracteur pour 2 nombres de 8 bits ; l'emprunt ventuel gnr si le rsultat est ngatif est aussi plac dans un indicateur d'tat ; un circuit de multiplication pour 2 nombres de 8 bits ; ici, le rsultat peut ncessiter jusqu' 16 bits ; les 8 bits les plus significatifs sont placs dans un registre B prvu cet effet ; un circuit de division pour 2 nombres de 8 bits ; il s'agit ici d'une division entire : le quotient est plac dans l'Acc, le reste dans le registre B ; 8 circuits logiques de type inverseur, ET, OU, XOU ; de nombreux tampons 3 tats pour permettre les communications entre les registres, l'UAL et le bus de donnes.

Le registre dtat comprend un certain nombre dindicateurs d'tat, qui sont automatiquement positionnes lors des oprations arithmtiques ou logiques. L'tat de ces indicateurs peut tre test par le programme dapplication pour effectuer des branchements conditionnels. En plus de ce registre le 8051 comporte 32 autres registres de travail, organiss en 4 groupes de 8 registres. Ces registres constituent des mmoires temporaires, o l'on place provisoirement des informations dont on sait qu'elles seront ncessaires peu de temps aprs. L'intrt des registres de travail, c'est que le temps d'accs est plus court que pour une lecture ou criture en RAM, et les instructions ncessaires pour y accder sont plus rapides. V.4.2 Gestion des adresses. L'espace mmoire d'un 8051 est partag en 3 zones bien distinctes :
- la zone mmoire programme qui peut aller jusqu 64 Koctets; - la zone mmoire de donnes, qui peut aussi aller jusqu' 64 Koctets - la pile : il s'agit d'une zone de mmoire incluse dans la zone mmoire de donnes et qui est utilise par le processeur principalement pour stocker les adresses de retour au programme principal en cas dappel de sous programmes; on peut galement l'utiliser comme zone de stockage temporaire (un peu comme les registres de travail) ou pour l'change de donnes entre programme principal et sous-programmes.

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

systme ; le programme doit donc imprativement commencer l'adresse 0000h (h signifiant code hexadcimal, c'est le code le plus couramment employ pour dfinir les zones d'adresse dans les systmes base de microprocesseurs ou base de microcontrleurs). La plupart du temps, ce pointeur est simplement incrment chaque fois que l'on va chercher dans la mmoire programme un octet du programme (signalons quune instruction comporte de 1 3 octets). Toutefois, le contenu du pointeur est compltement modifi lorsque l'on doit effectuer un branchement (saut ou sous-programme) ou lorsquon effectue un retour au programme principal aprs excution dun sous programme. Pour permettre au microcontrleur de reprendre lexcution l'endroit du saut, dans le cas dappel des sous-programmes, le processeur sauvegarde dans la pile l'adresse de retour avant deffectuer le saut. Le processeur C51 utilise cet effet le pointeur de pile SP (Stack Pointer) qui pointe automatiquement sur la dernire adresse sauvegarde. Il est incrment lors dune sauvegarde dadresse ou dune donne et dcrment lors de la rcupration dune adresse ou dune donne. Par dfaut le pointeur de pile est initialis avec la valeur 07h la mise sous tension (figure 4.2). Ce pointeur peut tre par la suite modifi par le programme dapplication. En ce qui concerne les donnes de type XDATA (donnes se trouvant dans la mmoire externe), le 8051 utilise le pointeur DPTR (Data Pointer) pour lire ou crire une donne en mmoire externe.

V.4.3 Traitement des instructions.


Le processeur C51 reprend partiellement les principes des processeurs RISC (dcodeur d'instructions entirement cbl et jeu d'instructions rduit). Il excute 70% des instructions en un cycle machine, et les autres en deux cycles (hormis celles de multiplication et de division qui s'excutent en quatre cycles). Le jeu d'instructions est un jeu rduit (101 instructions). Les instructions sont organises autour d'un accumulateur et de registres (quatre banques de huit registres). La particularit du contrleur est d'affecter une adresse mmoire tous les registres (dont l'accumulateur), auxquels on peut donc avoir accs directement, ou par l'intermdiaire de leur adresse. Il n'y a pas d'instruction spcifique pour les registres de contrle des priphriques intgrs. On y accde exclusivement par le mode d'adressage direct. La cadence de traitement des instructions est pilot par une horloge ; le 8051 contient tous les lments de l'horloge, l'exception des 23 Jlassi Khaled

composants qui dterminent la frquence d'oscillation : gnralement un quartz, mais un circuit RC peut aussi tre utilis si une connaissance prcise de la frquence n'est pas ncessaire.

V.5. Jeu dinstructions du processeur C51. Il est le mme pour tous les membres de la famille C51 et est optimis pour les systmes de contrle 8-bits, d'o un trs grand nombre de fonctions de manipulation de bits puisque de nombreux dispositifs de contrle ont un fonctionnement 2 tats (ouvert-ferm ou tout ou rien). Nous donnons dans cette section, le jeu d'instructions du 8051 en employant la syntaxe du constructeur, Intel :

Rr : registre de travail R0 R7 du groupe slectionn direct : adresse directe (RAM ou SFR) @Ri : case de RAM pointe par R0 ou R1 @DPTR : case mmoire pointe par le DPTR #data : donne immdiate 8 bits #data16 : donne immdiate 16 bits bit : adresse bit (dans les 16 octets pour variables boolennes et les SFR) addr16 : adresse de destination pour les branchements rel : adresse relative pour les branchements ; l'adresse est indique en complment 2, de faon pouvoir effectuer des sauts en avant ou en arrire (les nombres de 128 255 sont considrs comme des nombres ngatifs)

Remarque : Nous donnons en Annexe N1 tous les dtails concernant le jeu dinstructions du processeur C51

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
;copie le contenu de R7 dans l'Acc ;copie le contenu de l'Acc dans la case de RAM interne l'adresse 70h

MOV A, @R1 ;copie le contenu de la case dont l'adresse est en R1 dans l'Acc MOV 20h, 71h
;copie le contenu de la case 71h de RAM interne dans la case 20h

24

Jlassi Khaled

b) Transferts de et vers la RAM externe:

La structure des instructions est : MOVX destination, source


MOVX A, @DPTR
dans l'Acc ;copie le contenu de la case dont l'adresse se trouve dans le DPTR

MOVX @DPTR, A
le DPTR

;copie le contenu de l'Acc dans la case dont l'adresse se trouve dans

V.5.2. Instructions arithmtiques. D'une faon gnrale, elles utilisent l'Acc pour stocker une des deux donnes de lopration, ainsi que le rsultat de l'opration aprs excution de l'instruction. Des indicateurs d'tat sont positionns automatiquement en fonction du rsultat de l'opration :
- l'indicateur de dpassement (Carry) est mis 1 si l'addition provoque un report au 9me bit ; - l'indicateur de semi-dpassement (Half-Carry) est mis 1 si une addition provoque un report au 5e bit (cet indicateur est utilis par l'instruction DAA, qui permet de faire l'addition de deux nombres en code DCB, dcimal cod binaire) ; - l'indicateur de parit est mis 1 si la parit du nombre dans l'Acc est impaire ; - l'indicateur d'overflow est positionn lors de certaines oprations arithmtiques.

Exemples :
ADD A, R5 ADD A,#17h SUBB A,R2 MUL AB
;ajoute le contenu de R5 l'Acc ;ajoute 17h au contenu de l'Acc ;soustrait l'Acc le contenu de R2 ;effectue la multiplication des nombres placs dans l'Acc et dans le registre B, les ;8 bits les moins significatifs sont placs dans l'Acc, les plus significatifs dans B

DIV AB

;divise le contenu de l'Acc par le contenu de B, place le quotient en A et le reste en B

25

Jlassi Khaled

INC R0

;incrmente le contenu de R0 sans modifier l'Acc

V.5.3. Instructions logiques. Les oprations logiques sont effectues entre bits de mme poids, il n'y a pas d'interaction entre bits de poids diffrent et les indicateurs d'tat ne sont pas modifis. Les oprations ET, OU et XOU sont disponibles, ainsi que l'inversion ; pour les oprations NON-ET, NON-OU, NON-XOU, ils ncessitent deux tapes, d'abord l'opration directe, puis linversion de tous les bits. Exemples : CLR A
CPL A ANL A, 35h
; met l'Acc 0 ; complmente tous les bits de l'Acc ; 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 ORL C,20h MOV C,45h
;positionne 1 le bit 38h ;met 0 le Carry ;ralise un OU logique entre C et le bit 20h ;copie le contenu du bit 45h dans C.

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
;provoque un saut l'adresse indique

;provoque l'exciution du sous-programme qui commence addr16


;recule dans le programme de 8 pas si le contenu de l'Acc est nul (Jump if Zero)

CJNE A,#20h,F8h

;il s'agit ici d'une opration double : on compare les contenus de ;l'Acc et de la case 20h on recule de 8 pas dans le programme s'ils ne sont pas gaux ;(Compare and Jump if Not Equal).

Remarque : seuls les sauts peuvent tre conditionnels avec le 8051.

V.6 les Ports d'E/S. Les ports d'E/S permettent aux systmes microprocesseur ou microcontrleur de communiquer avec le monde extrieur : recevoir des informations, qu'il va ensuite traiter et piloter les priphriques : tmoins lumineux, moteurs, relais, convertisseurs N/A etc. La famille 8051 a t conue pour des applications ncessitant peu de mmoire ROM et RAM. Ainsi, le 8051 lui-mme comporte une ROM de 4Ko et seulement 128 octets de RAM ; et encore faut-il tenir compte que la RAM est utilise par les registres de travail, la pile et les 16 octets (de 20h 2Fh) adressables par bit. Lorsque l'application peut se satisfaire de ces tailles mmoire, 32 lignes d'E/S sont disponibles, organises en 4 ports de 8 lignes ; les adresses sont les suivantes : port 0 : 80h ; port 1 : 90h ; port 2 ; A0h ; port 3 : B0h. Les circuits internes associs aux diffrentes lignes sont lgrement diffrents. Prenons l'exemple du port1.

27

Jlassi Khaled

Figure 4.10 Structure d'une ligne du port 1 d'un C 8051

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

V.7 Les interruptions. Comme son nom l'indique, une interruption est un vnement qui interrompt l'excution du programme et provoque un saut vers une routine dite dinterruption. La routine dinterruption, appele Interrupt Handler en anglais, est seulement excute lors de l'arrive d'un vnement bien prcis. Avec le 8051, plusieurs sortes d'interruptions sont possibles :
- Overflow d'un des timers - Rception ou transmission d'un caractre sur le port srie - Activation d'vnements extrieurs via les pins T0 ou T1

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 Externe 0 Timer 0 Externe 1 Timer 1 Port Srie Flag IE0 TF0 IE1 TF1 RI/TI Tableau 4.2. Les interruptions du 80C51 En consultant le tableau ci-dessus, on peut voir que quand le Timer 0 dborde ("overflow"), le microcontrleur met le bit TF0 1 et le programme principal est suspendu. L'instruction suivante est directement excute l'adresse 000Bh. A cette adresse doit donc figurer le code traitant l'interruption en question. Par dfaut, la mise sous tension ou la suite dun RESET du microcontrleur, toutes les interruptions sont inhibes. Cela signifie que, mme si, par exemple, Le flag TF0 passe 1, le 8051 n'excutera pas la routine d'interruption. Le programme doit donc spcifiquement
29 Jlassi Khaled

Adresse 0003h 000Bh 0013h 001Bh 0023h

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 7 6 5 4 3 2 1 0 Nom EA ES ET1 EX1 ET0 EX0 Adresse du bit Fonction AFh AEh ADh ACh ABh AAh A9h A8h Activation globale des interruptions Indfini Indfini Activation interruption port srie Activation interruption Timer 1 Activation interruption externe 1 Activation interruption Timer 0 Activation interruption externe 0

Tableau 4.3. Registre de contrle des interruptions du 80C51 Comme nous pouvons le constater, chaque interruption a son propre bit d'activation dans le registre IE. Pour activer une interruption, il suffit de mettre 1 le bit correspondant cette interruption dans le registre IE. Par exemple pour le Timer 1 : MOV IE,#08h ou SETB ET1 Les deux instructions ci-dessus mettent 1 le bit 3 de IE, activant donc l'interruption du Timer 1. Bien sr, pour que les instructions soit vraiment actives, il faut mettre 1 le bit 7 et autoriser de manire globale les interruptions. EA est vraiment utile lorsque des passages du code sont critiques en ce qui concerne leur dure d'excution. On inhibe alors les interruptions pour un temps. En ce qui concerne la dtection des interruptions, le 8051 value automatiquement aprs chaque instruction si une interruption doit avoir lieu ou non. Il effectue le test dans l'ordre suivant :

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 7 6 5 4 3 2 1 0

Nom PS PT1 PX1 PT0 PX2

Adresse du bit Explication de la fonction BCh BBh BAh B9h B8h Indfini Indfini Indfini Priorit Port Srie Priorit Timer 1 Priorit interruption Externe 1 Priorit Timer 2 Priorit interruption Externe 0

Tableau 4.4. Le registre de gestion des interruptions Nous allons dcrire par la suite le principe de fonctionnement des interruptions. Quand une interruption est dclenche, le 8051 effectue automatiquement les actions suivantes :

Le PC (program counter) est sauvegard dans la pile (stack) Les interruptions de mme priorit ou de priorit infrieure sont bloques Dans le cas d'interruptions Externes ou Timer le Flag d'interruption correspondant est mis 1.

31

Jlassi Khaled

L'excution du programme est transfre vers l'adresse interruption ddicace.

Le programme dinterruption finit lorsquil rencontre l'instruction RETI (Return From Interrupt). Le 8051 restaure alors ladresse de retour de la pile et reprend lexcution lendroit o il a t arrt par lvnement. V.8 Les compteurs/temporisateurs. Le 8051 comporte deux compteurs/temporisateurs. Ces priphriques sont appels ainsi car ils peuvent tre utiliss :
- pour compter les impulsions appliques une broche du microcontrleur ; on parle alors de compteur (counter) ; - pour compter des impulsions provenant de l'horloge du microcontrleur; on parle alors de temporisateur (timer) puisque dans ce mode le microcontrleur peut mesurer des intervalles de temps ou gnrer des dlais prcis.

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.

On peut choisir d'appliquer chaque compteur :


- soit des impulsions provenant d'une broche externe T0 ou T1 ; - soit des impulsions provenant du circuit d'horloge, aprs passage par un diviseur de frquence par 12. Lactivation ainsi que la dsactivation de ces deux Timers sont contrls par deux bits du registre TCON (Timer CONtrol) adressable au niveau du bit : TR0 pour Timer0 et TR1 pour Timer1 (figure .4.11).

32

Jlassi Khaled

Figure 4.11. Registre de contrle TCON La mise 1 de ces bits permet dactiver le Timer correspondant qui commence alors sincrmenter; la mise 0 de ces bits dsactive le Timer correspondant qui sarrte et garde le mme contenu. Ces deux bits peuvent tre accds par les instructions : TR0 = 1 ; TR1 = 0 (compilateur C) ; Les Timers 0 et 1 peuvent tre configurs indpendamment lun de lautre (exception mode 4) partir dun mme registre de configuration TMOD (Timer Mode) : les 4 bits poids fort pour la configuration du Timer1, les 4 bits poids faible pour le Timer0 (figure 4.12)

Figure 4.12 Le registre TMOD

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

Figure 4.13. Timer 0 en mode Temporisateur Les valeurs maximales atteintes par le Timer sont donc respectivement ( 2 13-1 = 8191 pour le mode 13 bits, 2
16

-1 = 65535 pour le mode 16 bits et 2 8-1 = 255 pour le mode 8 bits).

Lactivation du Timer associe lautorisation de linterruption relative lindication de dbordement, offre un moyen trs prcis pour les applications ncessitant la gestion dune base de temps (exemple : horloge temps rel, acquisition priodique). Exemple : on cherche a changer ltat logique du bit poids fort du port parallle P4 chaque 1/100 sec : cette fin on utilisera le Timer0 de telle sorte avoir une interruption toutes les 1/100 sec. Cest la routine associe cette interruption qui servira changer ltat de ce bit. (on suppose que la frquence dhorloge du microcontrleur est de 12 Mhz). On doit tout dabord dterminer le nombre dincrmentations ncessaires pour avoir la frquence dinterruption voulue et par consquent le mode de fonctionnement du Timer (13, 16 ou 8 bits) ainsi que la valeur dinitialisation des registres TH0 et TL0. On a dune part : la frquence dincrmentation = 12/12Mhz = 1Mhz ; ce qui correspond une priode dincrmentations = 1sec. Dautre part on a : priode des interruptions : 1/100 sec = 10000 sec. Donc le nombre dincrmentations est 10000 sec/1sec = 10000 (> 8192 et > 256).
Timer0 doit tre donc configur comme compteur 16 bits (M1M0 = 01)

La valeur dinitialisation est alors gale : 2 16-10000 = 55536 = 0xDF80.


TH0 = 0xDF et TL0 = 0x80

34

Jlassi Khaled

#include <reg51.h>

void centieme_seconde ( void ) interrupt 1 {

// Cest la routine associe au dbordement du Timer0 qui a le //numro 1

P4 = P4 ^ 0x80 ; TH0 = 0xDF ; TL0 = 0x80 ; } void main ( void )

// Inverser ltat logique du bit poids fort de P4. // recharger le Timer0 (TH et TL0). Le rechargement nest pas obligatoire dans le mode // 8 bits ; il est automatique (gr matriellement).

{
TMOD = 0x01 ; TH0 = 0xDF ; TL0 = 0x80 ; EA = 1 ; ET0 = 1 ; TR0 = 1 ; While (1) { } // TMOD 01)

- 0 0 0 1
(Gate et C/T = 0 ; M1 M0 =

// Chargement des registres poids fort TH0 et poids faible TL0 du Timer0. // Autorisation gnrale des interruptions. // Autorisation de linterruption associe au dbordement du Timer0. // Activer le Timer0 (incrmentation avec une cadence fosc/12 ).

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

Figure 1.14. Timer0 en mode comptage

Exemple : Diviseur de frquence On applique un signal carr Sf de frquence f sur la broche T0 du microcontrleur et on gnre un signal carr de frquence f/10 sur le bit poids faible du port parallle P4. Ceci est ralis en gnrant une interruption toutes les 5 (10/2) priodes du signal Sf : Le timer0 sera configur en mode 8 bits (5<256) donc M1 M0 = 10 et initialis avec la valeur 2565=251= 0xFB. La routine associe linterruption assure le changement dtat de la sortie (P4.0) (figure 4.15).

Figure 4.15: Diviseur de frquence (utilisation du Timer0 )

36

Jlassi Khaled

#include <reg51.h>

void centieme_seconde ( void ) interrupt 1 {

// Cest la routine associe au dbordement du Timer0 qui a le //numro 1 (voir document ).

P4 = P4 ^ 0x01 ;

// Inverser ltat logique du bit poids faible de P4.

} void main ( void )

{
TMOD = 0x06 ;

- 0 1 1 0
(Gate=0 et C/T = 1 ;

// TMOD M1 M0 = 10)

TL0 = 0xFB ; // Chargement des registres poids fort TH0 et poids faible TL0 du Timer0.

EA = 1 ;

ET0 = 1 ;

// Autorisation gnrale des interruptions.

TR0 = 1 ;

// Autorisation de linterruption associe au dbordement du Timer0.

While (1) { }

// Activer le Timer0 (incrmentation avec la cadence du signal 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

Figure 4.16 Chronogramme de fonctionnement de la liaison srie Lorsque le registre Sbuf est vide, le microcontrleur dclenche une demande d'interruption ; le processeur enverra alors l'octet suivant, si ncessaire ; Il est possible aussi d'envoyer des mots de 9 bits plutt que 8 ; ceci permet d'accoler aux 8 bits un bit de parit pour le contrle des erreurs, ou de crer un petit rseau avec plusieurs processeurs. Lors de la rception d'un caractre, la procdure est enclenche par la dtection d'un flanc descendant la broche RxD. Les 8 ou 9 bits sont placs dans le registre Sbuf de rception (curieusement, on utilise le mme nom et la mme adresse, 99h, pour les deux registres Sbuf ; quand on crit cette adresse, l'octet est stock dans le registre d'mission, quand on lit, c'est le contenu du registre de rception). Lorsque tous les bits sont prsents, on dclenche une demande d'interruption. Il faut que le microcontrleur vienne lire l'octet reu avant la fin de la 38 Jlassi Khaled

rception de l'octet suivant, sinon le premier est perdu. L'metteur et le rcepteur peuvent travailler simultanment. Les demandes d'interruption sont combines. Donc, lorsque l'on envoie et reoit simultanment des octets, le processeur doit dterminer lors de chaque demande d'interruption si elle mane de l'metteur ou du rcepteur. Cela se fait en allant lire les bits TI et RI du registre Scon (Serial Port Control Register). V.9.1 Configuration de linterface srie . Linterface srie peut fonctionner selon 4 modes ; la slection de lun de ces modes se fait par les deux bits poids fort dun registre fonction spciale (0x98) adressable au niveau du bit: S0CON (Serial CONfiguration 0). Ce registre contient galement les bits dindication dmission, dindication de rception : rception et de validation de

SM0

SM1

REN

TI

RI

Figure 4.17 Registre S0CON SM0 et SM1 spcifient le mode de fonctionnement du port srie :

SM0 0 0 1 1

SM1 0 1 0 1

Mode 0 1 2 3

Description Registre dcalage UART 8 bits UART 9 bits UART 9 bits

Vitesse Fosc/12* Variable Fosc/64 ou Fosc/32* Variable

REN = 1 : rception sur le port srie est active.


= 0 : rception sur le port srie inhibe.

39

Jlassi Khaled

TI : cest lindicateur de transmission, il est mis automatiquement 1 quand la donne a t compltement envoye . Il doit tre remis 0 par programme. RI : cest lindicateur de rception, il est automatiquement mis 1 la rception dune donne complte. Il doit tre remis 0 par programme. * Fosc est la frquence horloge du microcontrleur.

V.9.2 Vitesse de transmission Deux parmi les 4 modes de fonctionnement du port srie sont vitesse variable : dans ces deux modes la vitesse est dtermine par la frquence de dbordements (dpassement de 255 et passage 0) du Timer1, qui est constitu de deux registres 8 bits TH1 et TL1, et qui doit tre configur en mode temporisateur 8 bits rechargement automatique travers le registre TMOD (0x89).

On prsente les bits intervenant dans la configuration du timer1 :


0 0 C/T 1 M1 0 M0 = 0x20

1 : Timer1 est en mode comptage dvnements.

00 : compteur 13 bits. 01 : compteur 16 bits. 10 : compteur 8 bits

Figure 4.18 Registre TMOD

Ce timer peut tre activ ou arrt suivant ltat dun bit du registre TCON adressable au niveau bit (Timer CONtrol) : il sagit du bit TR1 = 1 : 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

Figure 4.19. Gnration de la vitesse de transmission du port srie


Solution : La frquence dincrmentation de TL 1 est 12 Mhz/12*32 =31250 Hz . 41 Jlassi Khaled

TL1 est incrment de 1 toutes les 1/31250 Hz = 32 sec. 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.

Remarque : Ce rsultat est obtenu galement en divisant la frquence dincrmentation par la vitesse de transmission dsire (31250/9600 = 104 ).
Application : Le code suivant crit en langage C permet : la configuration de linterface srie en mode UART 9 bits (mode 3) avec une vitesse de transmission de 9600 bits/sec avec validation de la rception. (Fosc = 12 Mhz) puis la rception de 10 donnes. suivie par la transmission de 10 donnes. et enfin la dsactivation de la rception.

#include <reg51.h> int i ;

// inclure le fichier contenant les dclarations des registres fonction spciale // 1 1 - 1 - 0 0 Jlassi Khaled

42

Mode Rceptio TI et RI n valid initialiss 0

char datas[10] ;

void Main (void) {


S0CON = 0xD1 ; // S0CON = //

TMOD = 0x20 ; // Timer1 configur en temporisateur 8 bits. // TMOD =

TH1 = 0x98 ; // Voir exemple page 3.

TR1 = 1 ; // Lancer le Timer1.

for (i=1 ; <=10 ; i++ ) // Rception de 10 donnes. { while ( !RI) ; // Attendre jusqu ce que lindicateur de rception passe datas [ i ] = S0BUF ; RI = 0 ; } for (i=1 ; <=10 ; i++ ) { while ( !TI) ; TI = 0 ; // Attendre lmission complte de la donne prcdente // Transmission de 10 donnes. 1. // Lire le donne partir de S0BUF. // Remettre RI 0.

43

Jlassi Khaled

S0BUF = datas [ i ] ; } REN = 0 ; }

(passage de TI 1). // Remettre TI 0. // Mettre la donne envoyer dans le registre de transmission ( S0BUF ).

// dsactiver la rception.

Remarque :

- Les bits non utiliss sont supposs mis 0. (S0CON et TMOD). - En utilisant les fonctions printf, scanf, etc..., on nest plus oblig de grer les bits TI et RI.

44

Jlassi Khaled

I. Configuration matrielle de la carte.

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
0000..7FFFh 32 Ko

U2
0000..7FFFh 32 Ko

8000..FFFFh 32 Ko

Figure 5.1. Configuration de la carte - EPROM (U1) : seulement les 32 Koctets infrieurs sont utiliss et occupent la zone de code 0000..7FFFH (les 32 Koctets inf. ). Cette zone contient le moniteur : un programme qui est lance au dmarrage de la carte et qui permet la visualisation des diffrents registres du microcontrleur, du contenu des mmoires, la gestion de la liaison srie ainsi que le chargement des programmes dans la zone code et leur excution , cest un mini-systme dexploitation de la carte. Bien sr, cette zone ne peut pas tre utilise pour charger des programmes dapplication. - RAM (U2) : elle occupe les 32 Ko infrieurs de la zone DATA ou donnes (0000..7FFFH). La zone situe de 7F00..7FFFH est utilise par le moniteur. Le reste peut tre utilis par dautres programmes. - RAM sauvegarde par batterie (U3) : elle occupe les 32 Ko suprieurs des zones code et DATA en mme temps. Elle peut tre utilise entirement par les programmes, mais il faut faire attention pour que les donnes et le code ne soient pas placs dans des zones qui se chevauchent.
2 Jlassi Khaled

II. Le format Hexadcimal.

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
Paramtres de

(Code + rfrences aux fonctions t )

Edition des liens


(Code programmes + code fonctions externes)

Format final (fichier .HEX ou .BIN)

Figure 5.2. Gnration des formats .BIN et .HEX Le fichier gnr peut tre : 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
(10 H =16 instructions) Adresse partir de laquelle les instructions doivent

(16 instructions) Type de donnes

La dernire ligne dun fichier .HEX tant ( :00000001FF) et elle indique au moniteur la fin du fichier.

III. Connexion entre le PC et carte. Pour pouvoir charger le programme dans la zone code de la carte aprs avoir gnr le fichier .HEX, il faut disposer du cot PC : dun port srie libre. dun logiciel permettant la transmission et la rception travers le port srie (on utilisera HYPERTERMINAL qui est inclus dans le CD dinstallation de Windows) et tant configur de la mme manire que le moniteur de la carte : (9600,8,N,1) (vitesse = 9600bps; Nbre de bits donnes = 8 ; Parit :aucune ; Nbre bits de stop =1. Enfin on a besoin dun cble srie pour connecter le port srie du PC celui du microcontrleur. (voir figure 5.3)

PC
Terminal cble srie

Carte c
Moniteur

Port srie

Port srie

Figure 5.3. liaison srie entre PC et carte

Jlassi Khaled

IV. Lenvironnement de dveloppement.


La saisie, la simulation et la compilation des programmes au cours de nos exemples seront ralises dans lenvironnement de dveloppement Keil qui supporte en plus du langage assembleur, le langage C (que nous utiliserons) et comporte galement un grand nombre de libraires (communication, calcul avec virgule flottante, etc..) . Avant dcrire des programmes, il faut commencer par crer un projet avec le menu

Project>>New Project

Une faut

fois

on

choisi le

le

chemin de

denregistrement et le nom du projet, il slectionner type microcontrleur utilis parmi la liste supporte par Keil dans la fentre SelectaDevice for Target Target1 .

Slectionner le constructeur (Philips) puis la rfrence du microcontrleur (80C552) et valider.

Jlassi Khaled

Maintenant il faut crer un nouveau fichier avec le menu File>>New, lenregistrer en prcisant lextension ( .c dans notre cas) et enfin la dclarer comme faisant partie du projet : slectionner Source Group 1 dans la fentre gauche , appuyer sur le bouton droite de la souris et cliquer sur Add files to.. Enfin slectionner le fichier et lajouter (Add). (voir figure ci-contre)

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 : printf : qui permet de transmette des donnes vers la liaison srie du microcontrleur. Scanf : qui permet au microcontrleur de recevoir les donnes partir de son port srie. On commence par envoyer un message Veuillez choisir un chiffre et attendre jusqu recevoir une donne. Si la donne reue est un chiffre, on envoie le chiffre en toutes lettres (exemple zro pour 0, etc..). Sinon on envoie le message Erreur :

Jlassi Khaled

#include <reg552.h>

/* Fichier contenant les dclaration des diffrents registres du noyau 8051 */

void Main(void) int i;

{
/*Dclaration de variables */ /* une variable de 10 caractres */

char datas[10]="bonjour!!!";

/* S0CON = 0x52 ; Configuration et Activation du Timer et du registre SCONP(Serial Configuration) pour les paramtres de communication srie : 9600 ,8,N,1.

TMOD = 0x20 ; TH1 = 0xFD ;

*/

TR1 = 1 ;

/*lancer le timer1*/

for (i=0 ; i<10; i++ )

/* Envoi des caractres de la variable datas sous forme dune suite de codes ASCII */

{
while ( !TI) ; TI = 0 ;

S0BUF = datas [ i ] ;

}
8 Jlassi Khaled

IV.1 Phase de simulation. Une fois le programme saisi, nous pouvons lancer la compilation et ldition des liens avec le menu suivant : Project >> Build target ou Rebuild all target files si vous avez modifi plusieurs fichiers du projet. Ou utiliser licne correspondante

En bas de lcran, apparatra un message indiquant que le programme a t compil et affichant les erreurs sil y en a. Dans notre exemple et avec un fichier tp1.c on devra retrouver le message suivant:
Build target target 1 Compililng tp1.c. Linking. 0 Error(s) , 0 Warning(s)

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

On doit retrouver le rsultat reprsent ci-contre. On voit bien la flche jaune dans la fentre du fichier C qui indique linstruction excuter.

La Slction de la fentre du fichier C permet de la rendre active. Nous pouvons alors commencer excuter le programme pas pas avec le menu Debug >> Step ou la touche F11. On constatera quaprs chaque instruction la flche se dplace vers linstruction suivante ; en arrivant linstruction printf ( ), le message apparatra dans la fentre du port srie. Au niveau de linstruction scanf ( ) lexcution sera bloque, en effet la fonction scanf met le programme (le microcontrleur) en tat dattente et il ne passe linstruction suivante quaprs la rception dune donne sur le port srie. Pour simuler la rception dune donne, il suffit dactiver la fentre du port srie en cliquant dedans avec la souris et en tapant une touche du clavier. Lexcution pourra alors continuer et on verra safficher sur la fentre du port srie le message correspondant au rsultat du traitement de la donne saisie au clavier.

IV.2 Adaptation du programme la configuration matrielle. Le faite que la simulation sest droule sans erreurs permet de conclure avec une grande probabilit que le programme est correcte mais ne signifie pas absolument quil sexcutera exactement de la mme manire dans la carte cible. La diffrence dexcution du programme dans les deux phases (simulation et aprs chargement)

10

Jlassi Khaled

est due principalement au faite que le compilateur ne dispose pas suffisamment dinformations concernant : La configuration matrielle de la carte (espaces dadressage, tailles des mmoires, etc..). Les valeurs dinitialisation des registres au lancement du programme. Les ressources utilises par le moniteur comme dans notre cas. 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 : Le moniteur occupe la zone du CODE 00007FFF h, ce qui signifie quon doit indiquer au compilateur que cette zone ne peut tre utilise pour loger le programme gnr. La mmoire U3 occupe la plage dadresses 8000FFFF h des zones CODE et DATA en mme temps. Lutilisation de plages communes pour le code et les donnes provoque lcrasement de lun par lautre. Pour remdier ce problme, Keil fournit un fichier startup.a51 se trouvant dans le rpertoire C51\Lib et qui contient du code prt tre paramtr par un utilisateur pour ladapter la configuration matrielle. Ce fichier contient des sections pour : Dterminer la taille totale des mmoires internes et externes. Dterminer les valeurs dinitialisation de ces mmoires. Dterminer ladresses partir de la quelle le code doit tre log. 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.

Commencer par slectionner Options for Target Target 1 partir du menu droulant de Target1 dans la fentre gauche (voir figure ) Dans la fentre qui apparatra, slectionner longlet Target 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

et choisir les paramtres

Slectionner longlet Output et cocher la case Create HEX File pour que le compilateur gnre un fichier au format Hexadcimal pouvant tre charg dans le carte.

Il est possible de changer la destination denregistrement du fichier .HEX avec le bouton Select*folder for Objects

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.

4. Le microcontroleur (moniteur) indique le nombre doctets reus si le transfert sest droul sans incidents ou affiche un message derreur dans le cas contraire. IV.4 Excution du programme. Une fois le programme charg, on peut lexcuter en utilisant la commande G suivie de ladresse de la premire instruction excuter. Si par exemple la premire instruction du programme se trouve ladresse 8000h ; on lexcute avec la commande G 8000. Dans notre exemple nous avons charg le programme partir de ladresse 9000h. Mais a ne veut pas dire que la premire instruction se trouve cette adresse, en effet le compilateur commence par placer le code correspondant aux fonctions utilises (printf et scanf dans notre cas) et puis le code du programme proprement dit. Ce problme peut tre rsolu grce une option qui permet davoir les instructions assembleur gnres ainsi que leur emplacement mmoire dans la fentre Disassembly Window. Et on trouve ladresse 0x0000 une instruction de saut vers la premire instruction du programme. Pour avoir cette adresse, passer en mode dbogage et slectionner le menu View>>> Disassembly Window . Dplacer le curseur dans la fentre qui apparatra jusqu ladresse C :0x0000. On trouvera linstruction de saut (LJMP : Long Jump) ainsi que ladresse de la premire instruction. Dans notre exemple ladresse de dbut est : 995D.
13 Jlassi Khaled

Lexcution du programme se fait alors avec la commande G 995D.

14

Jlassi Khaled

Universit Virtuelle de Tunis

Microprocesseurs et Microcontrleurs Annexe N1 : La famille C51

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 80C31 80C32 80C198 80C196 80C152 * * Intel Intel Intel DIP40 DIP40 128 256 E/S Parallle 32 32 E/S A/D Srie (bits) 1 port 1 port 10 10 Timers 2X16bits 3X16bits 1X16 + WD 1X16 + WD 2X16 bits Source Int 5 6 28 28 11

PLCC52 232 16E/S + 4E PLCC68 232 16E/S + 8E 1 port NC 256 40E/S 2 ports

Jlassi Khaled

80C451

Intel

NC

128

56E/S

1 port 8 8

2X16 bits 3X16 + WD 3X16 + WD

80C535 Siemens PLCC68 256 80C537 Siemens PLCC84 256 80C557 Philips PLCC

L'environnement de base du noyau 8051 est constitu de :


32 lignes d'E/S bidirectionnelles rparties en 4 ports : P0, P1, P2, P3 128 octets de RAM interne 2 TIMERS 16 bits, T0 et T1 fonctionnant suivant 4 modes une interface de communication srie UART une unit de contrle grant 5 interruptions selon 2 niveaux de priorit un circuit d'horloge embarqu ncessitant un quartz externe

On peut schmatiser ce noyau de la faon suivante :

Jlassi Khaled

II. Le 8031 et le 8032


Ces deux composants ont le mme brochage. On remarque que de nombreuses pattes ont des fonctions secondaires. Etudions ce brochage de plus prs:

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

III. Lejeu d'instructions du 8051. Signification des symboles utiliss:


Rn direct @Ri #data Un des registres actifs R0 R7 Adresse d'un octet de RAM interne, d'un port, ou SFR Adressage indirect par registre R0 ou R1 Donne 8 bits

#data16 Donne 16 bits bit rel addr11 addr16 Adresse au niveau du bit Adresse relative au PC en complment 2 de -128 +127 Adresse limite au bloc de 2Ko dans lequel figure l'instruction Adresse sur l'espace de 64Ko

L'instruction MOV : (MOV <dest>, <source>)


Mnmonique Syntaxe MOV MOV MOV MOV MOV MOV MOV MOV MOV A, Rn A, direct A, @Ri A, #data Rn, A Rn, direct Rn, #data direct, A direct, Rn Code octets cycle E8+n 1 E5 E6+i 74 2 1 2 1 1 1 1 1 2 1 1 2

F8+n 1 A8+n 2 78+n 2 F5 2

88+n 2

Jlassi Khaled

MOV MOV MOV MOV MOV MOV MOV

direct, direct direct, @Ri direct, #data @Ri, A @Ri, direct @Ri, #data

85 86+i 75 F2+i A6+i 76+i

3 2 3 1 2 2 3

2 2 2 1 2 1 2

DPTR, #data16 90

L'instruction MOVC : (MOVC A, @A+<base-reg>) permet de lire un octet dans la mmoire pgm. MOVC A,@A+DPTR 93 1 2 MOVC A,@A+PC 83 1 2

L'instruction MOVX : (MOVX <dest>, <source>) permet la lecture ou l'criture d'un octet en RAM externe. MOVX A,@Ri E2+i 1 2 1 2

MOVX A,@DPTR E0 MOVX @Ri,A

F2+i 1 2 1 2

MOVX @DPTR,A F0

Les instructions PUSH et POP permettent respectivement de sauvegarder sur la pile ou d'y rcuprer des donnes. PUSH direct C0 2 2 POP direct D0 2 2

Jlassi Khaled

L'instruction XCH : (XCH A, <byte>) change les donnes de l'accumulateur A et de l'octet adress. XCH A, Rn C8+n 1 1 2 1

XCH A, direct C5 XCH A, @Ri

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

L'instruction ADD : (ADD A, <byte>) additionne un octet et l'accu A, rsultat dans A. ADD A,Rn 28+n 1 1 2 1

ADD A, direct 25 ADD A, @Ri

26+i 1 1 2 1

ADD A, #data 24

L'instruction ADDC : (ADDC A, <byte>) additionne un octet, l'accu A et la retenue, rsultat dans A. ADDC A, Rn 38+n 1 1 2 1

ADDC A, direct 35 ADDC A, @Ri

36+i 1 1 2 1

ADDC A, #data 34

Jlassi Khaled

L'instruction SUBB : (SUBB A, <byte>) soustrait un octet ainsi que la retenue au contenu de A, rsultat dans A. SUBB A, Rn 98+n 1 1 2 1

SUBB A, direct 95 SUBB A, @Ri

96+i 1 1 2 1

SUBB A, #data 94

L'instruction INC : (INC <byte>) incrmente un octet ou DPTR. INC @Ri INC A 06+i 1 1 04 1 1 2 1

INC direct 05 INC Rn

08+n 1 1 1 2

INC DPTR A3

L'instruction DEC : (DEC <byte>) dcrmente un octet. DEC @Ri DEC A 16+i 1 1 14 1 1 2 1

DEC direct 15 DEC Rn

18+n 1 1

L'instruction MUL : (MUL AB) multiplie l'accu A et le registre B, rsultat : octet faible dans A et octet fort dans B. L'instruction DIV : (DIV AB) divise le contenu de A par le contenu de B, quotient dans A et reste dans B. L'instruction DA : (DAA) ajustement dcimal de A. MUL AB A4 1 4 DIV AB 84 1 4

Jlassi Khaled

DA A D4 1 1

L'instruction ANL : (ANL <dest>, <source>) ralise un ET logique entre source et dest, rsultat dans dest. ANL A, #data ANL A, @Ri ANL A, direct ANL A, Rn 54 2 1

56+i 1 1 55 2 1

58+n 1 1 3 2 2 1 2 2 2 2

ANL direct, #data 53 ANL direct, A ANL C, /bit ANL C, bit 52 B0 82

L'instruction ORL : (ORL <dest>, <source>) ralise un OU logique entre source et dest, rsultat dans dest. ORL A, #data ORL A,@Ri ORL A, direct ORL A, Rn 44 2 1

46+i 1 1 45 2 1

48+n 1 1 3 2 2 1 2 2 2 2

ORL direct, #data 43 ORL direct, A ORL C, /bit ORL C, bit 42 A0 72

L'instruction XRL : (XRL <dest>, <source>) ralise un OU exlusif logique entre source et dest, rsultat dans dest.

Jlassi Khaled

XRL A, #data XRL A, @Ri XRL A, direct XRL A, Rn

64

2 1

66+i 1 1 65 2 1

68+n 1 1 3 2 2 1

XRL direct, #data 63 XRL direct, A 62

L'instruction CLR : (CLR <A/bit>) met A ou un bit 0 CLR A E4 1 1 CLR bit C2 2 1 CLR C C3 1 1

L'instruction CPL : (CPL <A/bit>) complmente A ou un bit CPL A F4 1 1 CPL bit B2 2 1 CPL C B3 1 1

L'instruction RL : (RL A) rotation vers la gauche du contenu de A L'instruction RLC : (RLC A) rotation vers la gauche du contenu de A+retenue L'instruction RR : (RR A) rotaion vers la droite du contenu de A L'instruction RRC : (RRC A) rotation vers la droite du contenu de A+retenue L'instruction SWAP : (SWAP A) change le quartet de poids faible avec celui de poids fort de A RL RLC RR RRC A 23 1 1 A 33 1 1 A 03 1 1 A 13 1 1

10

Jlassi Khaled

SWAP A C4 1 1

L'instruction SETB : (SETB <bit>) met 1 un bit SETB bit D2 2 1 SETB C D3 1 1

L'instrucion MOV : (MOV <bitdest>, <bitsrc>) copie le bitsrc dans le bitdest MOV bit, C 92 2 2 MOV C, bit A2 2 1

L'instruction ACALL : ralise un saut absolu inconditionnel L'instruction LJMP : ralise un saut long inconditionnel L'instruction SJMP : ralise un saut court par adressage relatif L'instruction JMP : ralise un saut indirect AJMP addr11 LJMP addr16 SJMP rel JMP E1 2 2 02 3 2 80 2 2

@A+DPTR 73 1 2

L'instruction JZ : saut si A=0 L'instruction JNZ : saut si A<>0 L'instruction JC : saut si retenue 1 L'instruction JNC : saut si retenue 0 L'instruction JB : saut si bit 1 L'instruction JNB : saut si bit 0 L'instruction JBC : saut si le bit est 1 et mise zero de celui-ci JZ rel 60 2 2 70 2 2 40 2 2

JNZ rel JC rel

11

Jlassi Khaled

JNC rel JB

50 2 2

bit, rel 20 3 2

JNB bit, rel 30 3 2 JBC bit,rel 10 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 CJNE A, direct, rel B4 B5 3 2 3 2

CJNE Rn, #data, rel E8+n 3 2

L'instruction DJNZ : (DJNZ <byte>, rel) dcrmente byte et saut si rsultat diffrent de 0 DJNZ direct, rel D5 DJNZ Rn, rel 3 2

D8+n 2 2

L'instruction NOP : pas d'opration NOP - 00 1 1

IV. Organisation de la mmoire interne. La mmoire occupe l'espace d'adresses 00 7FH (ou 00 0FFH pour 8052). Les registres fonction spciale (SFR) occupent dans tous les cas l'espace de 7FH 0FFH. Dans le cas o il y a 256 octets de RAM (8052 par exemple), une partie de la RAM se superpose avec les SFR. Mais les SFR sont alors disponibles qu'en adressage direct et la RAM n'est accessible qu'en adressage indirect (par pointeur)

12

Jlassi Khaled

IV.1 Les registres universels : Les 32 premiers octets de RAM interne peuvent tre utiliss en tant que registres universels. Mais seuls 8 de ces 32 octets peuvent tre actifs. On parle alors de 4 banques de 8 registres, l'activation de la banque se faisant l'aide des deux bits RS0 et RS1 du registre PSW.
adresse nom Banque RS1 RS0 1FH 18H 17H 10H 0FH 08H 07H 00H R7 R0 R7 R0 R7 R0 R7 R0 3 1 1

IV.2 Les Zones mmoire adressable au niveau du bit :

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 2FH 2EH 2DH 2CH 2BH 2AH 29H 28H 7F 7E 7D 7C 7B 7A 79 78 77 76 75 74 73 72 71 70 6F 6E 6D 6C 6B 6A 69 68 67 66 65 64 63 62 61 60 5F 5E 5D 5C 5B 5A 59 58 57 56 55 54 53 52 51 50 4F 4E 4D 4C 4B 4A 49 48 47 46 45 44 43 42 41 40

13

Jlassi Khaled

27H 26H 25H 24H 23H 22H 21H 20H

3F 3E 3D 3C 3B 3A 39 38 37 36 35 34 33 32 31 30 2F 2E 2D 2C 2B 2A 29 28 27 26 25 24 23 22 21 20 1F 1E 1D 1C 1B 1A 19 18 17 16 15 14 13 12 11 10 0F 0E 0D 0C 0B 0A 09 08 07 06 05 04 03 02 01 00

IV.3 Cartographie des SFR d'un 8031 (et 8032 indiqu par un *) Etat initial
F0

Symbole

Fonction

Adresse
F7

Adresse au niveau du bit


F6 F5 F4 F3 F2 F1

reg. pour mul. et div.

F0H

00000000

E7

E6

E5

E4

E3

E2

E1

E0

ACC

Accumulateur

E0H

00000000

D7

D6

D5

D4

D3

D2

D1

D0

PSW

registre d'tat

D0H CY AC F0 RS1 RS0 0V --P

00000000

TH2*

Poids fort du Timer 2 poids faible du Timer 2 Capture/rech du T2 Idem

CEH

00000000

TL2*

CDH

00000000

RCAP2H* RCAP2L* 14

CCH CBH

00000000 00000000 Jlassi Khaled

CF CE

CD

CC

CB

CA C9

C8

T2CON*

Contrle du T2

C8H
TF2 EXF2 RCLK TCLK EXEN2 TR2 C/T2 CP/RL2 BF BE BD BC BB BA B9 B8

00000000

IP

priorit des interruptions

B8H --- --- PT2


B7 B6

xx000000 PS PT1
B3

PX1
B2

PT0
B1

PX0
B0

B5 B4

P3

Port P3

B0H RD WR T1 T0 INT1 INT0 TxD RxD


AF AE AD AC AB AA A9 A8

11111111

IE

Validation des int.

A8H EA --- ET2 ES


A7 A6 A5

0x000000 ET1 EX1


A4 A3

ET0 EX0
A2 A1 A0

P2

Port P2

A0H A15 A14 A13 A12 A11 A10 A9 A8

11111111

SBUF

Donnes du port srie Contrle du port srie

99H
9F 9E 9D 9C 9B 9A 99 98

00000000

SCON

98H SM0 SM1 SM2 REN TB8 RB8 TI RI


97 96 95 94 93 92 91 90

00000000

P1

Port P1

90H ------------T2EX T2

11111111

TH1

Poids fort du Timer 1 Poids fort du Timer 0 poids faible du T1 poids faible du T0

8DH

00000000

TH0

8CH

00000000

TL1

8BH

00000000

TL0

8AH

00000000

15

Jlassi Khaled

TMOD

Modes pour T0 et T1

-------- ----- ---- ---- -------- ----- ---- ---89H GATE C/T M1 M0 GATE C/T M1 M0
8F 8E 8D 8C 8B 8A 89 88

00000000

TCON

Contrle de T1 et T2

88H TF1 -------87H SMOD 83H -- -- -- GF1 GF0 PD IDL TR1 TF0 TR0 IE1 IT1 IE0 IT0 -------- -----

00000000

PCON

Mode de consommation Poids fort de DPTR poids faible de DPTR Pointeur de pile

-- -- -- -----

0xxxxxxxx

DPH

00000000

DPL SP

82H 81H
87 86 85 84 83 82 81 80

00000000 00000111

P0

Port P0

80H AD7 AD6 AD5 AD4 AD3 AD2 AD1 AD0

11111111

IV.4 SFR supplmentaires (ou changes) des 80C535 par rapport aux 8032 : Etat Initial
F8

Symbole

Fonction

Adresse
FF FE

Adresse au niveau du bit


FD FC FB FA F9

P5

Port P5

F8H

11111111

EF

EE

ED

EC

EB

EA

E9

E8

P4

Port P4

E8H

11111111

P6

Port P6 (8E) Contrle du CAN

DBH

-----------

DAPR

DAH VinAREF VinAGND

00000000

16

Jlassi Khaled

ADDAT

Donne du CAN Contrle de CAN Poids fort de T2 poids faible de T22 registre 16 bits de capture, cmp et rech.

D9H
DF DE DD DC DB DA D9 D8

00000000

ADCON

D8H BD CLK CDH CCH BSY ADM MX2 MX1 MX0

00000000

TH2 TL2

00000000 00000000

CRCH

CBH

00000000

CRCL

CAH
CF CE CD CC CB CA C9 C8

00000000

T2CON Contrle du T2

C8H
T2PS I3FR I2FR T2R1 T2R0 T2CM T2I1 T2I0

00000000

CCH3 CCL3 CCH2 CCL2 CCH1 CCL1

Registre de capture et de comp. 3 Registre de capture et de comp 2 Registre de capture et de comp 1

C7H C6H C5H C4H C3H C2H

00000000 00000000 00000000 00000000 00000000 00000000

CCEN

Validation capt/Cmp

C1H

- - - COCAH3 COCAL3 COCAH0 COCAL0 2211

00000000

IRCON

Contrle des Int

C0H

C7

C6 C5

C4

C3

C2

C1

C0

00000000

17

Jlassi Khaled

EXF2 TF2 IEX6 IEX5 IEX4 IEX3 IEX2 IADC

IP1

Priorit des Int

B9H IP1.5 IP1.4 IP1.3 IP1.2 IP1.1 IP1.0

00000000

IEN1

Validation de Int

BF

BE

BD BC

BB

BA

B9

B8

B8H
EXEN2 SWDT EX6 EX5 EX4 EX3 EX2 EADC

00000000

IP0

Priorit des Int

A9H IP0.5 IP0.4 IP0.3 IP0.2 IP0.1 IP0.0

00000000

IEN0

Validation des Int

AF

AE

AD AC

AB

AA

A9

A8

A8H EAL WDT ET2 ES ET1 EX1 ET0 EX0

00000000

PCON

Mode de consommation

87H SMOD PDS IDLS GF1 GF0 PDE IDLE

0xxxxxxx

18

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

The indispensable PC Hardware book


Edition Addison-Wesley 2001 Auteur: Hans Peter Messmer Mise en Oeuvre et applications du microcontrleur 8051 Edition Masson , Paris 1996 Auteur : P. KAUFFMANN

Le microprocesseur Pentium : Architecture et programmation


Edition : Armand Colin 1998 Auteur : Patrick Cohen

Microprocesseurs du CISC au RISC,


Edition Dunod 1998

auteur: Henri LILEN

80386 architecture et circuit associs


Edition Eyrolles 1998 Auteurs: Eric Boit, Fabienne Niess-Gerber, Roland Dubois

Turbo Assembler user's guide


Borland International 1995

Programmer en assembleur sur PC


Editions Mico application 1995 Auteur: Holger SCHAKEL

Ingnierie des systmes microprocesseur


Edition Masson 1995 Auteurs: Eric Martin, Jean luc Philippe

Microsoft Macro Assembler Reference


Version 6.0 for MS OS/2 and MSDOS Edition 1995

Borland C++ 5.0


Guide du programmeur, Structure du langage, Techniques de programmation avances Implmentation du C ANSI Edition 1996. http://www.jls-info.com/julien/8051/ asem51.zip, broch32.jpg, brochage.htm, arith.htm, interruption.htm, serie.htm, timer.htm

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

You might also like