Le Micro-Contrôleur 8051: Microcontrôleur 1 Jelassi Khaled
Le Micro-Contrôleur 8051: Microcontrôleur 1 Jelassi Khaled
Le Micro-Contrôleur 8051: Microcontrôleur 1 Jelassi Khaled
Organisation Générale
Compteurs/Timers
Structure Générale de la
Interface Série
mémoire
Les interruptions
Mémoire Programme
Norme RS232
Mémoire de Données Externe
Présentation carte XEVA
Jeu d'instructions
Exemples
Organisation matérielle
Ports d'Entrées/Sorties
Schéma Bloc
Cartographie
On appelle cartographie mémoire ou
memory mapping l'organisation
géographique de la mémoire
Espaces adressables
différents pour le
programme et les
données
Cela permet un accès
aux données en 8 bits
plus rapide
Cependant, des
adresses d’accès 16
bits aux données
peuvent être générés
grâce au registre DPTR
Mémoire Programme
Elle constituée de ROM ou d’EPROM
Taille maximale : 64kOctets
Sur le 80C51 : les 4kOctets sont sur le chip
En version romless toute la mémoire est
externe dans ce cas, le signal de validation de
la mémoire s’appelle PSEN (Program Store
Enable)
Mémoire de Données
Les RAM, interne et externe, occupent des
espaces différents de la mémoire programme
Les 128 octets inférieurs (80C51) de RAM
interne, sont sur le chip
Jusqu’à 64kOctets de RAM externe peuvent
être adressés
Le CPU génère les signaux de lecture (RD) et
d’écriture (WR) pour la gestion de la mémoire
externe
Sous certaines conditions, la RAM externe
(mémoire de données externe) et la ROM
externe (mémoire de programme externe)
peuvent être combinées en appliquant RD et
PSEN sur les entrées d'une fonction ET et en
reliant sa sortie à l'entrée de lecture des
mémoires RAM et ROM externes.
Vecteurs d'interruptions
Après un RESET, le 80C51 commence son
exécution à l'adresse 0000h
Chaque interruption possède un emplacement
fixe dans la mémoire programme
Une interruption provoque un saut à cet
emplacement qui contient une routine de
service d'interruption
Par exemple, l'interruption externe 0 est
assignée à l'adresse 0003h
Jelassi Khaled Microcontrôleur 10
Structure de la Mémoire Programme
Vecteurs d'interruptions
Chaque emplacement
possède une taille de 8
octets.
Si le programme est
suffisamment court, il
peut être contenu
entièrement dans cette
zone.
Sinon, une instruction de
saut sera utilisée
Jelassi Khaled Microcontrôleur 11
Structure de la Mémoire Programme
ROM externe
16 lignes d'entrées/sorties (Ports 0 et 2) sont
utilisées pour les fonctions de bus :
P0 : bus multiplexé données/adresses poids
faibles
le signal ALE (Adress Latch Enable) est à 1
pendant que P0 contient les poids faibles
d'une adresse
P2 : poids forts de l'adresse
ROM externe
Les adresses en mémoire programme sont
toujours de 16 bits même lorsqu'on utilise
moins de 64kOctets.
L'utilisation de
ROM externe
sacrifie 2 ports
de 8 bits aux
fonctions
d'adressage
RAM externe
Le CPU génère RD et WR
Le bus d'adresses, pour l'accès aux données peut
être de 1 ou 2 octets :
On peut utiliser un adressage sur 1 octet
avec une ou plusieurs lignes d'E/S pour
paginer la RAM
2 octets d'adresses peuvent être utilisés.
Dans ce cas les poids forts sont sur P2
RAM externe
Les adresses de la
RAM interne sont
toujours d'un octet
espace adressable
de 256 octets
Cependant, il y a en réalité 256 + 128 octets
Adressage en
RAM interne : mode direct
uniquement
Une adresse dite
"directe" supérieure à
7Fh permet d'accéder à
un espace mémoire
Une adresse dite
"indirecte" supérieur à
7Fh permet d'accéder à
un autre espace mémoire
Adressage en Adressage en
mode direct mode indirect
ou indirect. uniquement
Jelassi Khaled Microcontrôleur 18
Structure de la Mémoire de Données Interne
Modes d'adressage
Adressage direct :
L'opérande est spécifié par un champ
d'adresse exprimé sur 8 bits dans l'instruction
Seules la RAM interne et la mémoire SFR
peuvent être adressées ainsi
Par exemple :
mov A,26h 25h : 12
: A = (26h)
add A,25h : A = A + (25h)26h : 64
mov 27h,A : (27h) = 27h
A : ?
Modes d'adressage
Adressage Indirect :
Dans ce mode, l'instruction spécifie un registre qui
contient l'adresse de l'opérande.
Les RAM internes et externes peuvent être
adressées ainsi. Par exemple :
mov R1,#25h : R1 = 25h
mov A,@R1 : A = (@R1)
inc R1 : R1 = R1 + 1
add A,@R1 : A = A + (@R1) 25h : 12
inc R1 : R1 = R1 + 1 26h : 64
mov @R1,A : (@R1) = A
27h : ?
Registres d'adresses
Les registres d'adresses, pour l'adressage au
format 8 bits, peuvent être R0 ou R1 de la
banque sélectionnée ou le pointeur de pile SP
Pour l'adressage 16 bits, seul le registre DPTR
est employé
Instructions de registres
Les instructions utilisant les registres R0 à R7
comportent, dans leur code opératoire, 3 bits
désignant le numéro du registre.
Elles sont donc plus compactes que celles
utilisant un adressage direct nécessitant un
octet supplémentaire
Adressage indexé
On ne peut atteindre que la mémoire
programme avec ce type d'adressage.
Il est destiné à la lecture de tables
un registre 16 bits (DPTR ou PC) pointe
la base (le début) de la table et
l'accumulateur contient l'indice dans cette
table
Adressage indexé
L'adresse dans la table est donc
constituée de l'addition de l'accumulateur
au pointeur
Un autre type d'adressage indexé est
utilisé dans le cas du saut : la
destination est calculée à partir de la
somme du pointeur et de
l'accumulateur.
Jelassi Khaled Microcontrôleur 28
Le Jeu d'Instruction
Adressage immédiat
L'opérande est ici une constante.
Par exemple :
mov A,#100 : A = 100
add A,#25h : A = A + 25h
anl A,#10110110b : A = A &
10110110b
Instructions Arithmétiques
Instructions Arithmétiques
La mémoire RAM interne peut être incrémentée
sans passer par l'accumulateur
L'instruction d'incrément inc peut s'appliquer
au registre 16 bits DPTR
L'instruction mul AB multiplie A par B, le résultat
de 16 bits est contenu dans B:A
L'instruction div AB divise A par B, le quotient
est dans A et le reste dans B
L'instruction da A ajuste le résultat d'opération
en code BCD (ce n'est pas une conversion)
Jelassi Khaled Microcontrôleur 31
Le Jeu d'Instruction
Instructions Logiques
Instructions Logiques
Les opérations combinatoires (AND, OR, XOR
et NOT) sont effectuées bit-à-bit
Les opérations peuvent être appliquées à
n'importe quel octet de RAM interne sans
passer par l'accumulateur ce qui est important
pour la commande des ports d'E/S
De plus, lors d'interruptions, cela économise
la sauvegarde de A sur la pile
mov
A,#45h : A = 45h A = 0100 0101
anl A,#0EBh & EBh = 1110 1011
: A = A & EBh
= 0100 0001
Instructions Logiques
Rotations
Droite
Droite avec CY
CY
Gauche
Gauche avec CY
CY
Echange poids forts/ports faibles de A
Jelassi Khaled Microcontrôleur 36
Le Jeu d'Instruction
mov
A,#45h : A = 45h
swap A : A = 54h
Application
à la conversion en BCD d’un nombre
inférieur à 100 contenu dans A
mov A,#16 : A = 16
mov B,#10 : B = 10
div AB : A/B A = 1, B = 6
swap A : A = 10h
add A,B : A = A + B = 16h
Transferts de données
L ’opération mov <dest>,<src> permet
d ’effectuer un transfert sans passer par
l ’accumulateur
Adressage direct avec la pile :
push : incrémente SP puis copie un octet
sur la pile
pop : prend un octet sur la pile puis
décrément la pile
Transferts de données
La pile est adressée par rapport à SP : c’est
de l’indirect les 128 octets supérieurs,
! lorsqu’ils existent, sont accessibles
Lorsque la limite de la RAM interne est
dépassée, les valeurs « pushées » sont
perdues et les valeurs « popées » sont
indéterminées.
Transferts de données
Il existe une opération au format 16 bits pour
l’initialisation du DPTR
L’instruction XCH A,<byte> échange les
contenus de A et de l’octet adressé
XCHD est similaire mais n’échange que les
quartets de poids faibles
Seul l'adressage indirect est utilisé avec :
soit 1 octet d'adresse : @R0 ou @R1
soit 2 octets d'adresse : @DPTR
Dans le cas de 2 octets : monopolisation du port 2 ce
qui n'est pas indispensable lorsque la RAM externe est petite
Utilisation en lecture seule
Le signal PSEN est activé et utilisé comme signal
de lecture
movc A,@A+DPTR : charge dans le contenu de
l'adresse A+DPTR
Instructions Booléennes
Instructions Booléennes
Traitement d'un bit à la fois
Zone de 128 bits en RAM interne et
registres adressables par bit en zone SFR.
Tous les ports sont adressables par bit
Types d'instructions :
5 fonctions combinatoires : ET, OU,
forçages à 0 et à 1, complément à 1
Transfert de bit
Test de bits simple ou avec RAZ
Jelassi Khaled Microcontrôleur 48
Le Jeu d'Instruction
La destination du saut n'est pas une adresse
mais un déplacement (offset) signé.
Exprimé sur 1 octet, il est donc compris entre
-128 et +127
Instructions de sauts
Existe sous 3 formes :
• SJMP,
• LJMP,
• AJMP
Instructions de sauts
SJMP : saut relatif. Le déplacement est
compris entre -128 et +127
LJMP : saut absolu. Un adresse sur 16 bit est
spécifiée
AJMP : saut absolu dans le bloc courant. La
taille d'un bloc est de 2kOctets. L'adresse est
codée sur 11 bits (211 = 2k) et constitue les
poids faibles de l'adresse 16 bits à atteindre
JMP @A+DPTR : saut dont l'adresse est la
somme de A et DPTR
Jelassi Khaled Microcontrôleur 52
Le Jeu d'Instruction
DPTR contient
l'adresse de
Instructions de sauts la table
Équivalent
à x2
Compris ici
entre 0 et 4
Chaque ajmp
est codé sur
2 octets
Jelassi Khaled Microcontrôleur 53
Le Jeu d'Instruction
Tous les sauts utilisent un déplacement
compris entre -128 et +127
Bien qu'il n'existe pas de flag zéro, les
instructions JZ et JNZ comparent A à zéro
SP : pointeur de
pile (valeur initiale :
07h)
DPTR : registre
pointeur de 16 bits
(DPH et DPL)
Jelassi Khaled Microcontrôleur 60
Organisation matérielle
Un cycle machine = 6 états nommés S1 à S6
Durée d'un état : deux impulsions d'horloge
un cycle machine = 12 impulsions d'horloge
En principe deux états de recherche (read) sont
générés par cycle même si le second n'est pas
nécessaire
Structure
4 ports bidirectionnels constitués chacun :
d'un verrou (latch)
d'un driver de sortie
d'un driver d'entrée
Les drivers de sortie des ports 0 et 2 et le driver d'entrée
du port 0 sont également utilisés pour la gestion de la
mémoire externe. Dans ce cas, les poids faibles de
l'adresse externe sont placés sur le port 0 et
multiplexés temporellement avec l'octet de données. Le
port 2 est utilisé pour les poids forts d'adresses 16 bits
Structure
Chaque bit du port 3, outre l'utilisation normale de port d'E/S, possède une
autre fonction :
Inactif en Borne du
Configurations des E/S mode port port
Verrou
correspondant au
registre SFR
Bus interne
Validation
de l'écriture Commutation entre mode port
(signal interne) et mode bus
Bus interne
Validation
de l'écriture
(signal interne) Multiplexage des adresses
et des données
En lecture, la valeur issue
de l'entrée est placée sur le bus interne
Jelassi Khaled Microcontrôleur 69
Ports d'Entrées/Sorties
Bus interne
Validation
de l'écriture
(signal interne)
En lecture, la valeur issue
de l'entrée est placée sur le
bus interne
Jelassi Khaled Microcontrôleur 72
Le Micro-contrôleur 8051
Ports d'Entrées/Sorties
Bus interne
Fonctions
Validation alternatives :
de l'écriture la sortie du latch
(signal interne) doit être à 1
Ces dernières sont
également celles qui
peuvent modifier la
valeur lue et ré-
écrire dans le latch
Instructions "Read-Modify-Write"
Jelassi Khaled Microcontrôleur 75
Compteurs/Timers
Deux compteurs/timers 16 bits : Timer 0 et Timer 1
Mode Timer : le registre interne est incrémenté à chaque cycle machine donc à
1/12 de la fréquence de l'oscillateur
Mode compteur : le registre est incrémenté à chaque transition négative sur son
entrée (T0 ou T1). La transition est prise en compte pendant l'état S5 du cycle machine. La valeur apparaît dans le
registre pendant l'état S3 du cycle suivant. Puisqu'il faut 2 cycles machine pour prendre en compte une transition, cela
signifie que la fréquence de travail maximale du compteur est 1/24 de la fréquence de l'oscillateur
Modes
TMOD
Fonctionnement en compteur ou en timer :
précisé par le bit C/T du registre TMOD
4 modes de fonctionnement : M0/M1
Les modes 0, 1 et 2 sont identiques pour les
deux compteurs/timers. Seul le mode 3
diffère.
Mode 0*
TCON
Compteur 8 bit + pré-diviseur par 32
Le registre timer fonctionne sur 13 bits
Le passage de la valeur maximale à 0 place le
flag d'interruption TF1 (TF0) à 1
L'entrée de comptage est validée pour TR1
(TR0) à 1 et GATE = 0 ou INT1 = 1
*
: ce mode existe pour assurer une compatibilité avec le timer du 8048,
ancêtre du 8051
Jelassi Khaled Microcontrôleur 80
Compteurs/Timers
Mode 0
TCON
13 bits de comptage :
TH1 sur 8bits
TL1 sur les 5 bits de poids faibles. Les 3 bits de poids forts sont
ignorés
Le lancement du comptage par TR1 n'efface pas les registres TH1
et TL1
Mode 0
Mode 1
TCON
Idem mode 0 mais sur 16 bits au lieu de 13.
Mode 2
Compteur 8 bits (TL1) avec rechargement
automatique en fin de décomptage
C'est la valeur contenu dans TH1 qui est
recopiée dans TL1
Mode 2
Mode 3 : Compteur/Timer 1
à l'arrêt (la valeur contenu dans TH1/TL1 est
maintenue
Mode 3 : Compteur/Timer 0
TH0 et TL0 sont deux compteurs distincts.
TH0 : Timer 8 bits. Il utilise TR1 et TF1 du
timer 1
TL0 : compteur ou timer 8 bits.
Jelassi Khaled Microcontrôleur 85
Compteurs/Timers
Mode 3
"Full duplex" : émission et réception sont
simultanées
Registre SFR pour l'émission et la réception : SBUF
Registre SFR pour la configuration : SCON
4 modes de fonctionnement
RxD : réception, P3.0
TxD : émission, P3.1
Mode 0
Les données entrent et sortent par RxD.
L'horloge série est sortie sur TxD.
Le format est de 8 bits
La vitesse en Bauds est de 1/12 de la fréquence
d'horloge du 8051
Il s'agit d'un mode de fonctionnement synchrone
Mode 0
Mode 1
Données sur 8 bits encadrées d'un bit de START et
un bit de STOP
Fréquence : fixée par le timer 1
Emission sur TxD et réception sur RxD
Le bit de poids le plus faible est transmis en
premier.
A la réception, le bit stop va vers le flag RB8
(SCON)
Mode 1
Le timer 1 est utilisé en mode 2 : ainsi il n'est pas
nécessaire de le recharger
Vitesse de transfert :
SMOD
2 Fosc
Débit *
32 12 * (256 TH 1)
Exemple : 9600 Bauds avec un quartz de 12Mhz
et SMOD = 0 2 SMOD * Fosc
TH 1 256 FDh
32 *12 * Débit
Jelassi Khaled Microcontrôleur 93
Interface Série
Vitesses de transfert
Mode 1
Mode 2
Données sur 11 bits : 1 start, 8 données, 1 bit au
choix (parité le plus souvent), 1 stop
Le 9ème bit de données est TB8 à l'émission et RB8 à
la réception
L'émission est déclenchée par l'écriture dans
SBUF
La réception est déclenchée par lorsqu'apparaît
un bit start à condition que REN = 1
Vitesse de transmission de 1/32 ou 1/64 de la
fréquence de l'oscillateur du 8051 : SMOD
Jelassi Khaled Microcontrôleur 96
Interface Série
Mode 2
Mode 3
Identique au mode 2 sauf en ce qui concerne la
vitesse de transfert qui est réglable comme en
mode 1
Mode 3
Interruptions
Timers
Interruptions
Série
Jelassi Khaled Microcontrôleur 100
Les interruptions
Interruptions Timers
Les timers 0 et 1 positionnent à 1 les bits TF0 et
TF1 de TCON lorsque que leur contenu passe de
111…11 à 000…00
Ces bits sont ensuite positionnés à 0 par le
service de traitement de l'interruption
Interruption Série
L'interruption est générée par un OU logique entre
RI et TI du registre SCON
RI et TI sont positionnés par la réception ou
l'émission d'une donnée
Ces deux bits ne sont pas remis à 0 par le
service d'interruption
Tous les bits d'interruptions peuvent être
positionnés (à 1 ou à 0) par programme ce qui
permet de générer ou de suspendre une
demande d'interruption
Chaque source d'interruption peut être autorisée
ou interdite individuellement grâce au registre
IE.
L'ensemble des sources d'interruptions peuvent
être interdites par le bit EA de IE
Jelassi Khaled Microcontrôleur 104
Les interruptions
Le niveau de priorité interne n'est utilisé que
pour le cas de demandes simultanées
Les demandes d'interruptions sont prises en
compte pendant l'état S5 du cycle machine.
Cas du RESET
RST : borne d'entrée
Les registres sont initialisés
La RAM interne n'est pas
effacée
Le programme démarre à
l'adresse 0000h
0 logique : tension allant de +8 à +40V
1 logique : tension allant de -8 à -40V
Signaux généralement compris entre -12 et +
12V
Liaison série au repos : on observe un 1
logique. Ceci permet de distinguer l'état de hors
tension du récepteur de son état d'attente de
réception.
Format
Asynchrone : données envoyées de l'émetteur vers
le récepteur sans négociation préalable. C'est au
récepteur de se synchroniser sur l'émetteur.
L'émetteur doit envoyer :
un bit de START
ses données(de 5 à 8 bits)
un bit de parité optionnel
1 ou plusieurs bits de stop.
Emetteur et récepteur doivent être configurés de
la même manière
Jelassi Khaled Microcontrôleur 113
Norme RS232
Nombre de fils
Echange de données bidirectionnel entre 2
liaisons séries RS232C : 3 fils minimum .
Un pour les données qui circulent dans un
sens.
Un pour les données qui circulent dans l'autre
sens.
Un pour la masse électrique des signaux.
Protocoles de communication
Protocole XON XOFF : ne nécessite qu'une liaison
sur 3 fils.
La négociation entre l'émetteur et le récepteur pour
échanger des données se fait par logiciel.
Basé sur les caractères XON (ASCI 11H) et XOFF
(ASCI 13H).
Protocole XON-XOFF
Lorsque le buffer de réception est plein à 80%,
le récepteur envoie le caractère XOFF.
Lorsqu'il reçoit le caractère XOFF, l'émetteur doit
immédiatement suspendre son émission.
Lorsque le récepteur a vidé son buffer à 50%, il
envoie un caractère XON à l'émetteur.
A la réception de XON, l'émetteur peut
reprendre son émission.
Protocole XON-XOFF
Il est possible que l'émetteur ne reçoive pas
ou perde les caractères XON/XOFF.
Pour pallier à ces problèmes, lorsque l'émetteur
n'a pas reçu de caractères depuis un certain
temps, ce dernier peut reprendre de sa propre
initiative le transfert.
Si le récepteur n'est pas d'accord, ce dernier
pourra toujours ré-émettre un XOFF.
Protocole Matériel
Lorsque l'émetteur veut émettre ses données,
il doit positionner la ligne RTS pour demander au
récepteur s'il est prêt à accepter ces données.
Le récepteur, lorsqu'il est prêt à recevoir les
données, va envoyer le signal DSR de l'émetteur
pour lui indiquer qu'il est prêt.
Branchement Branchement
Protocole Matériel Protocole Xon/Xoff
RX RX RX RX
TX TX TX TX
RTS RTS RTS RTS
CTS CTS CTS CTS
DSR DSR DSR DSR
DCD DCD DCD DCD
DTR DTR DTR DTR
SG SG SG SG
Jelassi Khaled Microcontrôleur 120
Liaison RS232: Protocole de communication
Exemple d’une trame: