Micro-controleur C51 Support Complet Et TP

Embed Size (px)

Citation preview

Support de cours et de Travaux pratiques Microcontrleurs 80C552 - Support de cours - Documents de TP de 1 8

JELASSI Khaled Prof GE Edition 2009-2010

JELASSI Khaled

INTRODUCTION GENERALE

Depuis plusieurs annes, lutilisation des micro-ordinateurs est devenue de plus en plus frquente dans les chanes de commande de processus industriels. Cette automatisation doit suivre lvolution rapide des microprocesseurs et de la micro-informatique industrielle. Dans certains cas, linstallation dun PC savre difficile vus lespace physique quil occupe, sa consommation de puissance, son cot relativement lev pour cela la tendance soriente vers lutilisation des cartes architectures autour des microcontrleurs, ces cartes sont dotes dune intelligence pour le contrle commande des systmes numriques.

Profitant de ces avantages, nous avons choisi dutiliser, dans notre projet de fin danne, le microcontrleur 80C552 de la famille PHILIPS. En effet, ce microcontrleur offre plusieurs fonctionnalits qui peuvent tre exploites pour raliser des applications temps rel. Le 80C552 contient des lignes dentre-sortie bidirectionnelles lui permettant de communiquer avec son environnement et daccder ses diffrents blocs. Nous allons prsenter dans une premire partie ce microcontrleur avec son environnement et les diffrentes parties qui lui sont associes. Nous allons exploiter, dans la deuxime partie, les TIMER 0 et 1 pour la gnration de bases de temps fixes pour les tches cycliques. Comme nous allons utiliser les sorties MLI pour la gnration dun signal Modul en Largeur dImpulsion. Dans la dernire partie, les entres analogiques nous serviront pour effectuer la conversion Analogique-Numriques. Les rsultats seront exploits dans un environnement de MATLAB.

Dpartement Gnie Electrique

-1-

2009-2010

JELASSI Khaled

CHAPITRE I :

PRESENTATION GENERALE DU MICROCONTROLEUR 80C552 ET DE LA CARTE APALACHES 80C552++

Dpartement Gnie Electrique

-2-

2009-2010

JELASSI Khaled

I -Le microcontrleur 80C552 :Un microcontrleur est un circuit intgr capable dexcuter un programme existant dans une mmoire interne ou externe et de grer dune manire indpendante un ensemble de processus lis leurs priphriques de sortie. Les instructions ncessaires pour la commande de la carte sont introduites par le programmeur laide dune interface de communication et stocks dans la mmoire vive de la carte.

I.1 - Prsentation fonctionnelle :La socit PHILIPS propose sous lappellation 80C552 une version dun microcontrleur de la famille 80C51 dINTEL. En effet, il utilise le mme noyau que le 80C51, donc il est compatible 100% avec celui-ci au niveau du code. Ce microcontrleur possde un port srie bidirectionnel capable dmettre et de recevoir simultanment travers un registre fonction spcial (SFR) occupant ladresse 99H [annexe 3] de la mmoire interne du microcontrleur: cest le registre SOBUF. Pour accder ce registre : En criture (transmission), il suffit dcrire le caractre transmettre dans ce registre. En lecture (rception), il suffit de lire le caractre recevoir de ce registre.

Le 80C552 dispose des fonctions suivantes : - 256 octets de RAM interne. - Deux TIMER 16 bits standards (T0 et T1) :"noyau C51". - Un troisime TIMER 16 bits (T2) coupl quatre registres de capture et trois registres de comparaison. - Un ensemble de 8 entres de conversion analogique-numrique avec une rsolution de 8bits. - Deux sortie PWM (MLI)de rsolution de 8 bits. - Cinq ports bidirectionnels de 8 bits TOR (tout ou rien) et un port dentre unidirectionnel analogique (C.A.N). - Un port srie IC configurable en mode matre ou esclave. - Un port srie UART 8051. - Un systme de gestion de quinze sources dinterruption sur deux niveaux de priorit. - Un chien de garde (watch dog).

Dpartement Gnie Electrique

-3-

2009-2010

JELASSI Khaled

La figure 1 donne le schma fonctionnel du 80C552 sous forme de blocs :

T0 & T1

DUAL PWM

ADC

Figure -1-

Schma fonctionnel du 80C552

Au cours de ce projet nous avons exploit les ports dentres-sorties, le port PWM "Modulation de Largeurs dImpulsions " et le port de Conversion Analogique Numrique(C.A.N). Les blocs fonctionnels correspondants sont reprsents en couleur sur la figure ci-dessus.

I.2 - Prsentation matrielle :Nous prsentons en annexe 2 le brochage du 80C552.

Dans le cadre de notre projet de fin danne, On est appel utiliser quelques foncions offertes par le microcontrleur 80C552 afin de gnrer en premier lieu des bases de temps fixes pour des tches cycliques et des signaux moduls en largeur dimpulsion pour la gnration de rapport cycliques variable. En deuxime lieu, notre application consiste acqurir des signaux analogiques travers le port P5 de C.A.N.

Dpartement Gnie Electrique

-4-

2009-2010

JELASSI Khaled

La carte qui sera utilise au cours de ce projet est base du microcontrleur 80C552. Cette carte est idale pour le prototypage de systmes numriques de contrle commande de complexit moyenne. Cette carte est quipe de:[annexe 1] U1 : une Eprom 64Koctets, seulement les 32Koctets infrieurs sont utiliss et occupent la zone de code 0000..7FFFH Cette zone contient le moniteur qui est un programme excut la mise sous tension de la carte et qui offre certaines fonctions d'exploitation du microcontrleur. Les diffrentes fonctions disponibles du moniteur sont rsumes par le tableau suivant:

------- chargement et excution ------H: P ou : A ou [n aaaa] : G ou [aaaa] : ------- lecture des donnes ------M ,[aaaa] : X ,[aaaa] : I , : S : R: dsassemble liste la mmoire eXterne (Xdata) liste la mmoire Interne (data et Idata) affiche la valeur du Sfr(aa) affiche les Registres charge un programme Hexa (format Intel ou Motorola) excute en Pas a Pas l'instruction suivante affiche/modifie les points d'Arrt Go (ou excute le programme a l'adresse aaaa)

------- modification des donnes ------B ,[aaaa]= : E -[dd] : D -[dd] : F = : C = : initialise un Bloc de mmoire externe dite la mmoire Externe ( ou , , ) dite la mmoire interne (Data et iData) modifie la valeur du SFR(aa) Change le registre (Pc Sp Acc B Dptr psW r0..9)

Tableau-1- Fonctions du moniteur

U2 : une RAM 32 koctets, elle occupe les 32koctets infrieurs de la zone DATA ou donnes (0000..7FFFH). La zone situe de 7F007FFFH est utilise par le moniteur. Le reste peut tre utilis par dautres programmes.

Dpartement Gnie Electrique

-5-

2009-2010

JELASSI Khaled

U3 : une RAM 32 Ko non volatile: elle occupe les 32Koctets suprieurs des zones CODE et DATA en mme temps. Nous pouvons stocker dedans du code et des donnes. Ces circuits peuvent tre configurs de plusieurs manires travers 11 cavaliers qui permettent dimposer les adresses des mmoires de donnes et de code.[Annexe 1]

U10000..7FFFh 32 Ko

U20000..7FFFh 32 Ko

U38000..FFFFh 32 Ko

CODE

DATA

CODE +DATA

Figure-2- Configuration de la carte 80C552++

La description dtaille des diffrentes configurations possibles et le rle des diffrents cavaliers sont fournis dans lannexe concernant la documentation de la carte.

II Configuration de linterface srie :II.1- Registre SCON "Serial Control": Le registre de fonction spciale SCON assure le contrle et indique ltat de linterface srie. SCON permet entre autre, la slection du mode de communication. Son adresse directe est 98h [Annexe 3], et il est adressable par bit. SCON :

9F SM0

9E SM1

9D SM2

9C REN

9B TB8

9A RB8

99 TI

98 RI

Le mode de fonctionnement du port srie est: SM0 SM1 Mode0 0 1 1 0 1 0 1 0 1 2 3

DescriptionRegistre dcalage UART 8 bits UART 9 bits UART 9 bits

vitesseFosc/12 Variable Fosc/64 Ou Fosc/32 Variable

SM2 REN

: communication multiprocesseur possible en mode 2 et 3. : valide la rception srie, RI doit tre mis 1 par programme pour autoriser la rception.

Dpartement Gnie Electrique

-6-

2009-2010

JELASSI Khaled

TB8 RB8

: correspond au 9me bit transmettre en mode 2 et 3. : correspond au 9me bit transmettre en mode 2 et 3.En mode 1, si SM2=0, RB8 correspond au bit de stop reu.

TI

: est lindicateur dmission. Il est automatiquement mis 1 : A la transmission du 8me bit en mode 0 ; A la transmission du bit de stop dans le autres modes. Avant une opration dmission, il doit tre remis 0 par programme.

RI

: est lindicateur de rception. Il est automatiquement mis 1 : A la rception du 8me bit en mode 0 ; A rception du bit de stop dans le autres modes. RI doit tre remis 0 par programme.Tableau-2- Registre SCON

Exemple : Prenons lexemple o on na pas besoin dune communication multiprocesseur (SM2=0), on veut travailler en mode1: 8 bits vitesse variable (SM0=0 et SM1=1), on valide la rception srie (REN=1), les indicateurs de rception et dmission sont initialiss 0 : SCON 0 1Mode 1

0

1Rception Valide

-

-

0

0

TI et RI initialiss 0

SCON a donc pour valeur : {. SCON =0x50 ; ..}

SCON= 50h =>

II.2- Registre TMOD "TIMER mode" : Le registre TMOD est dadresse directe 89h [annexe 3], il sert pour le contrle du mode fonctionnement des TIMER 0 et 1. Quatre bits sont ddis chaque TIMER.

Dpartement Gnie Electrique

-7-

2009-2010

JELASSI Khaled

Gate

C/T

M1

M0

Gate

C/T

M1

M0

TIMER 1

TIMER 0

Gate =1, le TIMER x est valid seulement lorsque sa broche dentre INTx est ltat 1et que le bit TRx du registre TCON est 1. Gate =0 le TIMER est valid si TRx =1 . C/T : permet la slection de la fonction du timer C/T=0 le TIMER est en fonction temporisateur C/T=1 le fonction partir des prsents sur la dentre Tx M1 M0 0 0 1 0 1 0 Compteur 13 bits Compteur 16 bits Compteur 8 bits rechargement automatique; le contenu de THx est recharg dans TLx quand celui-ci passe 0 TIMER0 : TL0 devient un compteur contrl normalement par les bits de contrle du TIMER0 .TH0 est configur en temporisateur 8 bits contrl par les bits de contrle du TIMER 1 TIMER1 : compteur 1 larrt Mode TIMER est en compteur vnements broche

1

1

Tableau-3-

Registre TMOD

Ainsi, le bit GATE permet de valider la prise en compte des changements dtats ou des transitions dtectes sur la broche INT0 ou INT1. Le bit C/T permet de choisir entre la fonction compteur et la fonction temporisateur .Les deux bits M0 et M1 assurent le choix parmi lun des quatre modes de fonctionnement possibles. Exemple : Si on veut faire fonctionner le TIMER 1 en mode compteur 8 bits rechargement automatique (TIMER1 : M1=1; M0=0), on doit agir sur le bit de poids 5 et le mettre 1. Pour cela, on utilise la mthode de masquage logique qui consiste crire un 1 dans ce bit:

Dpartement Gnie Electrique

-8-

2009-2010

JELASSI Khaled

TMOD =TMOD OR 25 =TMOD OR 32 suivante : {.. TMOD | = 0x20;

; ce qui scrit en langage C sous la forme

..} Si on veut que le TIMER 0 soit valid lorsque sa broche dentre INT0 est ltat 1 et que le bit TR0 du registre TCON est 1, on met GATE =1 et pour utiliser le TIMER comme compteur 8 bits rechargement automatique, on met M1=1 et M0=0 On a ainsi TMOD =10 {.. TMOD =0xA ; } II.3- Vitesse de transmission : Parmi les quatre modes de fonctionnement du port srie deux sont vitesse variable : modes 1 et 3, dans ces deux modes la vitesse est dtermine par la frquence de dbordements (dpassement de 255 et passage 0) du TIMER 1, 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.

TH1Rechargement

Fosc/12

Passage 0

TL1

Indication de Dbordement

Vitesse de Transmission (Vers SOBUF)

Fosc=11.0592 MHz

Figure -3-

Gnration de la vitesse de transmission du port srie

Fonctionnement : La valeur de TH1 est charge dans TL1 qui est incrment avec une frquence Fosc/12*32. Une fois TL1 repasse 0, il y a indication de dbordement ainsi quun

Dpartement Gnie Electrique

-9-

2009-2010

JELASSI Khaled

rechargement de TL1 avec la valeur de TH1 et le cycle recommence: cest la frquence de dbordement qui reprsente la vitesse de transmission. Si on dsire avoir F1 comme frquence de sortie ; on doit alors avoir F1 dbordement par seconde do TL1 doit dborder chaque T1 =1/F1 seconde, donc TL1 doit tre incrment N fois avec N=T1/T=Finc/F1 (avec la frquence dincrmentation de TL1 est Finc=Fosc/12*32); et comme par dfinition le dbordement cest le passement de 255 0. Alors TH1 doit contenir TH1= 256 N.

TH 1= 256 K Fosc 384 BRAvec : K= 1 2 si SMOD = 0 si SMOD = 1

BR est le Baud Rate souhait : la vitesse (frquence) de communication. Fosc=11.0592 MHz : frquence du quartz. Supposons quon veut tablir une liaison srie avec une vitesse BR = 9600 Bauds avec

Exemple :

un microcontrleur ayant une frquence dhorloge de 11.0592 Mhz, en appliquant la formule on aura :

TH 1 = 256

1 11059200 = 256 3 = 253 = 0 fdh 384 9600

On crit :

{ TH1=0xfd ; }

II.4- Registre TCON "Timer Control " :

Le registre TCON peut tre adress au niveau du bit. Les quatre bits du poids fort concernent directement les TIMERS 0 et 1 .Les quatre bits du poids faible concernent les sources dinterruption externe INT0 et INT1.TCON est dadresse directe 88h [Annexe 3].

Dpartement Gnie Electrique

- 10 -

2009-2010

JELASSI Khaled

TCON : TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

TF1

: indicateur de dbordement du TIMER1. Mis 1 automatiquement lorsque le compteur passe 0. Si linterruption correspondante est autorise, il est remis 0 automatiquement quand le sous programme dinterruption est excut.

TR1

: Bit de dclenchement du TIMER1 ; il doit tre positionn par programme 1 (pour lancer) ou 0 (pour arrter) .

TF0 TR0 IT1

: indicateur de dbordement du TIMER0. Identique TF1. : Bit de dclenchement du TIMER0, mme fonctionnement que TR1. : Slection du type devant dclencher linterruption depuis la source INT1. = 0 interruption sur dtection dun niveau 0 sur INT1. = 1 interruption sur dtection dune transition ngative (1 vers 0).

IE1

: Indicateur de transition sur la source externe INT1. Cet indicateur est mis 1 automatiquement lorsquune transition est dtecte sur la borne INT1. Lors du service dinterruption cet indicateur est mis 0.

IE0 IT0

: Indicateur de transition sur la source externe INT0. identique IE1 : = 0 interruption sur dtection dun niveau 0 sur INT0. = 1 interruption sur dtection dune transition ngative.

Tableau-4- Registre TCON

Exemple : Le registre TCON tant adressable au niveau du bit, pour dclencher le TIMER0 (respectivement TIMER1), on met: TR0 =1 (resp. TR1=1). II.5- Registre PCON "Power Control register" : Ce registre est trs utile en effet il nous permet de ddoubler la frquence de communication du port srie.

Dpartement Gnie Electrique

- 11 -

2009-2010

JELASSI Khaled

PCON : SMOD SMOD ------GF1 GF0 PD IDL

: Mis 1, ce bit assure un doublement de la frquence de communication du port srie obtenue partir du TIMER1.

GF1 GF0 PD

: Indicateur gnral sans fonction particulire. : Indicateur gnral sans fonction particulire. : Validation du mode Power Down : la mise 1 du bit PD est la dernire opration qui prcde la mise en sommeil du microcontrleur.

IDL

: Validation du mode IDLE : la mise 1 du bit IDL est la dernire opration qui prcde la mise en veille du microcontrleur.Tableau-5Registre PCON

Exemple : Pour doubler la frquence de communication du port srie, on force le bit SMOD 1 ; le masquage logique permet dcrire : PCON = PCON OR 27 = PCON OR 128 { PCON | =0x80 ; .} II.6- Les interruptions : IEN0 "Interrupt Enable 0" : Une interruption ne peut tre prise en compte et excute que si le programmeur le dcide. Les deux registres IENO et IEN1 adressables au niveau du bit, regroupent les bits de contrle qui permettent dautoriser individuellement les diffrentes sources dinterruption. Pour autoriser une source, il suffit de mettre 1 le bit de contrle affect la source .A cette opration, il faut ajouter la mise 1 du bit EA. Ce bit permet de valider ou de suspendre toutes les demandes dinterruption.[Annexe 4] On se contente de prsenter la structure de IEN0; IEN1 tant entirement consacre aux interruptions du TIMER2. IEN0 est adressable au niveau du bit, dadresse directe A8h [Voir Annexe 3].

Dpartement Gnie Electrique

- 12 -

2009-2010

JELASSI Khaled

EA

EAD

ES1

ES0

ET1

EX1

ET0

EX0

EA

: Autorisation gnrale. : Autorisation dinterruption partir du port I2C. : Autorisation dinterruption du port srie. : Autorisation dinterruption partir du Timer1 : Autorisation dinterruption partir de la source Externe 1 : Autorisation dinterruption partir du Timer0 : Autorisation dinterruption partir de la source Externe 0Tableau-6registre IENO

EAD : Autorisation dinterruption du CAN. ES1 ES0 ET1 EX1 ET0 EX0

Exemple : Les lignes de programme permettant lautorisation gnrale et lautorisation dinterruption partir du TIMER 0 sont : {. EA =1 ; ET0=1 ; ..}

Dpartement Gnie Electrique

- 13 -

2009-2010

JELASSI Khaled

CHAPITRE II :

Exploitation des sorties PWM

Dpartement Gnie Electrique

- 14 -

2009-2010

JELASSI Khaled

I- Gnration des bases de temps fixes pour les tches cycliques :I.1- Les TIMERS 0 et 1 : Un TIMER reprsente un sous-ensemble capable dassurer des fonctions de comptage ou de temporisation. La notion de comptage est lorsque lon associe des vnements externes appliqus sur une des broches INTx du microcontrleur. Le registre du TIMER est alors incrment en fonction de ces vnements. Par contre, dans la fonction temporisation, le registre est incrment partir du circuit dhorloge interne au microcontrleur. Les deux TIMERS de 16 bits T0 et T1 sont dots dun compteur 16 bits accessible sous la forme de deux registres de 8 bits faisant partie des registres fonction spciale: o TH0 et TL0 pour le TIMER 0 o TH1 et TL1 pour le TIMER 1 Ces deux TIMER sont configurables partir des deux registres TMOD et TCON vus

prcdemment. En mode temporisateur (C/T=0), lincrmentation des registres a lieu une fois par cycle machine. La frquence maximale de comptage est donc gale au 1/12 de la frquence dhorloge du processeur.CLK Passage 0

TIMERx Compteur 8 ,13 ou 16 bits

Indication de dbordement

Evnement

Fosc/12

Figure -4-

TIMERx en mode temporisateur

En mode compteur (C/T=1), lincrmentation du registre a lieu chaque front descendant enregistr sur lentre associe au compteur. La frquence maximale de comptage est limite alors une frquence 24 fois plus faible que celle de lhorloge du processeur.

Fronts descendants

TIMERx Compteur 8 ,13 ou 16 bits

Passage 0

Indication de dbordement

Evnement

Signal externe appliqu Sur la broche INTx

Figure -5-

TIMERx en mode comptage

Dpartement Gnie Electrique

- 15 -

2009-2010

JELASSI Khaled

I.2- Application: Les tapes de llaboration de cette application sont les suivantes :

On commence par configurer la liaison srie : Choisir le mode 1 (UART 8 bits vitesse variable). Valider la rception. Initialiser les indicateurs dmission et de rception 0 : S0CON=0x50 On choisit pour le TIMER 1 le mode compteur 8 bits rechargement automatique, il sagit de mettre le bit de poids 5 1 : TMOD | = 0x20 La valeur de TH1 est calcule en imposant une vitesse de transmission de 9600Bauds, la frquence du microcontrleur tant de 11.059200 Mhz : TH1=0xfd Le TIMER1 est ensuite dclench par mise 1 de TR1. Le TIMER0 est configur en compteur 8 bits rechargement automatique TMOD=0xA La valeur de la frquence gnrer est ensuite saisie partir de la liaison srie. Pour avoir cette valeur, il faut charger TL0 par le contenu de TH0 qui peut tre calcul Le TIMER 0 est activ par mise 1 de TR0 Autoriser linterruption associe au dbordement du TIMER0. Excuter le programme dinterruption.

Dpartement Gnie Electrique

- 16 -

2009-2010

JELASSI Khaled

#include #include void main (void) { int a; float b; unsigned char c; S0CON = 0x50; TMOD |= 0x20; TH1 = 0xfd; TR1 = 1; TI = 1; TMOD=0xA; printf ("donner une frquence en khz :\n "); scanf ("%d",&a); b = 11059.2/(a*12*2); b = (int) b; c=255-b; TH0= c ; TL0=TH0; TR0=1; ET0=1; EA=1 ; while(1) { } }

//inclure le fichier contenant les dclarations des //registres fonction spciale et les bits adressables

// TIMER0 en compteur 8 bits rechargement //automatique // Saisie de la frquence du signal gnrer // Ce bloc permet de calculer la valeur qui doit // contenir TH0 pour avoir la frquence voulue

//Chargement de la valeur de TH0 dans TL0 // activer le TIMER0 // Autorisation de linterruption associ au //dbordement du TIMER0 // Autorisation gnrale des interruptions

//Corps du programme principal

void signal (void) interrupt 1 { P4 = P4^0xff; }

// Programme dinterruption

Lexprience a montr quil existe des contraintes qui nous empchent davoir exactement la frquence voulue. En effet, linstruction b = (int) b; qui est utilise pour arrondir la valeur de b; afin de pouvoir affecter TH0 par sa valeur entire, tait la source majeur de lerreur. A cela sajoute le codage sur 8 bits dans TH0 qui nous ne permet pas davoir une bonne prcision pour certaines frquences. Cette dernire limitation peut tre rsolue par lutilisation de TIMER2 puisquil fonctionne en 16 bits en mode rechargement automatique .Dpartement Gnie Electrique

- 17 -

2009-2010

JELASSI Khaled

II -Gnration dun signal Modul en Largeur dImpulsion :II.1- Exploitation des sorties MLI:

Les 80C552 sont quips de deux sorties PWM0 et PWM1 capables de fournir un signal carr dont la frquence et le rapport cyclique peuvent tre programms. [Annexe 5] La frquence du signal est dfinie partir de la frquence du microcontrleur Fosc divise par deux. Cette frquence de base peut tre ensuite divise partir du pr-diviseur de 8 bits "PWMP". La frquence rsultante est donne par la formule :

f PWM =

Fosc 2 ( 1+ N PWMP ) 255

O : NPWMP reprsente la valeur place dans le pr-diviseur "PWMP".

Ce ci donne

N PWMP =

Fosc 1 2255 f PWM

La dtermination du rapport cyclique est, par contre, indpendante pour chaque sortie. Elle sobtient partir de la valeur place dans un registre (PWM0 ou PWM1) qui va tre compare la valeur courante du compteur. Lorsque la valeur du compteur devient suprieure celle du registre PWMx, la sortie correspondante (PWM0 ou PWM1) passe alors ltat haut. Le rapport cyclique est donn par la formule :

= 255 PWMx255

Dpartement Gnie Electrique

- 18 -

2009-2010

JELASSI Khaled

Registre PWM0

BUS INTERNE

Fosc/2 Pr-diviseur PWMP

Comparateur 8bits

Etage sortie

ieCompteur 8bits

PWM0

Comparateur 8bits

Etage sortie

INTERNE

sortieRegistre PWM1

PWM1

Figure-6-

Schma fonctionnel des sorties PWM

II.2- Application :Les tapes de llaboration de cette application sont les suivantes :

On commence par configurer la liaison srie : Choisir le mode 1 (UART 8 bits vitesse variable). Valider la rception. Initialiser les indicateurs dmission et de rception 0 : S0CON=0x50 On choisit pour le TIMER 1 le mode compteur 8 bits rechargement automatique, il sagit de mettre le bit de poids 5 1 : TMOD | = 0x20 La valeur de TH1 est calcule en imposant une vitesse de transmission de 9600Bauds, la frquence du microcontrleur tant de 11.059200 Mhz : TH1=0xfd Le TIMER1 est ensuite dclench par mise 1 de TR1. La saisie de la frquence gnrer et du rapport cyclique voulu se fait partir de la liaison srie. Selon cette frquence, la valeur charger dans le prdiviseur PWMP est calcule. De mme, la valeur du rapport cyclique permet de calculer la valeur charger dans le registre PWM0.

Dpartement Gnie Electrique

- 19 -

2009-2010

JELASSI Khaled

Le programme permettant de gnrer un signal carr modul en largeur dimpulsion laide des sorties PWM est le suivant : #include #include void main( void ) { long int Fosc=11059200; int f, r ; S0CON = 0x50;//inclure le fichier contenant les dclarations //des registres fonction spciale et les bits //adressables

0

1

0

1

-

-

-

-

// validation de la rception et mode 1 de //fonctionnement

TMOD = 0x20;

0

0

1

0

-

-

-

-

TH1 = 0xfd; TR1 = 1; TI = 1; printf (" Donner une frquence en hz : "); scanf ("%d",&f); printf ("Donner un rapport cyclique en pourcent:"); scanf ("%d",&r);

// Timer 1 configur en temporisateur 8 bits // vitesse=9600 bauds; Fosc=11.0592Mhz // lancer le Timer 1 // indicateur de transmission // Saisie de la frquence du signal gnrer // Saisie du rapport cyclique

PWMP =

Fosc 1 ; 2 255 f

// Chargement du registre PWMP par la // valeur qui nous permet davoir la frquence // voulue //Chargement du registre PWM0 qui permet //davoir un signal rapport cyclique fixe //Corps du programme principal

PWM0=255(1r0.01); while(1) { }; }

Dpartement Gnie Electrique

- 20 -

2009-2010

JELASSI Khaled

CHAPITRE III :

CONVERTISSEUR ANALOGIQUE NUMERIQUE

Dpartement Gnie Electrique

- 21 -

2009-2010

JELASSI Khaled

Le 80C552 comporte huit Convertisseurs Analogique /Numrique, connects au port P5 [Annexe 6] ,et dont la rsolution est de 10 bits et ayant une alimentation indpendante par les pattes 60 et 61(AVSS et AVDD). La tension convertir doit tre comprise entre 0 et 5V. La conversion seffectue en cinquante cycles machines ou 50 microsecondes pour une frquence de 12 Mhz. Le convertisseur utilise la technique dapproximation successive et donne un rsultat sur 10 bits.

I-

Aspect matriel :La figure 7 prsente lorganisation de lensemble de la conversion. Un multiplexeur

gre les huit entres analogiques. Une de ces entres est mise en relation avec le CAN si son code de canal est programm dans les trois bits de poids faible (AADR0, AADR1 et AADR2) du registre ADCON: "Analog Digital CONversion". La conversion peut tre lance soit par programme, soit par dtection dun front montant sur la broche STADC [Annexe2]. Ce choix doit tre dfini par le programmeur en modifiant ltat du bit ADEX du registre ADCON (figure 7). Lorsque la conversion est lance par un vnement externe sur la broche STADC, celui-ci nest pris en compte qu la fin de la conversion en cours. Dans le cas dune synchronisation logicielle, le bit ADCS permet de lancer la conversion. Ce mme bit ADCS avec le bit ADCI permettent de grer le CAN( tableau 7).

Le bit ADCI peut dclencher une interruption si la source constitue par le CAN est autorise (page 24). Lindicateur ADCI doit tre remis imprativement 0 par le

programmeur car la conjugaison ADCI= 1 et ADCS =0 (fin dune conversion) empche tout lancement de nouvelle conversion.

Dpartement Gnie Electrique

- 22 -

2009-2010

JELASSI Khaled

STADCADC0 ADC1 ADC2 ADC3 ADC4 ADC5 ADC6 ADC7 AVDD

Multiplexeur 8 entres

Convertisseur Analogique /numrique 10 bits

AVSS AVref+ AVref-

ADCH ADCON

0

1

2

3

4

5

6

7

0

1

2

3

4

5

6

7

LSB..MSB 10 bits de conversion

BUS

INTERNE

Figure -7-

Schma fonctionnel de lensemble de conversion

II- Registres fonction spciale (ADCON et ADCH):Les registres fonction spciale ddis au CAN sont au nombre de deux : Le registre ADCH : "Analogic Digital Converter High". Il occupe ladresse directe C6h [voir annexe3]. Il sert recueillir les huit bits de poids fort du rsultat de la conversion .Les deux bits de poids faible sont placs dans le deuxime registre fonction spciale ADCON "Analogic Digital CONtrol" qui occupe ladresse direct C5h [Voir Annexe 3]. Les fonctions assures par ADCON sont dtailles dans le tableau 7.

ADCON :ADC1 ADC0 ADEX ADCI ADCS AADR2 AADR1 AADR0

Tableau -7- registre de contrle du CAN

ADC1 : Bit 1 du rsultat de la conversion ADC0 : bit 0 du rsultat de 10 bits- 23 -

Dpartement Gnie Electrique

2009-2010

JELASSI Khaled

ADEX : autorisation de lancement externe dune conversion= 0 : conversion lance uniquement par mise 1 de ADCS = 1 : conversion lance par mise de ADCS =1 ou par signal extrieur (Broche STADC).

ADCI : Indicateur pour interruption .ADCI est mis 1 lorsque le rsultat duneConversion est disponible .Une interruption peut tre provoque et ce bit doit tre remis 0 par programme .Si ADCI est 1 , une nouvelle conversion ne peut pas tre lance. ADCI ne peut pas tre force 1 par programme.

ADCS : Bit de lancement et dtat .Mis 1 par programme, ADCS permet lelancement dune conversion .Pendant toute la dure de la conversion ce bit reste 1 et repasse automatiquement 0 pour signaler la fin de conversion .ADCS passe 0 en mme temps que ADCI passe 1 .ADCS ne peut pas tre remis 0 par programme . ADCI 0 0 1 1 ADCS 0 1 0 1 : CAN libre, une conversion peut tre lance : conversion en cours, lancement impossible : conversion finie, lancement impossible : combinaison impossible

AADR2 : Bit de slection dune des 8 entres analogiques AADR1 : Bit de slection dune des 8 entres analogiques AADR0 : Bit de slection dune des 8 entres analogiques. Exemple:Si on veut choisir lentre analogique ADC0, on doit fixer les trois bits de slection dune entre analogique 0 : AADR0= AADR1 =AADR2 =0, ce qui donne: ADCON &=0xF8 ; Si on veut que la conversion soit lance uniquement par mise 1 de ADCS, on doit lautoriser par mise 0 de ADEX ce qui donne

ADCON & =0xDF ;

Dpartement Gnie Electrique

- 24 -

2009-2010

JELASSI Khaled

III- Alimentation et tensions de rfrence :Le schma fonctionnel de lensemble de conversion montre la prsence dune alimentation directe pour le convertisseur (alimentation et masse analogique AVDD AVSS) ainsi que deux bornes destines recevoir la tension de rfrence. Le C.A.N permet la conversion de 8 signaux analogiques multiplexs et appliques au port P5 du microcontrleur. Chaque tension devant tre comprise entre AVref- =0V et AVref+ =5V. Le CAN a une rsolution de 10 bits, les rsultats de la conversions seront compris entre 0 et 210 = 1024 et donc un pas de conversion gal : AVref + AVref 5 = 1024 1024 et

V LSB =

A partir de la valeur numrique VN obtenue aprs la conversion, la valeur de la tension relle VA est calcule par :

VA = ( VN V LSB ) + AVref

Dans ce qui suit nous allons utiliser le port analogique du convertisseur, pour raliser une conversion analogique-numrique. Ensuite lexploitation des rsultats que ce soit pour la visualisation ou lanalyse sera faite par le logiciel MATLAB.

IV- Exploitation des entres analogiques du microcontrleur 80C552 :Dans cette application, le microcontrleur fait la conversion analogique-numrique dun signal appliqu sur lune des 8 entres analogique du port P5, puis il transmet la valeur numrise de lchantillon vers un PC travers la liaison srie. La rcupration de lchantillon sera faite par le logiciel MATLAB.

Dpartement Gnie Electrique

- 25 -

2009-2010

JELASSI Khaled

Exploitation

Chargement

Figure -8- Liaisons entre les lments de lapplication

Pour rcapituler nous allons donner une petite dmarche suivre :

Programme N1 : crit en langage C et excut sur le microcontrleur et qui permet :

La conversion analogique-numrique dun signal inject sur le port P5. Lmission de lchantillon converti sur la liaison srie la suite dune requte du logiciel MATLAB

Programme N2 : crit en MATLAB et excut sur un PC et qui permet : La rcupration des N chantillons convertis en format 8 bits. Lmission des requtes sous forme du caractre ESPACE.

A la suite de chaque requte envoye par MATLAB sur la liaison srie, le microcontrleur envoie un chantillon sil est disponible temps de conversion , si non la requte sera envoy en boucle jusqu ce que lchantillon sera prt.

Dpartement Gnie Electrique

- 26 -

2009-2010

JELASSI Khaled

Lalgorithme de cette application peut tre reprsent par lorganigramme suivant :

Initialisation

Slection de lentre Analogique

Lancement de la conversion

Non ADCI=1

Oui

ADCS=0 Non Oui Raliser la conversion

Attente de la requte MATLAB

getchar ();

Envoyer lchantillon

rinf=(ADCON>>6)&0x03; resultat=ADCH*4 + rinf; printf (\n %d,resultat);

Remettre ADCI 0

Figure-9-Organigramme du programme de la conversion

Dpartement Gnie Electrique

- 27 -

2009-2010

JELASSI Khaled

Le programme de le conversion est le suivant: #include #include void main (void) { unsigned int resultat , rinf; ADCON&=0xF8;

//slection du canal 0 (une des 8 entres //analogiques) par mise 0 des 3 premiers bits //du ADCON ; // mettre le bit ADEX 0 : conversion lance par //mise 1 de ADCS

ADCON&=0xDF;

while (1) { ADCON|=0x08; while(!(ADCON&0x10)) { }; while(ADCON&0x08) { }; getchar();

//Lancer la conversion par mise du bit ADCS 1 //Attendre jusqua ce que ADCI passe 1 // et //ADCS passe 0 ; //Attendre un //dmission caractre du MATLAB :ordre

rinf=(ADCON>>6)&0x03; resultat=ADCH*4 + rinf; printf ("\n %d",resultat); ADCON&=0xEF; } }

//lire les 2 bits du poids faible du rsultat de la //conversion partir du registre ADCON ; //lire les 8 bits poids fort et ajouter les 2 bits //poids faible ; //mission du rsultat vers le port srie ; //Remettre ADCI 0.

V- Exploitation des donnes dacquisition dans un environnement de MATLAB :V-1-Scma de principe:Il sagit dexploiter les rsultats fournis par le microcontrleur par MATLAB. Nous avons surtout insist sur la reproduction du signal par lenvironnement graphique de MATLAB.

Dpartement Gnie Electrique

- 28 -

2009-2010

JELASSI Khaled

Lexploitation de la liaison srie se fait comme suit :

w= serial('COM1'); set(w,'BaudRate',9600); fopen(w); fclose(w) ;

// Cration de de la liaison srie // Configuration de la liaison srie // Ouverture du port srie // Fermeture du port srie

Afin dassurer le synchronisme entre le microcontrleur et MATLAB, on a prvu dans les deux programmes des instructions qui grent la communication. En effet, le programme charg dans le microcontrleur attend le caractre ESPACE pour envoyer le rsultat de la conversion ; lmission de cette requte est assure par linstruction suivante :

fprintf(w, ) ;Ce caractre ESPACE est envoy bien videmment par le programme MATLAB et il reprsente en quelque sorte un ordre de transmission et une faon de synchroniser la conversion du microcontrleur et la saisie du MATLAB. Les chantillons rcuprs sont stocks dans un vecteur dont la taille augmente chaque fois quil y a un nouvel chantillon.

V-2-Organigramme MATLAB :Initialisation

Crer lobjet srie et configurer la liaison

Emission de la requte

Lecture et vrification des chantillons

Conversion de la tension en Volt

Affichage

Figure-10-Organigramme du lexploitation des rsultats

Dpartement Gnie Electrique

- 29 -

2009-2010

JELASSI Khaled

Le programme MATLAB qui permet dexploiter les donnes dacquisition est le suivant:

w= serial('COM1'); set(w,'BaudRate',9600); fopen(w); // Configuration de la liaison srie // et ouverture du port

z=0; for i=1:1:700 plot (z); fprintf (w,' '); b=fscanf(w,'%d'); // Emission de la requte // Lecture du port srie

while(length(b)~ =1) b=fscanf(w,'%d'); end k=(b*5)/1024; z=[z,k]; drawnow title('tension'); end // fermeture de la liaison srie // Conversion de la tension en volt // stockage des donnes dans le vecteur Z // Vrification de lchantillon

fclose(w); delete(w); clear w;

Dpartement Gnie Electrique

- 30 -

2009-2010

JELASSI Khaled

V-3-Validation exprimentale :Nous avons relev la figure11 pour une entre continue. Ceci nous a permis de vrifier la fonctionnalit de nos programmes.

Figure 11- Visualisation de la tension continue

En modifiant la valeur de la tension au niveau du GBF, on observe sur la figure12 les modifications en temps rel sur lcran graphique MATLAB.

Figure -12- Visualisation de la modification de la tension continue

En injectant une tension sinusodale damplitude 1.2 V crte crte et qui prsente une composante continue de 0.75 V , laffichage, par MATLAB, de la tension reconstitue arrive suivre la variation de la tension originale .

Dpartement Gnie Electrique

- 31 -

2009-2010

JELASSI Khaled

Figure 13- Visualisation de la tension sinusodale

Pour un nombre dchantillons plus grand et en faisant diminuer lamplitude de la tension progressivement, on voit apparatre cette variation clairement par laffichage de MATLAB.

Figure-14- Visualisation de la modification de la tension sinusodale

Dpartement Gnie Electrique

- 32 -

2009-2010

Annexes Travaux pratiques

Dcodage dadresses

Document 1 Dcodage dadresses : gnralits et tudes de cas (la carte 80c552++)

Gnralits Lexcution par un microprocesseur dune instruction daccs mmoire (oprations de lecture et dcriture) se traduit par lactivation des lignes des bus dadresses, de donnes et de contrle. Lvolution de lensemble de ces signaux dans le temps reprsente un chronogramme (ou cycle de bus) de linstruction en cours. Un chronogramme met en vidence plusieurs paramtres caractristiques dun microprocesseur tel que le temps pendant lequel les diffrents bus sont actifs, le dlai entre lactivation et la dsactivation des diffrents bus, etc. La figure suivante montre un chronogramme typique doprations daccs mmoire des microprocesseurs Intel (x86).

Figure 1: Cycle de Bus typique

ENIT 2me anne GE

1

Programmation de la famille des c 8051 et 8052 en C51 ( 80C552 )

Ces bus doivent tre interfacs aux bus correspondants du circuit adress (gnralement une mmoire), qui lui mme possde son propre chronogramme : il sagit dune sorte de synchronisation des deux chronogrammes des circuits adressant (microprocesseur ou microcontrleurs) et adress. Cette synchronisation doit tre effectue aussi bien au niveau temporel quau niveau logique (dcodage dadresses). Le bus de contrle dune mmoire est gnralement constitu des signaux suivants : Validation du circuit ;on le trouve dans les documents techniques sous les noms CS(-Chip Select ) ou CE ( Chip Enable ). Lecture ; on le trouve sous les noms RD (Read) ou OE (Output Enable). Ecriture ; Ce signal nexiste pas sur les ROM, les PROM et les EPROM puisquon peut pas crire dedans. On le trouve sous les noms WR (Write) ou WE (Write Enable).Rq : Ces signaux sont actifs au niveau logique bas.

Dans la suite, on va supposer que la synchronisation au niveau temporel est garantie et que les deux circuits ont des bus de donnes de mme taille. On traitera juste des cas trs simples ou le la plage dadressage (nombre des lignes dadresses)du p ne correspond pas la taille (nombre des lignes dadresses)de la mmoire. Dans ce cas il faut utiliser une fonction logique qui permet de placer la mmoire dans lun des espaces dadressage possibles du p : il sagit dune fonction de dcodage dadresses. Exemple 1: On considre un p ayant 16 lignes dadresses (A0 A15) ce qui correspond une plage dadressage de 64K (216) de 0000HFFFFH qui peut tre divise en deux espaces dadressage de 32 K : le 1er de 0000H 7FFFH et le 2me de 8000H FFFFH.A15 A14 A13 A12 0 0 1 1 0 1 0 1 0 1 0 1 0 1 0 1 A11 A10 A9 A8 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 A7 A6 A5 A4 0 1 0 1 0 0 1 1 0 0 1 1 0 1 0 1 A3 A2 A1 A0 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 Adresse en Hexa 0000 H 7FFF H 8000 H FFFF H

Tableau 1 : Espaces d'adressage dun avec 16 lignes dadresses

une mmoire avec 15 lignes dadresses (A0 . A14) donc une taille de 32K (215).

On voit bien que le seule diffrence entre les deux circuits est la ligne A15 ; et cest cette ligne qui servira placer la mmoire dans lun des deux espaces dadressage possibles du p.ENIT 2me anne GE 2

Dcodage dadresses

Dans ce cas, la fonction de dcodage est tout1er cas : 0000H 7FFFH

simplement CS = A15 .CS

A15Adresses A0..A14

Quand A15 est 0 ,ce qui correspond aux adresses 0000H 7FFFH (voir tableau 1), CS lest aussi et la mmoire est donc slectionne.

Bus de donnes

mmoire

Bus de contrle

Quand A15 est 1, ce qui correspond aux adresses 8000H FFFFH (voir tableau 1), CS lest aussi et la mmoire est donc inactive.

Dans ce cas, la fonction de dcodage est CS = A15 . Quand A15 est 0 ,ce qui correspond aux adresses 0000H 7FFFH (voir tableau 1), CS est 1 et la mmoire est inactive. Quand A15 est 1, ce qui correspond aux adresses 8000H FFFFH (voir tableau 1), CS est 0 et la mmoire est slectionne.

2me cas : 8000H FFFFH

A15Adresses A0..A14

CS

Bus de donnes

mmoire

Bus de contrle

Exemple 2 : Dans cet exemple, on considre une mmoire avec de 16 lignes dadresses (64K) et un ayant 15 lignes (32 K). Donc, il faut adresser soit les 32 K infrieures soit les 32K suprieures de la mmoire.

Slection des 32K inf de la mmoire (A15 = 0)

Slection des 32K sup de la mmoire (A15 = 1)

A15Adresses A0..A14

mmoireBus de donnes

Bus de contrle

ENIT 2me anne GE

3

Programmation de la famille des c 8051 et 8052 en C51 ( 80C552 )

Cas du microcontrleur 80C552 Le c 80C552 comme tous les microcontrleurs de la famille 8051 et contrairement aux p est capable de grer deux plans de mmoire indpendants : mmoire CODE de 64 Koctets et mmoire DATA (donnes) de 64 Koctets galement. En effet, le 80C552 dispose dun signal supplmentaire au niveau du bus de contrle : PSEN (Program Store ENable) qui passe ltat logique bas ds que le c excute une instruction daccs la zone CODE (obligatoirement une lecture) tandis quil reste ltat logique haut pendant un accs la mmoire de donnes. La figure 2 prsente les chronogrammes daccs en lecture des zones code et donnes .

fig.2a - Cycle de lecture de la zone code

fig. 2b - Cycle de lecture de la zone donnes

On remarque bien que le signal PSEN est simplement lquivalent du signal RD pour laccs au plan code. Gnralement le 80C552 est connect une EPROM de 64Ko contenant le code excuter et une RAM de 64Ko pour les donnes comme suit (fig. 3) :

Bus dadresses A ..A

80C552

Bus de donnes

EPROM (64Ko)

RAM (64Ko)

Bus de contrle

PSEN RD

OE OE

Figure 2Figure 3: Interfaage standard du 80C552 aux mmoires

Ainsi, au cours dune instruction daccs au code PSEN et par consquent OE (EPROM) passent 0, par contre RD et OE(RAM) restent 1 : LEPROM place les donnes sur le bus, par contre la RAM reste inactive. Lors dun cycle daccs aux donnes cest linverse qui se produit ( RD = 0 et PSEN = 1 ).ENIT 2me anne GE 4

Dcodage dadresses

Mais, il est assez frquent de trouver des cartes microcontrleur (cest notre cas aussi) qui adressent un circuit mmoire dans les zones code et donnes en mme temps ; ceci est trs utile au cours de la phase de dveloppement dune application : on charge lapplication dans le circuit qui est alors considre comme zone donnes par le moniteur et puis on lexcute puisque le circuit appartient aussi au plan code. Pour assurer ce fonctionnement, il suffit que le circuit soit actif aussi bien pour PSEN = 0 ou RD = 0 (fig. 4). Ceci est ralis laide de la fonction logique ET qui permet de mettre OE 0 si lun desBus dadresses A ..A

signaux PSEN ou RD est 0 : le circuit est ainsimmoire (64Ko)

80C552

Bus de donnes

activ aussi bien durant le cycle accs donnes que durant le cycle accs code :PSEN 0 1 1 RD 1 0 1 OE 0 0 1

Bus de contrle

PSEN RD

&

OE

Figure 4: Adressage d'une mmoire dans les deux plans

Pour ce genre de rle, on utilise gnralement une mmoire RAM sauvegarde par batterie pour ne pas perdre le code charg dedans . Etude de cas : La carte 80C552++ APPALACHES La carte quon utilisera au cours de ce TP (voir Annexe I ) contient 3 circuits mmoires : Une EPROM (U1) de 64Ko de rfrence 27512, quon considrera comme divise en deux parties ; les 32Ko infrieurs quon note (U1-L) et les 32Ko suprieurs quon note (U1-H) . Une RAM (U2) de 32 Koctets de rfrence 62256. Une RAM sauvegarde par batterie (U3) de 32 Koctets de rfrence 58256. Les signaux de contrle de ces circuits sont connects ceux du microcontrleur par plusieurs cavaliers qui sont placs sur la carte de la manire prsente ci-dessous ; chaque cavalier peut prendre une de 2 positions quon note 1 et 2 (voir fig. 5).

ENIT 2me anne GE

5

Programmation de la famille des c 8051 et 8052 en C51 ( 80C552 )

J1 J6

J2

J3

2 1 J10 1 2 J11

U1

U2

U3

Figure 5: Placement des cavaliers dans la carte

Ces cavaliers connectent les signaux du microcontrleurs aux broches des diffrentes mmoires de la faon suivant (fig. 6) :

Figure 6: connexion des signaux par les cavaliers

A chaque combinaison de positions de ces cavaliers, on obtient une configuration diffrente qui place les mmoires dans lun des espaces mmoires (32K inf ou 32K sup) et lun des plans dadressage (CODE ou (et) DATA).

ENIT 2me anne GE

6

Dcodage dadresses

Le tableau suivant prsente les diffrentes combinaisons possibles des positions des cavaliers : U1 J1 2 2 2 1 1 1 2 2 2 J2 1 1 1 1 1 1 2 J6 1 1 1 1 1 1 1 2 2 U2 J3 1 1 2 1 1 2 2 1 2 J10 1 2 1 1 2 1 2 1 1 U3 J11 1 1 2 1 1 2 2 1 2

Exemple : On va dterminer la configuration par dfaut des mmoires dans la carte utilise au cours de ce TP et qui correspond la deuxime combinaison des cavaliers dans le tableau reprsent ci-dessus (en gris). On tudiera la configuration de chaque circuit sparment et relativement un cycle de lecture (seulement CE et OE seront pris en considration ).

Mthode : Il sagit de dresser une sorte de table de vrit avec les signaux ct microcontrleur (A15, PSEN et RD) comme entres et les signaux CE et OE au niveau des circuits mmoires comme sorties. Cest ltal logique de (CE & OE) qui va dterminer si le circuit est slectionn (0 ) ou non (1) et enfin ltat des entres qui correspondent une slection du circuit nous permettra de dterminer lespace et le plan dadressage quil occupe.

Remarque : les signaux RD et PSEN ne passent jamais 0 en mme temps

ENIT 2me anne GE

7

Programmation de la famille des c 8051 et 8052 en C51 ( 80C552 )

U1 La combinaison des cavaliers J1, J2 et J6 donne les J1 2 U1 J2 1 J6 1 connexions reprsentes ci-contre. 1) J1 : A15 2) J2 & J6: Cot cA15 PSEN A15A15

A15 :aucune information.

A15 PSEN RD

CE

U1OE

0 0 0 1 1 1

0 1 1 0 1 1

1 0 1 1 0 1

circuit CE OE 0 0 1 0 1 0 0 1 1 1 1 1

CE & OE 0 : slectionn 1 : non slectionn 1 : non slectionn 1 : non slectionn 1 : non slectionn 1 : non slectionn

Donc, on voit bien que le circuit est slectionn pour : A15 = 0 les 32K inf de U1 (U1-L) lespace 0000H-7FFFH (32K inf ) PSEN = 0 Le circuit est dans le plan CODE U1-L occupe les 32K infrieurs du plan CODE

U2 Le cavalier J3 connecte le circuit U2 de la faon U2 J3 1 reprsente ci-contre Cot cA15 PSEN RD

A15RD

CE

U2OE

0 0 0 1 1 1

0 1 1 0 1 1

1 0 1 1 0 1

circuit CE OE 0 1 0 0 0 1 1 1 1 0 1 1

CE & OE 1 : non slectionn 0 : slectionn 1 : non slectionn 1 : non slectionn 1 : non slectionn 1 : non slectionn

Donc, on voit bien que le circuit est slectionn pour : A15 = 0 PSEN = 0 U2 occupe les 32 Ko infrieurs Le circuit est dans le plan DATA U2 occupe les 32K infrieurs du plan DATA8

ENIT 2me anne GE

Dcodage dadresses

U3 La combinaison des cavaliers J10 et J11 donne les J10 2 U3 J11 1 connexions reprsentes ci-contre. Cot cA15 PSEN RDA15 RD&

CE

PSEN

U1OE

A15

0 0 0 1 1 1

0 1 1 0 1 1

1 0 1 1 0 1

circuit CE OE 0 1 0 1 1 1 0 0 0 0 1 0

CE & OE 1 : non slectionn 1 : non slectionn 1 : non slectionn 0 : slectionn 0 : slectionn 1 : non slectionn

Donc, on voit bien que le circuit est slectionn pour : A15 = 1 PSEN = 0 ou RD = 0 U3 occupe les 32 Ko suprieurs Le circuit est dans les deux plans CODE et DATA U3 occupe les 32K suprieurs des plans CODE et DATA

Donc la configuration de la carte est la suivante :

Plan CODEFFFF H

Plan DATA

32 Ko suprieurs

U3

U3

8000 H 7FFF H

32 Ko infrieurs

U1-L

U2

0000 H

ENIT 2me anne GE

9

Programmation du c 80C552 dans lenvironnement Keil

Document 2 Initiation la programmation du microcontrleur 80C552 dans lenvironnement Keil

Configuration matrielle de la carte La carte qui sera utilise au cours de ce TP de Microprocesseur est base dun microcontrleur fabriqu par Philips (80C552) et conu autour du noyau 8051 (famille Intel) . Pour une description dtaille de larchitecture interne et du jeu dinstructions de ce microcontrleur , consulter [1].

La carte 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 :

U1 0000..7FFFh 32 Ko

U2 0000..7FFFh 32 Ko

U3 8000..FFFFh 32 Ko

CODE

DATA

CODE+DATA

Figure 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 c, du contenu des mmoires , la gestion de la liaison srie ainsi que le chargement des programmes

ENIT 2me anne GE

1

Programmation de la famille des c 8051 et 8052 en C51 ( 80C552 )

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 dans ce cas de configuration. 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. Pour une description dtaille des diffrentes configurations possibles et le rle des diffrents cavaliers, consulter la documentation de la carte.

Format Hexadcimal dIntel : 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 c. Programme (C, assembleur, .. )

Librairies de fonctions (code ) Compilation(Code + rfrences aux fonctions externes) Paramtres de configuration

Edition des liens(Code programmes + code fonctions externes)

Format final (fichier .HEX ou .BIN)

Figure 2: Gnration des formats .BIN et .HEX

ENIT 2me anne GE

2

Programmation du c 80C552 dans lenvironnement Keil

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 une carte c.

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

Le moniteur utilise les donnes de dtection derreurs pour sassurer quaucune erreur ne sest produite lors du transfert des donnes, et les adresses pour placer le code dans les zones appropries. Ces adresses sont situes dans une zone fixe par lutilisateur en tant que paramtre de configuration du compilateur et de lditeur des liens (voir fig.2) .

Un fichier .HEX est compos dune suite de lignes, en voici un exemple dune ligne :

Dbut de la ligne Nombre dinstructions dans la ligne en hexa. (10 H =16 instructions) Adresse partir de laquelle les instructions doivent tre charges

:10067500284B4559290054484953204953204120C6Les instructions en hexa (16 instructions) Donnes de dtection derreurs

Type de donnes

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

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.

ENIT 2me anne GE

3

Programmation de la famille des c 8051 et 8052 en C51 ( 80C552 )

Enfin on a besoin dun cble srie pour connecter le port srie du PC celui du microcontrleur. (voir fig.3)

PCTerminalcble srie

Carte cMoniteur

Port srie PC

Port srie c

Figure 3: liaison srie entre PC et carte

ENIT 2me anne GE

4

Programmation du c 80C552 dans lenvironnement Keil

Lenvironnement de dveloppement : La saisie, la simulation et la compilation des programmes au cours des TP seront ralises dans lenvironnement 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

fois

on

a

choisi

le

chemin

denregistrement et le nom du projet, il faut slectionner le type de 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.

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)

ENIT 2me anne GE

5

Programmation de la famille des c 8051 et 8052 en C51 ( 80C552 )

Exemple : Le programme quon va traiter pendant le premier TP 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 :#include

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

void Main(void) int i; char datas[10]="bonjour!!!";

{

/*Dclaration de variables */ /* une variable de 10 caractres */ /* Configuration et Activation du Timer et du registre SCONP(Serial Configuration) pour les paramtres de communication srie : 9600 ,8,N,1. */

S0CON = 0x52 ; TMOD = 0x20 ; TH1 = 0xFD ;

TR1 = 1 ;

/*lancer le timer1*/

for (i=0 ; i> 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, 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 ce TP, 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.

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

ENIT 2me anne GE

7

Programmation de la famille des c 8051 et 8052 en C51 ( 80C552 )

Slectionner la fentre du fichier C pour la rendre active et 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, activer la fentre du port srie en cliquant dedans avec la souris et taper une touche du clavier. Lexcution pourra alors continue et on verra safficher sur la fentre du port srie le message correspondant au rsultat du traitement de la donne saisie au clavier.

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 le matriel cible . La diffrence dexcution du programme dans les deux phases (simulation et aprs chargement) 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.

ENIT 2me anne GE

8

Programmation du c 80C552 dans lenvironnement Keil

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 concluants. Un listing comment ainsi quune description du fichier startup.a51 se trouve dans lannexe. 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 et choisir les paramtres 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

ENIT 2me anne GE

9

Programmation de la famille des c 8051 et 8052 en C51 ( 80C552 )

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 fichier denregistrement avec le du

.HEX

bouton

Select*folder for Objects

Aprs avoir recompil le programme on devrait avoir un fichier .HEX prt tre charg dans la zone code partir de ladresse 9000h.

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 c (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 c (moniteur) indique le nombre doctets reus si le transfert sest droul sans incidents ou affiche un message derreur dans le cas contraire.

ENIT 2me anne GE

10

Programmation du c 80C552 dans lenvironnement Keil

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 . On sait bien que le programme a t charg 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 lexemple suivant (voir fig. ci-dessous) ladresse est 995D.

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

Une fois tout a bien fonctionn, charger le contenu des adresses 8000 ,8001 et 8002 h avec les valeurs suivantes : 8000 : 02 . 8001 : octet poids fort de ladresse de la 1re instruction de votre programme (99 dans l exemple). 8002 : octet poids faible de ladresse de la 1re instruction de votre programme (5D dans lexemple). Et puis excuter linstruction G 8000. Quest ce qui se passe ? Expliquer.Remarque : Pour lensemble des commandes supportes par le moniteur (y compris le changement du contenu dune adresse), consulter la documentation de la carte dans la partie Annexes ou excuter la

commande ? .

ENIT 2me anne GE

11

Les registres fonction spciale du 80C552

Document 3 Les registres fonction spciale du 80C552 et leurs manipulation en C51

Le 80C552 comporte 56 registres fonction spciale (sfr) dont le rle est la configuration et la gestion des priphriques tel que le convertisseur Analogique/Numrique, les temporisateurs, la liaison srie, les Entres/Sorties, etc.. Ces registres ont tous une taille de 8 bits et occupent la zone dadresse 80h FFh de la mmoire RAM interne , c.a.d les 128 octets suprieurs. A la mise sous tension du microcontrleur ou bien aprs une opration de reset, les registres fonction spciale prennent des valeurs par dfaut comme reprsent dans le tableau ci-dessous (x : niveau indfini).

Tableau 1: Valeurs des Registres fonction spciale aprs initialisation

ENIT 2me anne GE

1

Programmation de la famille des c 8051 et 8052 en C51 ( 80C552 )

Les ports dEntres/Sorties Parmi les 56 registres fonction spciale, 5 ( P0 P4 ) sont ddis aux entres-sorties permettant au microcontrleur lacquisition numrique, la commande ainsi que la communication avec des priphriques externes . Ces 48 lignes dE/S numriques sont bidirectionnelles et peuvent tre utilises comme entre ou comme sortie indpendamment les unes des autres et sans configuration pralable. Il faut par contre prciser que pour utiliser une ligne en entre, il faut crire un 1 logique dans le bit du port correspondant cette ligne pour pouvoir lire correctement ltat prsent au niveau de la broche correspondante. Un grand nombre de ces lignes dE/S peut assurer une deuxime fonction appele : fonction secondaire . Par exemple le ports P1 peut tre utilis pour la communication I2C, les ports P0 et P2 pour les bus dadresses et de donnes, le port P3 pour la communication srie , etc.. .La figure suivante prsente les broches correspondants aux E/S ainsi que les fonctions secondaires de chaque broche.

Figure 1: Brochage du 80C552 en botier PLCC 68 broches

On note finalement quil existe un 6me Port dE/S unidirectionnel (P5) et qui est utilis pour les entres analogiques du convertisseur A/N.ENIT 2me anne GE 2

Les registres fonction spciale du 80C552

Manipulation des registres en C51 Une dclaration de tous ces registres sfr se trouvent dans le fichier reg552.h (voir annexe) et qui doit tre inclus dans le programme par la directive : #include La lecture ou lcriture de lun des registres sfr en C51 peut se faire alors par une simple opration daffectation : Exemple : S0BUF = 0x45 ; Etat = S0CON ; ( Etat tant une variable de type unsigned char ) Le problme qui peut se poser avec ce type daffectation cest que parfois on veut changer juste la valeur dun ou plusieurs bits dun registre et garder les valeurs ( priori inconnues ) des autres bits inchanges. Le problme est rsolu pour certains registres qui offrent la possibilit daccs au niveau bit , les bits accessibles sont galement dfinis dans le registres reg552.h . Dans ce cas laccs se fait aussi par simple affectation : Exemple : TR1 = 1 ; cest un bit du registre TCON et qui permet de lancer (1) ou darrter (0) le Timer 1. TR0 = 0 ; cest un bit du registre TCON et qui permet de lancer (1) ou darrter (0) le Timer 0. Pour les autres registres qui noffrent pas la possibilit daccs au niveau bit, on peut procder de deux manires :1) par Masquage logique

Il sagit de trouver une opration logique qui permet de modifier ltat dun bit sans changer ltat des autres. 1-a : Lecture : Pour retrouver ltat logique dun bit, on procde une opration ET

logique du registre contenant le bit et une valeur binaire de telle sorte obtenir un rsultat ou le bit en question garde son tat logique et tous les autres bits du registre soient 0. Dans lexemple ci-dessous, on veut dterminer ltat du bit B2 dun registre R. On voit bien quon un ET logique avec un 02 en hexa permet de garder ltat du bit B2 et obtenir par consquence un rsultat nul si B2=0 ou un rsultat non nul dans le cas contraire. rsultat = R & 0x2 ;Registre R

if (rsultat) { } else {.. }

// Si B2 = 1AND

B7 B6 B5 B4 B3 B2 B1 B0

// Si B2=0

Valeur binaire

0

0 0

0 0

0 0

0 0

1

0

0 0

rsultat = 0

B2 0

ENIT 2me anne GE

3

Programmation de la famille des c 8051 et 8052 en C51 ( 80C552 )

1-b : Ecriture :

Pour lcriture dans un bit dun registre, on doit considrer deux cas

selon que le niveau logique crire est un 1 ou bien un 0. Pour crire un 1, il faut effectuer un ou logique entre le registre et une valeur binaire ayant un 1 dans la position qui correspond au bit mettre 1 et 0 dans les autres positions . Lexemple suivant permet dimposer un 1 logique dans le bit poids fort (B7) du port P4.Registre R

B7 B6 B5 B4 B3 B2 B1 B0

OR

R = R | 0x80 ;

Valeur binaire

1

0

0

0

0

0

0

0

= 0x80

Registre R =

1

B6 B5 B4 B3 B2 B1 B0

Pour crire un 1, il faut effectuer un et logique entre le registre et une valeur binaire ayant un 0 dans la position qui correspond au bit mettre 0 et 1 dans les autres positions . Lexemple suivant permet dimposer un 0 logique dans le bit poids fort (B7) du port P4.Registre R

B7 B6 B5 B4 B3 B2 B1 B0

AND

R = R & 0x7F ;

Valeur binaire

0

1

1

1

1

1

1

1

= 0x7F

Registre R =

0

B6 B5 B4 B3 B2 B1 B0

2) par utilisation du type bit (sbit)

Il est possible de dclarer un bit pour quil soit accessible directement sans passer par une opration logique, ceci est fait par linstruction suivante : sbit nom_du_bit = registre ^ position_du_bit (position du bit tant de 0 7). Lexemple suivant montre comment dclarer le bit poids fort (position 7) du registre P4, lui affecter un tat logique et tester son contenu directement.

sbit control = P4^7 ; if (control ) {. .}

ENIT 2me anne GE

4

Gestion des interruptions du 80C552 en C51

Document 4 Gestion des interruptions du 80C552 en C51

Contrairement au mode scrutation ou le microprocesseur passe son temps attendre des vnements partir des priphriques (port srie, Timer, etc..) ,le mcanisme dinterruption permet de le dcharger de ces tches et doptimiser ainsi lutilisation du temps CPU tout en gardant la mme efficacit de traitement des vnements.

Sources dinterruptions du 80C552 Le microcontrleur 80C552 est capable de grer jusqu 15 sources dinterruptions (voirTab1). Source Interruption externe 0 Dpassement Timer 0 Interruption externe 1 Dpassement Timer 1 Port srie Port I2C Timer 2 capture 0 Timer 2 capture 1 Timer 2 capture 2 Timer 2 capture 3 Convertisseur Analogique/Numrique (CAN) Timer 2 comparaison 0 Timer 2 comparaison 0 Timer 2 comparaison 0 Dpassement du Timer 2 Numro 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Adresse du vecteur 0003H 000BH 0013H 001BH 0023H 002BH 0033H 003BH 0043H 004BH 0053H 005BH 0063H 006BH 0073H

Tableau 1 : Sources, numros et adresses des vecteurs d'interruptions

Ces interruptions sont inactives par dfaut ( linitialisation du microcontrleur), mais chaque interruption peut tre autorise indpendamment des autres par mise 1 du bit de contrle correspondant contenu dans lun des deux registres dautorisations des interruptions

ENIT 2me anne GE

1

Programmation de la famille des c 8051 et 8052 en C51 ( 80C552 )

adressables au niveau du bit : IEN0 (0xA8) et IEN1 (0xE8) : 15 bits registres sont associs aux 15 interruptions et un bit (EA : bit poids fort du registre IEN0) permet de valider ou dinhiber toutes les interruptions. On se contente de prsenter la structure de IEN0 ; IEN1 tant entirement consacre aux interruptions du Timer 2.EAAutorisation gnrale Interruption du CAN Interruption du port I2C Interruption du port srie

EAD ES1

ES0

ET1 EX1

ET0 EX0Source externe 0 Timer 0 Source externe 1 Timer 1

pour tous les bits : 1 pour autoriser linterruption. 0 pour suspendre linterruption. Figure 1 : Le registre des autorisations des interruptions (IEN0)

Chaque fois quune interruption autorise (EA et bit dautorisation correspondant 1) se produise : 1. ladresse de linstruction en cours ainsi que le contenu des registres importants (le contexte) sont sauvegards dans la pile. 2. Le microprocesseur saute ladresse du vecteur correspondant linterruption (qui est fixe et fige matriellement voir Tab 1) , et commence excuter la routine associe linterruption. 3. Une fois la routine excute, le contexte est restaur et le microprocesseur continue lexcution du programme interrompu.

Niveau de priorit des interruptions :

Une question se pose ; si deux interruptions autorises se produisent en mme temps, laquelle parmi les deux qui va tre prise en considration en premier ? En effet, chacune des 15 sources dinterruptions possde un niveau de priorit par dfaut, et celle ayant le niveau suprieur va tre traite en premier et ensuite lautre. Ceci est galement valable dans le cas de plusieurs interruptions se produisant en mme temps. Mais, il est possible si lapplication lexige, de changer les niveau de priorit de chaque source individuellement partir des deux registres de priorits des interruptions : IP0 et IP1.

ENIT 2me anne GE

2

Gestion des interruptions du 80C552 en C51

Gestion des interruptions en C51 En utilisant le langage C51 pour la programmation dapplications grant des interruptions, la sauvegarde ainsi que la restauration du contexte avant et aprs lexcution de la routine dinterruption sont effectues automatiquement. Le programmeur doit uniquement : Valider lautorisation gnrale des interruptions (EA=1) ainsi que linterruption quil souhaite grer (exemple : ET1 = 1, pour autoriser linterruption du Timer 1). Dclarer la routine associe linterruption de la manire suivante :Type_retour Nom_routine ( paramtres ) interrupt { .. .. // code excuter (associ linterruption). .. }

x

x tant le numro de linterruption (voir Tableau 1).

Exemple : Pour associer une routine (sans paramtres ni valeur de retour) linterruption du Timer1 (ayant le numro 3 daprs Tableau 1), elle doit tre dclare de la matire suivante :

void nom_routine (void) interrupt 3 { .. .. }

Application : Lapplication suivante traite la communication srie par interruption : transmission et rception dune suite continue de donnes paralllement un autre traitement principal :

ENIT 2me anne GE

3

Programmation de la famille des c 8051 et 8052 en C51 ( 80C552 )

#include

// inclure le fichier contenant les dclarations des // registres fonction spciale et les bits adressables. // dclaration dune variable de type char. ----------------------------------------------// cest la routine associe linterruption du port srie (numro 4). // Tester TI pour savoir si la cause de linterruption est la fin de // lmission de la donne prcdente. // Envoyer la donne suivante. // remettre TI 0. // Tester RI pour savoir si la cause de linterruption est la rception // dune donne. // Lire la donne reue. // Remettre RI 0

char data ; // - - - - - - - - - - - - - - - - - - - - - - - - - - - void serial_comm (void ) interrupt 4

{if (TI) { S0BUF = data ; TI = 0 ; } if (RI) { data = S0BUF ; RI = 0 ; }

}// - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Main { S0CON = 0xD0 ; // Configuration de la liaison srie. TMOD = 0x20 ; TH1 = 0x8D ; TR1 = 1 ; EA = 1 ; ES0 = 1 ; // Autorisation gnrale des interruptions. // Autorisation de linterruption du port srie.

while (1) { . .. } }

// Traitement principal.

Contrairement la gestion de la communication srie par scrutation (voir documentCommunication srie avec le microcontrleur 80C552 ), ou le programme

tait bloqu en attente du

passage de RI ou TI 1 ; dans cette application la majorit du temps CPU est allou au traitement principal. Le passage de TI ou RI 1 est signal par interruption .

ENIT 2me anne GE

4

Gestion des interruptions du 80C552 en C51

Dcalage des adresses des vecteurs dinterruptions avec Keil On a vu que les adresses des vecteurs dinterruptions sont figes et situes partir de ladresse 0000H, donc la zone des 32Ko infrieures. Mais tant donn que cette zone est occupe par le moniteur dans la carte utilise , on doit indiquer au compilateur quil doit dcaler ces vecteurs dinterruptions. Keil permet de configurer ce dcalage : 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 C51 , cocher loption ( Interrupt vectors at address ) et taper ladresse partir de laquelle vous voulez installer les vecteurs dinterruptions .

ENIT 2me anne GE

5

Communication srie avec le c 80C552

Document 5 Communication srie avec le microcontrleur 80C552

Le microcontrleur 80C552 possde un port srie bidirectionnel capable dmettre et de recevoir simultanment travers un registre fonction spciale (sfr) occupant ladresse 99h de la mmoire interne du c : S0BUF (Serial BUFfer 0). Laccs ce registre se fait par les instructions: S0BUF = data ; pour laccs en criture (transmission). Var = S0BUF ; pour laccs en lecture (rception) .

La dclaration de S0BUF ainsi que des autres registres fonction spciale de trouvent dans le fichier reg552.h quil faut inclure au dbut du programme : #include . Il est galement possible dutiliser des fonctions disponibles avec Keil permettant la transmission ( printf( ), putchar( ), ..) et la rception (scanf ( ) , getchar( ), ..) de donnes formates. La dclaration de ces fonctions se trouve dans le fichier stdio.h .

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 et de validation de rception :

* cest dire quon peut accder chaque bit sparment (voir reg552.h pour la liste complte des bits adressables).

ENIT 2me anne GE

1

Programmation de la famille des c 8051 et 8052 en C51 ( 80C552 )

SM0 SM1

-

REN

-

-

TI

RI

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

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. 0 : Timer 1 est en mode temporisateur.

00 : compteur 13 bits. 01 : compteur 16 bits. 10 : compteur 8 bits rechargement automatique. 11 : rien .

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.

ENIT 2me anne GE

2

Communication srie avec le c 80C552

Fonctionnement (voir fig.1) : Dans ce cas de configuration, 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 qui reprsente la vitesse de transmission.

TH1Rechargement

Fosc/12

TL1

Passage 0

Indication de dbordement

Vitesse de transmission (vers S0BUF)

Figure 1: Gnration de la vitesse de transmission du port srie

Exemple : On veut tablir une liaison srie avec une vitesse de 9600 bits /seconde avec un microntrleur ayant une frquence dhorloge de 12 Mhz. Dterminer la valeur que doit contenir TH1. Solution : La frquence dincrmentation de TL 1 est 12 Mhz/12*32 =31250 Hz . 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 doit tre stocke dans TH1.

*: Ce rsultat est obtenu galement en divisant la frquence dincrmentation par la vitesse de transmission dsire (31250/9600 = 104 ).

ENIT 2me anne GE

3

Programmation de la famille des c 8051 et 8052 en C51 ( 80C552 )

Application : Le code suivant 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 int i ; char datas[10] ; void Main (void) { S0CON = 0xD1 ;

// inclure le fichier contenant les dclarations des registres fonction spciale //

// S0CON = 1 //

1

-

1

-

-

0

0

Mode 3 Rception valid

TI et RI initialiss 0

TMOD = 0x20 ;

// Timer1 configur en temporisateur 8 bits. // TMOD = 0 0 1 0 -

TH1 = 0x98 ; TR1 = 1 ;

// Voir exemple page 3. // Lancer le Timer1.

for (i=1 ; 256).Timer0 doit tre donc configur comme compteur 16 bits (M1M0 = 01)

Et la valeur dinitialisation est 2 16-10000 = 55536 = 0xDF80.T H 0 = 0 xD F et T L 0 = 0 x8 0#include void centieme_seconde ( void ) interrupt 1 { P4 = P4 ^ 0x80 ; TH0 = 0xDF ; TL0 = 0x80 ; } void main ( void ) // Cest la routine associe au dbordement du Timer0 qui a le //numro 1 (voir document ).

// 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 0 0 0 1 (Gate et C/T = 0 ; M1 M0 = 01) // 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 ).

}

ENIT 2me anne GE

3

Programmation de la famille des c 8051 et 8052 en C51 ( 80C552 )

Mode Comptage La seule diffrence entre ce mode et le mode temporisation est la source de la cadence dincrmentation : elle est dicte par les fronts descendants au niveau de la broche T0 du c 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 (voir fig. 4).Timer 1 0 Timer 0 1 M1 M0

0 0 : compteur 13 bits 0 1I: compteur 16 bits 1 0 : icompteur 8 bits rechargement automatique 11: Fronts descendants sur T0Clk

Timer 0 Compteur 8, 13 ou 16 Passage 0 bits

Indication de dbordement

Figure 4: Timer0 en mode comptage

Exemple : Diviseur de frquence On applique un signal carr Sf de frquence f sur la broche T0 du c 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 (5Vref-

Le CAN ayant une rsolution 10 bits, les rsultats de la conversion seront compris entre 0 et 210 = 1024 et donc un pas de conversion VLSB :V LSB = Vref + Vref 1024

A partir de la valeur numrique VN obtenue aprs la conversion, la valeur de la tension relle VA est calcule par :VA = (VN *V LSB ) + Vref

La dure dune conversion est de 50 cycles machines, donc de lordre de 54 microsecondes pour une frquence de 11.0592 MHZ .

ENIT 2me anne GE

1

Programmation de la famille des c 8051 et 8052 en C51 ( 80C552 )

Droulement de la conversion Une opration de conversion peut tre dclenche soit par programme seulement, soit par matriel (application dun front montant) et programme . Dans les deux cas les deux registres responsables du contrle et du recueil du rsultat de la conversion sont ADCON Analog Digital CONversion et ADCH Analog Digital Conversion High ( voir fig. 1).

Convertisseur A/N

Multiplexeur 1 :8

S0 . . . S7

Adc9 Adc8 Adc7 Adc6 Adc5 Adc4 Adc3 Adc2 MSB ADCH LSB

Adc1 Adc0 ADEX ADCI ADCS MSB ADCON

Adr2 Adr1 Adr0 LSB

Rsultat de la conversion sur 10 bits

Slection du canal

Figure 1: Le convertisseur A/N et ses registres

Toute opration de conversion commence par le choix du canal partir duquel la tension va tre convertie, ceci est fait par le choix des 3 bits poids faible Adr0, Adr1 et Adr2 du registre ADCON (000 correspondant au canal 0 (pin 69), 001 au canal 1 (pin 68) et ainsi de suite). A la fin dune opration de conversion, les 2 bits poids faible du rsultat numrique est recueilli dans les bits 6 et 7 du registre ADCON et les 8 bits poids fort dans le registre ADCH. Le choix entre les deux mthodes possibles de lancement dune conversion se fait par le bit ADEX (Analog Digital External) du registre ADCON. Lancement de la conversion par programme uniquement : Pour avoir ce mode de fonctionnement le bit ADEX doit tre mis 0 . Dans ce cas la conversion ne peut tre lance que par la mise 1 du bit ADCS (Analog Digital Conversion Start). Une fois la conversion termine : Le bit ADCS repasse automatiquement 0. Le bit ADCI (Analog Digital Conversion Interrupt) passe 1 automatiquement. Ce bit doit tre remis 0 par programme aprs une opration e conversion. Donc une conversion ne peut tre lance que si ADCS = 0 et ADCI = 0 et la lecture du rsultat de la conversion ne peut tre effectue que si ADCS = 0 et ADCI = 1 .

ENIT 2me anne GE

2

Le Convertisseur A/N du 80C552

Exemple : Le programme suivant permet de lancer une opration de conversion sur le canal 5 par programmation et de stocker le rsultat dans une variable relle en supposant que Vref+ Vref- = 5V.

#include unsigned int resultat, resultatinf ; float tension void main ( void )

{ADCON&=0xFD ; ADCON |=0x05 ; ADCON&=0xDF ; While ( ! (ADCON & 0x18)) { } ADCON|=0x08 ; While ( ! (ADCON & 0x10) {} While ( (ADCON & 0x08) {} resultatinf = (ADCON>>6) & 0x03 ;

// Choisir le canal 5 par mise des bits Adr0 et Adr2 1 et Adr1 0.

// Mettre le bit ADEX 0 . // Sassurer que les bits ADCS et ADCI sont 0.

// Lancer la conversion par mise du bit ADCS 1. // Attendre jusqu ce que ADCI passe 1 // et // ADCS passe 0.

// Lire les deux bits poids faible de la conversion partir du registre ADCON. // Lire les 8 bits poids fort et ajouter les 2 bits poids faible. // Retrouver la valeur relle de la tension. // Remettre ADCI 0.

resultat = ADCH*4+ resultatinf ; tension = (resultat*5)/1024 ; ADCON&=0xEF ;

}

Lancement de la conversion par programme et par matriel : Pour avoir ce mode de fonctionnement le bit ADEX doit tre mis 1 .Dans tout ce qui a t dcrit dans la conversion par programme reste valable, mais en plus elle peut tre

dclench par application dun front montant sur la broche STADC (pin 3) : dans