Telechargé par seikyo

COURS ET TRAVAUX PRATIQUES de MICROPROCESSEUR

publicité
INSTITUT NATIONAL POLYTECHNIQUE DE TOULOUSE
ECOLE NATIONALE SUPERIEURE D’ELECTROTECHNIQUE,
D’ELECTRONIQUE, D’INFORMATIQUE, D’HYDRAULIQUE ET DES
TELECOMMUNICATIONS
DEPARTEMENT D’ELECTRONIQUE - TRAITEMENT DU SIGNAL
COURS ET TRAVAUX PRATIQUES
DE
MICROPROCESSEUR
M.CATTOEN
Janvier 2003
-0-
TABLE DES MATIERES
INTRODUCTION..................................................................................................................................................3
CHAPITRE I..........................................................................................................................................................5
PRINCIPES GENERAUX DES CALCULATEURS NUMERIQUES .............................................................5
INTRODUCTION..................................................................................................................................................5
I-1 FONCTION MEMOIRE.................................................................................................................................8
I-1-1 DEFINITIONS ....................................................................................................................................................8
I-1-2 ORGANISATION DES MEMOIRES ........................................................................................................................8
I-1-2-1 Organisation par bits...............................................................................................................................8
I-1-2-2 Organisation par mots...........................................................................................................................10
I-1-3 CLASSIFICATION DES MEMOIRES ....................................................................................................................11
I-1-3-1 Mémoires mortes ...................................................................................................................................11
I-1-3-2 Mémoires vives ......................................................................................................................................13
I-1-3-3 Association de mémoires .......................................................................................................................16
I-1-3-4 Autres types de mémoire........................................................................................................................17
I-2 L'UNITE DE TRAITEMENT ......................................................................................................................20
I-2-1 STRUCTURE INTERNE .....................................................................................................................................20
I-2-1-1 Rôle de l'ALU.........................................................................................................................................21
I-2-1-2 Registres de données .............................................................................................................................22
I-2-1-3 Registres d'adresses...............................................................................................................................22
I-2-1-4 Unité de commande ...............................................................................................................................23
I-2-2 ASPECT LOGICIEL ...........................................................................................................................................24
I-2-2-1 Classification des instructions ...............................................................................................................24
I-2-2-2 Format des instructions .........................................................................................................................24
I-2-2-3 Modes d'adressage ................................................................................................................................24
I-2-2-4 Instructions de saut................................................................................................................................28
I-3 LES ORGANES D'ENTREE-SORTIE........................................................................................................30
I-3-1 FONCTIONS DE BASE ......................................................................................................................................30
I-3-1-1 Isolation-Mémorisation .........................................................................................................................30
I-3-1-2 Synchronisation .....................................................................................................................................30
I-3-1-3 Adressage des organes d'E/S .................................................................................................................31
I-3-1-4 Adaptation du format des informations .................................................................................................32
I-3-2 PROCÉDURES D'ÉCHANGE ..............................................................................................................................32
I-3-2-1 Mode programmé par test de mot d'état................................................................................................33
I-3-2-2 Mode programmé par interruption........................................................................................................33
I-3-2-3 Mode en "accès direct mémoire (DMA)"...............................................................................................37
CHAPITRE II ......................................................................................................................................................41
ETUDE DE MICROPROCESSEURS ET D'ORGANES D'ENTREE-SORTIE ..........................................41
II-1 LE MICROCONTROLEUR 8051 ..............................................................................................................41
II-1-1 ORGANISATION EXTERNE .............................................................................................................................41
II-1-1-1 Chronologie des échanges avec la mémoire ........................................................................................42
II-1-2 ORGANISATION INTERNE ..............................................................................................................................45
II-1-3 LES INSTRUCTIONS DU 8051 .........................................................................................................................48
II-1-4 MODES D'ADRESSAGE ...................................................................................................................................48
II-1-4-1 Mode implicite......................................................................................................................................48
II-1-4-2 Mode immédiat.....................................................................................................................................49
-1-
II-1-4-3 Mode direct ..........................................................................................................................................49
II-1-4-4 Mode indirect .......................................................................................................................................49
II-1-4-5 Mode indexé .........................................................................................................................................49
II-1-4-6 Mode relatif ..........................................................................................................................................49
II-1-4-7 Opérations spéciales ............................................................................................................................50
II-2 L'INTERFACE PARALLELE 8255 (PROGRAMMABLE PERIPHERAL INTERFACE PPI) ........53
II-2-1 PRESENTATION DU CIRCUIT ..........................................................................................................................53
II-2-1 MODES DE FONCTIONNEMENT ......................................................................................................................54
II-3 LES TRANSMISSIONS SERIE..................................................................................................................57
II-3-1 GENERALITES ...............................................................................................................................................57
II-3-1-1 Communications asynchrones..............................................................................................................57
II-3-1-2 Communications synchrones................................................................................................................58
II-3-2 EXEMPLE D'INTERFACE SERIE : L'ACIA MC 6850........................................................................................59
II-3-2-1 Présentation du circuit (Fig.II-3-2)......................................................................................................59
II-3-2-2 Fonctionnement....................................................................................................................................61
CHAPITRE III.....................................................................................................................................................65
III-1 DESCRIPTION DU MATERIEL DE TRAVAUX PRATIQUES................................................................65
III-2 DESCRIPTION DE LA CARTE MICR0CONTROLEUR 8051..................................................................66
III-3 DESCRIPTION DE LA PLAQUETTE DE TP-CNA...................................................................................67
III-4 TRAVAIL A REALISER..............................................................................................................................69
III-4-1 Utilisation de l’environnement MUVISION ...........................................................................................69
III-4-2 Exercices de programmation..................................................................................................................70
III-4-3 Sortie d’informations..............................................................................................................................71
III-4-4 Conversion analogique-numérique ........................................................................................................72
III-4-5 Acquisition de données...........................................................................................................................73
BIBLIOGRAPHIE...............................................................................................................................................75
ANNEXES ............................................................................................................................................................76
-2-
INTRODUCTION
L'apparition des microprocesseurs date du début des années 1970. A cette époque,
deux événements favorables sont apparus :
- le concept de "LSI (Large Scale Integration)" permettant d'intégrer plusieurs milliers de
portes sur un même substrat,
- l'arrivée à maturité de la technologie MOS caractérisée par sa faible consommation.
La conjugaison de ces événements a permis de regrouper une unité centrale
d'ordinateur dans un seul circuit intégré appelé "microprocesseur".
Depuis, une multitude de composants de ce type sont apparus au sein de familles
provenant essentiellement de grands constructeurs américains : Intel, Motorola, Advanced
Micro Devices (AMD), Texas Instruments,... et japonais : NEC, Mitsubishi,...
Grâce aux progrés de l’intégration, l'augmentation des performances a porté sur :
- la vitesse de fonctionnement,
- la largeur des mots traités (8, 16, 32, 64 bits),
- le nombre et la complexité des opérations réalisables.
L’intégration a également permis de rassembler le microprocesseur et les éléments
associés (mémoire, organes d’entrée-sortie,...) au sein d’un seul circuit appelé
-3-
"microcontrôleur". Ce type de composant s’est répandu dans un très grand nombre de
domaines (télécommunications, télévision, électro-ménager, hifi...).
L'objectif de ce cours est double : présenter les notions de base nécessaires à la
compréhension des systèmes utilisant des microprocesseurs et réaliser des travaux pratiques
permettant de programmer en langage machine (assembleur) une application d’acquisition de
données.
Ce document est divisé en 3 chapitres.
Le premier chapitre présente les principes généraux de fonctionnement des éléments
constituant les calculateurs numériques.
Le deuxième chapitre est consacré principalement à l'étude du microcontrôleur 8051 et
du circuit d’interface parallèle 8255 (PPI) qui seront mis en oeuvre dans les travaux pratiques.
Le troisième chapitre présente le matériel utilisé en travaux pratiques ainsi que les
différents programmes d’application à réaliser.
En annexe sont fournies des spécifications techniques détaillées des composants
utilisés et des informations sur le matériel et le logiciel utilisés en travaux pratiques.
-4-
CHAPITRE I
PRINCIPES GENERAUX DES CALCULATEURS NUMERIQUES
INTRODUCTION
I-1 FONCTION MEMOIRE
I-1-1 Définitions
I-1-2 Organisation des mémoires
I-1-2-1 Organisation par bits
I-1-2-2 Organisation par mots
I-1-3 Classification des mémoires
I-1-3-1 Mémoires mortes
I-1-3-2 Mémoires vives
I-1-3-3 Association de mémoires
I-1-3-4 Autres types de mémoire
INTRODUCTION
Le fonctionnement d'un calculateur numérique fait appel à 2 fonctions essentielles :
- le stockage de l'information,
- le traitement de l'information.
Cette information doit pouvoir circuler sous forme électrique ; elle devra donc être
codée.
La plus petite quantité d'information (unité) est appelée BIT. Elle correspond à la
notion de "variable booléenne ou binaire" qui ne peut prendre que les valeurs 0 ou 1.
L'échange d'informations entre 2 éléments (émetteur et récepteur) s'effectue par une
liaison électrique (ligne) (Fig.I-1-1). Si l'on considère le cas d'un conducteur unique,
l'information provient des combinaisons des états successifs de la ligne au cours du temps :
ici l'on parle de liaison "série". Le débit d'informations est exprimé en bits/seconde ou
"bauds".
Source
Symbole
1
0
Charge
E
R
courant
Emetteur
Récepteur
Figure I-1-1
Il est plus avantageux d'associer plusieurs conducteurs en "parallèle". Cette
association prend le nom de "bus". A un instant donné, l'état du bus est décrit par un mot
binaire pouvant prendre n = 2N valeurs où N est le nombre de lignes juxtaposées. Il est
commun d'utiliser des groupements de 8 fils, ce qui conduit à la définition de l'"octet".
-5-
Si l'on considère 2 sous-ensembles reliés par un bus, l'information peut circuler dans
un sens (bus unidirectionnel) ou dans les 2 sens (bus bidirectionnel). Dans le premier cas, il
s'agit de la liaison entre un émetteur et un récepteur (Fig.I-1-2-a). Dans le second, chaque
sous-ensemble peut être configuré soit en émetteur, soit en récepteur (Fig.I-1-2-b). Ici, une
ligne supplémentaire est nécessaire pour fixer le sens des échanges. Elle commande le
multiplexage interne des liaisons (utilisation d'éléments de type "3 états") (Fig.I-1-2-c). On
doit veiller à ce qu'en aucun cas 2 éléments configurés en émetteur commandent l'état du bus
simultanément.
Dans le cas général, plusieurs sous-ensembles peuvent être connectés sur un même
bus, ce qui permet de minimiser le nombre d'interconnexions.
Symbole
E
R
E
4
R
a) Bus uni-directionnel
Symbole
E/R
E/R
E/R
4
E/R
b) Bus bi-directionnel
commande
3 états
c) Multiplexage pour liaison bi-directionnelle
Figure I-1-2
Un calculateur numérique se présente de façon générale comme suit : une unité de
traitement (UT) travaille sur des données stockées dans un bloc "mémoire" (MEM).
L'introduction des données et la récupération des résultats s'effectuent par l'intermédiaire d'un
organe "d'entrée-sortie" (E/S) (Fig.I-1-3). Les liaisons entre ces éléments s'effectuent par des
bus.
-6-
EXTERIEUR
BUS
BUS
E/S
UT
MEM
Figure I-1-3
Nous analyserons successivement ces 3 fonctions dans ce premier chapitre.
-7-
I-1 FONCTION MEMOIRE
I-1-1 Définitions
Une mémoire est un ensemble de cellules élémentaires qui stockent chacune un bit. Le
nombre de cellules est appelé "capacité" de la mémoire. A chaque cellule sont associées 2
informations (Fig. I-1-4) :
- une adresse (numéro) permettant de désigner la cellule,
- une donnée représentée par son état.
Mémoire
Cellules
Adresse :
Données :
numéro de
Contenu
la cellule
de la cellule
Figure I-1-4
La possibilité d'accéder à une cellule quelconque en fournissant son adresse est
appelée "accès aléatoire".
On distingue un mode de lecture permettant de connaître l'état de la cellule
sélectionnée et un mode d'écriture permettant d'imposer son état. Ces 2 modes sont définis
par l'état d'une ligne de lecture-écriture (Read/Write : R/W).
Note : la plupart des mémoires à semi-conducteur sont à accès aléatoire. Par contre les
mémoires dites "de masse" qui ne sont pas décrites ici (disques, bandes, mémoires à bulles,..)
sont à accès séquentiel.
I-1-2 Organisation des mémoires
I-1-2-1 Organisation par bits
Soit n la capacité de la mémoire. Généralement on a : n = 2N, où N représente le
nombre de lignes d'adresse.
Ainsi, avec N=8 on peut adresser 28 = 256 cellules élémentaires.
* Fonctionnement en lecture
Chaque cellule peut être lue indépendamment si l'on connecte sa sortie à une entrée
d'un multiplexeur (n --> 1).
Les entrées de sélection du multiplexeur reçoivent l'adresse.
-8-
La réalisation la plus simple pour la cellule est une simple connexion à 1 ou à 0 selon
l'état à lui donner (solution câblée).
Dans ce cas, la mémoire est dite à lecture seule.
Si l'on désire pouvoir modifier le contenu de la cellule, il faut remplacer la cellule
précédente par un élément dont l'état peut changer ; une bascule de type D par exemple
possède cette propriété.
Un schéma possible d'organisation pour synthétiser une mémoire à lecture et écriture
(N=2) est présenté (Fig.I-1-5).
CK
E
D
Q
CK
CK
D
D
D
E
M
U
X
R/W
Q
M
U
X
CK
D
Cellule de base
ADR.
Q
S
Q
CK
2
D
Q
Figure I-1-5
* Fonctionnement en écriture
La sélection de la cellule dont on veut fixer l'état s'effectue par un démultiplexeur. En
fonction de la valeur de l'adresse, le signal d'écriture est aiguillé vers l'entrée d'horloge de la
cellule choisie parmi les 4. La donnée présente sur l'entrée D est alors transférée dans la
bascule sélectionnée.
* Association en série
Un exemple d'association de 2 mémoires en série est présenté (Fig.I-1-6).
-9-
E
E1
N
ADR
R/W
D
E
M
U
X
E2
M
E
M
M
E
M
1
2
S1
MUX
S2
AN+1
S
Figure I-1-6
Cette structure peut être étendue à un nombre de mémoires élémentaires en puissance
de 2 par l'utilisation de multiplexeurs et démultiplexeurs de taille adaptée.
I-1-2-2 Organisation par mots
Cette organisation est obtenue en mettant en parallèle des mémoires de 1 bit (Fig.I-17).
ENTREE
ADR
N
R/W
SORTIE
Figure I-1-7
* Problème de la sélection des cellules
Dans la réalisation précédente, la sélection des cellules s'effectue de façon "linéaire".
Lorsque le nombre de bits augmente, la taille des multiplexeur et démultiplexeur croît de la
même façon, ce qui pose des problèmes de réalisation technologique.
Il est alors plus judicieux d'opérer une sélection matricielle. Ainsi le bus d'adresse de
dimension N est, par exemple, divisé en 2 bus de dimension N/2. Les cellules sont disposées
sous la forme d'une matrice de dimension 2N/2*2N/2. Une cellule est sélectionnée à
l'intersection d'une ligne et d'une colonne (Fig.I-1-8) par un opérateur logique de type "ET".
-10-
N/2
DECODEUR
ADRESSE
N/2
colonne
ligne
D
E
C
O
D
E
U
R
sélect.
MUX./DEMUX
donnée
DONNEE
Figure I-1-8
I-1-3 Classification des mémoires
Les mémoires sont principalement divisées en 2 classes :
- les mémoires "mortes" (Read Only Memory ou ROM),
- les mémoires "vives" (Random Access Memory ou RAM).
I-1-3-1 Mémoires mortes
Les mémoires mortes sont caractérisées par le fait qu'elles sont à lecture seulement.
L'état de chaque cellule est déterminé par son forçage à 1 ou à 0 réalisé par exemple par la
présence ou l'absence d'une connexion.
On est amené à établir une seconde classification selon la technologie utilisée :
- mémoire programmable par masque également appelée ROM,
- mémoire programmable électriquement (Programmable Read Only Memory ou PROM),
- mémoire programmable électriquement et effaçable optiquement (Erasable
Programmable Read Only Memory ou EPROM),
- mémoire programmable et effaçable électriquement (Electrically Erasable Programmable
Read Only Memory ou EEPROM).
Un exemple de réalisation de ROM est présenté (Fig.I-1-9).
Chaque cellule est constituée d'une diode mise en service à l'intersection d'une ligne et
d'une colonne. C'est au moment de la métallisation (étape finale de la fabrication de la
mémoire) que la connexion est réalisée ou non selon l'état à donner à la cellule.
-11-
D
E
C
O
D
E
U
R
2 --> 4
ADRESSES
MULTIPLEXEUR
4-->1
SORTIE
Figure I-1-9
Le principe des PROM est similaire, mais la connexion est réalisée par un fusible
(Fig.I-1-10-a). Toutes les cellules sont initialement dans le même état (fusibles intacts). Dans
une phase de "programmation", les cellules devant avoir l'état opposé à l'état initial sont
sélectionnées successivement et un courant d'intensité élevée est appliqué afin de fondre le
fusible. Ces cellules ne pourront plus changer d'état par la suite.
Le principe des EPROM est analogue, mais la connexion est réalisée par un transistor
à effet de champ (Fig.I-1-10-b). La technologie utilisée est de type "MOS à grille flottante"
(Fig.I-1-11).
Cellule PROM à fusibles
Cellule EPROM
Fus
(a)
(b)
Figure I-1-10
-12-
AL
AL
source
SiO2
P+
drain
grille flottante
SUBSTRAT N
P+
Figure I-1-11
A l'état initial la connexion est établie car le transistor est conducteur. Pour bloquer le
transistor, on applique une tension supérieure à la tension de claquage de la jonction PN ; des
électrons de forte énergie sont alors injectés dans la grille flottante. Une fois la tension
disparue, ces électrons restent prisonniers car la grille est entourée d'isolant.
Pour changer l'état des cellules, seule une exposition de la mémoire au rayons
ultraviolet permet d'extraire les électrons prisonniers dans la grille et ainsi de remettre la
mémoire dans son état initial pour une nouvelle programmation. Ici il s'agit d'un effacement
global de la mémoire.
Dans le cas des EEPROM, la cellule est plus complexe car elle doit permettre
l'évacuation des charges stockées dans la grille. Le retour à l'état initial (effacement) est
réalisé par l'application d'une tension de "déprogrammation". L'effacement est sélectif.
Notes : - une variante de ces mémoires est connue sous le nom de mémoire "FLASH".
- dans les mémoires programmables, les temps d'écriture ou d'effacement sont
beaucoup plus grands que les temps d'accès à l'information en lecture.
I-1-3-2 Mémoires vives
Les mémoires vives également appelées RAM permettent un accès aléatoire à chaque
cellule aussi bien en lecture qu'en écriture. On distingue ici deux types fonctionnant selon des
principes différents :
- les mémoires statiques (SRAM),
- les mémoires dynamiques (DRAM).
* Mémoires statiques
Ici chaque cellule est constituée par un élément bistable (Flip-Flop) (Fig.I-1-12-a).
Une fois mise dans un certain état par l'opération d'écriture, la cellule reste dans cet état
jusqu'à une écriture de l'état opposé ou jusqu'à disparition de la tension d'alimentation.
Une mémoire statique comprend 3 bus (Fig.I-1-12-b) :
- un bus d'adresse (entrée),
- un bus de donnée (entrée, sortie ou entrée-sortie),
- un bus de commande (lecture-écriture (R/W), sélection de boîtier (/CS)). Le rôle du signal
de sélection est le suivant :
- s'il est actif, la mémoire fonctionne selon le mode déterminé par la ligne d'écriture-lecture,
-13-
- s'il est inactif, l'écriture est impossible, et en lecture, le bus de donnée est mis en haute
impédance.
LIGNES DE DONNEES
Adresse
VCC
Donnée
SRAM
R/W
Sélection(/CS)
VSS
LIGNE DE SELECTION
a)
b)
Figure I-1-12
Une grandeur importante est le temps d'accès de la mémoire caractérisé par le temps
qui s'écoule entre l'application d'une adresse et la disponibilité en sortie d'une donnée valide.
Ce temps détermine la fréquence maximum d'utilisation de la mémoire.
La période minimum est appelée temps de cycle. Les chronogrammes typiques d'une
SRAM sont présentés (Fig.I-1-13).
T cycle (écriture)
T cycle (lecture)
ADRESSE
ADRESSE
T AS
TCS
SELECTION (/CS)
SELECTION (/CS)
T accès (sélection)
DONNEE
invalide
TH
valide
ECRITURE (R/W)
T SU
TH
T accès (adresse)
DONNEE
(R/W = 1)
valide
Figure I-1-13
TSU et TH sont respectivement le temps de pré-établissement (Setup) et le temps de
maintien (Hold) nécessaires pour assurer que la donnée soit correctement prise en compte.
Nous noterons que le temps de cycle est égal au temps d'accès.
* Mémoires dynamiques
Les mémoires dynamiques fonctionnent selon un principe différent. Chaque cellule est
constituée d'un condensateur dont la charge représente l'état (Fig.I-1-14-a). Une fois chargé,
le condensateur ne peut se décharger que dans une résistance très élevée (technologie MOS).
La constante de temps de décharge de l'ordre de quelques mS impose de "rafraîchir"
chaque cellule par un accès périodique en écriture ou en lecture.
-14-
Sélection de ligne
Adresse
Entrée
Ligne de bit
Sortie
DRAM
R/W
Condensateur
de stockage
/RAS
/CAS
a)
b)
Figure I-1-14
La disposition interne des cellules est toujours matricielle. Du fait du nombre élevé de
lignes d'adresse nécessaire à l'adressage d'un grand nombre de cellules, il devient nécessaire
de multiplexer les adresses lignes et colonnes pour diminuer le nombre de connexions du
boîtier mémoire.
L'organisation externe d'une mémoire dynamique (Fig.I-1-14-b) est très voisine de
celle d'une mémoire statique, si ce n'est la présence de 2 lignes de validation :
- sélection de ligne (Row Adress Select /RAS),
- sélection de colonne (Column Adress Select /CAS).
On notera l'absence de lignes de sélection de boîtier, la sélection effective de la
mémoire étant réalisée par les validations successives de /RAS et de /CAS.
D'autre part, la seule activation de /RAS rafraîchit simultanément toutes les cellules
d'une ligne dont le numéro est fourni sur le bus d'adresse.
Il existe certains cycles spéciaux tels que :
- mode "page" permettant un accès rapide aux éléments d'une même ligne,
- rafraîchissement par séquence "/CAS avant /RAS" utilisant un compteur interne,
- lecture-modification-écriture,
- etc...
Un chronogramme typique d'opérations de lecture et d'écriture d'une DRAM est
présenté (Fig.I-1-15).
-15-
T cycle
T cycle
RAS
RAS
T crp
CAS
ADR. ligne
T crp
CAS
colonne
ADR.
ligne
colonne
T su
DONNEE
Th
T rac
T cac
valide
T su
valide
DONNEE
Th
T su
LECTURE
Th
ECRITURE
Figure I-1-15
On notera que dans les mémoires dynamiques le temps de cycle est différent du temps
d'accès à cause du temps de "préchargement (Tcrp)". Seul le temps de cycle fixe la fréquence
maximum de fonctionnement de la mémoire.
I-1-3-3 Association de mémoires
La plupart des boîtiers de SRAM possède un bus de données bidirectionnel et une ou
plusieurs lignes de sélection.
Lorsqu'il y a plusieurs lignes de sélection, la mémoire est activée quand toutes les
lignes sont actives simultanément (opérateur ET logique interne).
Une mémoire non sélectionnée a son bus de données à l'état haute impédance en
lecture et n'est pas modifiée par une opération d'écriture. Ceci permet d'associer en série
plusieurs boîtiers en reliant ensemble les bus d'adresse, de donnée et de lecture-écriture. Les
lignes d'adresse supplémentaires sont décodées par un démultiplexeur qui commande les
lignes de sélection des boîtiers (Fig.I-1-16).
Dans le cas des mémoires dynamiques, le principe d'association reste le même, le
démultiplexage se faisant soit sur les lignes /RAS, soit sur les lignes /CAS (Fig.I-1-17).
-16-
N
ADR.
SRAM
SRAM
SRAM
R/W
ADR. SUP
DONNEE
D
E
M
U
X
SELECT.
Sélections
Figure I-1-16
N
ADR.
R/W
N
ADR.
DRAM
DRAM
R/W
DRAM
DRAM
/RAS
/CAS
ADR. SUP
ADR. SUP
/CAS.
D
E
M
U
X
DONNEE
/RAS.
D
E
M
U
X
DRAM
DRAM
DONNEE
Figure I-1-17
I-1-3-4 Autres types de mémoire
* Mémoires non volatiles
Cette RAM garde son contenu même après coupure de l'alimentation du système dans
lequel elle est installée. On trouve 2 concepts :
- maintien de la tension d'alimentation par une pile ou une batterie associée en "tampon"
avec l'alimentation de la mémoire. La technologie est de type CMOS pour obtenir une
consommation très réduite (quelques micro-ampères) durant la phase de maintien.
- association d'une EEPROM et d'une RAM dans un même boîtier. Ce concept permet de
cumuler les avantages des 2 technologies. L'utilisateur travaille avec une RAM dont le
contenu est sauvegardé dans l'EEPROM au moment de la coupure et restitué à la mise sous
tension.
* Mémoires à double accès
On en distingue 2 sortes :
- Mémoire double port
-17-
Il s'agit essentiellement d'une SRAM possédant 2 bus d'accès indépendants (adresse,
donnée, commande) et des lignes supplémentaires indiquant les conflits d'accès en écriture à
la même cellule. Ce type de mémoire est utilisé pour le partage et l'échange de données entre
2 systèmes.
- Mémoire vidéo ou VRAM
Il s'agit d'une DRAM à laquelle est associé un registre à décalage dont la longueur
est égale à celle d'une ligne de la matrice mémoire (Fig.I-1-18). En plus des cycles classiques
propres aux DRAM, il existe des cycles spéciaux de transfert mémoire-registre et registremémoire.
Ce type de mémoire est particulièrement bien adapté à la réalisation de mémoires
d'images ou de plans graphiques.
256 colonnes
signaux
DRAM
partie
VRAM
256
lignes
Transfert
TRF
partie
signaux
VIDEO
Transfert
DRAM
E
VIDEO
H
S
REGISTRE
Figure I-1-18
* FIFO (First In - First Out)
Constitué autour d'une RAM à double accès, ce "registre" possède 2 compteurs
d'adresses internes (pointeurs), l'un désignant la case à écrire, l'autre celle à lire (Fig.I-1-19).
Les lignes d'adresse ne sont pas accessibles à l'extérieur : le type d'accès est ici
séquentiel ou série.
En plus des lignes de donnée, d'écriture et de lecture, on trouve les lignes d'indication
de "registre vide" et "registre plein". La première signale l'égalité des pointeurs, la seconde
que le pointeur d'écriture "rattrape" celui de lecture. Ces lignes permettent de gérer
correctement le transfert d'informations entre 2 systèmes qui peuvent travailler à des
fréquences différentes (asynchronisme).
Il existe également des lignes permettant de "cascader" plusieurs FIFO pour obtenir
de plus grandes capacités.
-18-
MEMOIRE
DONNEES
DONNEES
Pointeur
écriture
FIFO
ECRITURE
LECTURE
"PLEIN"
"VIDE"
Figure I-1-19
-19-
Pointeur
lecture
I-2 L'UNITE DE TRAITEMENT
I-2-1 Structure interne
I-2-1-1 Rôle de l'ALU
I-2-1-2 Registres de données
I-2-1-3 Registres d'adresses
I-2-1-4 Unité de commande
I-2-2 Aspect logiciel
I-2-2-1 Classification des instructions
I-2-2-2 Format des instructions
I-2-2-3 Modes d'adressage
I-2-2-4 Instructions de saut
I-2-1 Structure interne
L'unité de traitement (U.T.) est l'élément central du calculateur numérique. Elle
possède des fonctions pour effectuer des opérations sur des données numériques (mots de
donnée ou d'adresse) et des éléments de stockage interne.
La première fonction est réalisée par une Unité Arithmétique et Logique (ALU).
La seconde est réalisée par des registres. Parmi ceux-ci on distingue :
- des registres de données,
- des registres d'adresse,
- un registre d'état contenant différents "indicateurs" caractéristiques des événements qui se
produisent lors de l'exécution de chaque opération.
Le contenu de la mémoire est composé de 2 types d'information :
- un programme comprenant une suite d'instructions,
- des données devant être traitées par le programme.
Chaque instruction est codée sous forme binaire ; l'unité de traitement doit donc en
assurer le décodage pour déduire les opérations élémentaires à effectuer. Pour cela elle
dispose d'un registre d'instruction qui présente à une unité de commande (U.C.) ou
"séquenceur", le mot codant l'instruction courante.
Sous l'action d'une horloge, l'U.C. élabore les commandes nécessaires à l'exécution de
l'instruction. Dans le cas général, elle tient également compte du contenu du registre d'état
où sont enregistrés certains résultats liés au déroulement des instructions (dépassements,
résultats nuls,...).
Les données et les adresses sont véhiculées par des bus en général de formats
différents :
- le bus de données fixe la longueur du mot échangé avec la mémoire,
-20-
- le bus d'adresse détermine la capacité maximale d'adressage du système, c'est à dire le
nombre maximum de mots de la mémoire associée (ex : 16 bits "adressent" 64 Kmots).
Dans certains cas, ces 2 bus sont multiplexés sur un seul bus. Une logique externe doit
alors effectuer le démultiplexage.
Un certain nombre de signaux pour la gestion des échanges avec la mémoire et les
organes d'entrée-sortie sont rassemblés dans un "bus de commande".
L'architecture interne d'une unité de traitement peut être schématisée par la figure I-21.
UNITE DE TRAITEMENT
MICROCOMMANDES
U.C.
INSTRUCTION
ETAT
REGISTRE(S)
PC
REGISTRE(S)
DE
ALU
D'ADRESSE
DONNEE
BUS INTERNE
BUS D'ADRESSE
BUS DE DONNEE
BUS DE COMMANDE
HORLOGE
Figure I-2-1
I-2-1-1 Rôle de l'ALU
Comme son nom l'indique, cette unité peut exécuter 2 types d'opérations.
- Opérations arithmétiques
Elles incluent l'addition et la soustraction qui sont des opérations de base (une
soustraction est une addition avec le complément à deux), la multiplication et la division.
Les données traitées sont considérées dans des représentations "entières".
Les opérations plus complexes (sinus, log, exp,..) peuvent être obtenues à partir des 4
opérations (par exemple par développement limité). Elles sont réalisées dans une unité de
calcul spécialisée (FPU : Floating Point Unit) qui traite des données en représentation en
"virgule flottante".
- Opérations logiques
-21-
Ces opérations sont effectuées bit à bit sur les bits de même poids de 2 mots (Fig.I-22). On trouve : ET, OU, OU exclusif, PAS,...
N-1
0
N-1
0
N-1
0
A
B
OPERATIONS : ET,OU,XOR
C
Figure I-2-2
Un autre type d'opérations concerne les décalages et rotations (droite et gauche). Ces
différentes opérations diffèrent par la façon d'entrer et de sortir les bits de poids extrêmes
(Fig.I-2-3). Elles sont utilisées par exemple pour effectuer la multiplication et la division à
partir de l'addition et la soustraction.
N-1
0
C
N-1
0
0
0
C
Décalages logiques
N-1
0
C
N-1
0
0
C
Décalages arithmétiques
C
N-1
N-1
0
0
C
Rotations
Figure I-2-3
Après chaque opération effectuée dans l'ALU, le registre d'état contient un certain
nombre d'informations liées à leur exécution. On trouve généralement : signe du résultat,
résultat nul, dépassement de capacité (retenue ou Carry (C)), etc..
I-2-1-2 Registres de données
Il s'agit de registres d'usage général recevant des opérandes, des résultats
intermédiaires ou des résultats. Ils évitent des appels fréquents à la mémoire, réduisant ainsi
les temps de calcul.
Les registres de données remplissent souvent la fonction d'accumulateur, permettant
des opérations du type :
ACCU F(OPERANDE)-> ACCU,
avec F() : opération logique ou arithmétique.
I-2-1-3 Registres d'adresses
-22-
Ces registres servent à gérer l'adressage de la mémoire. Parmi ceux-ci, un registre est
fondamental dans l'exécution du programme : le compteur ordinal (Program Counter). Il
contient l'adresse de l'instruction courante.
De façon générale, les instructions sont rangées séquentiellement en mémoire, ce qui
implique un adressage séquentiel de celles-ci par incrémentation d'adresse.
Un programme élémentaire comprend les étapes suivantes :
- initialisation du PC avec l'adresse de début de programme,
- envoi du contenu du PC sur le bus d'adresse, lecture du contenu de la case adressée par PC
et transfert dans le registre d'instruction (phase de recherche ou "Fetch"),
- décodage de l'instruction par l'U.C.,
- exécution de l'instruction,
- incrémentation du PC,
- etc...
Le contenu du PC peut cependant être modifié conditionnellement ou non par des
instructions de rupture de séquence.
* Registres d'index ou pointeurs
Ces registres sont plus spécialement adaptés au traitement des éléments d'un tableau.
Ils sont en général munis de propriétés d'incrémentation et de décrémentation.
Un cas particulier de pointeur est le pointeur de pile (Stack Pointer SP). Ce registre
permet de stocker des données ou des adresses selon le principe du "Dernier Entré Premier
Sorti" ou "LIFO" (Last In First Out). Dans certain cas, la pile est contenue dans l'U.T., mais la
plupart du temps elle est située en mémoire. Nous analyserons son mécanisme ultérieurement.
I-2-1-4 Unité de commande
Il s'agit essentiellement d'un automate exécutant les différentes séquences propres à
chaque instruction. Cet automate peut être réalisé de plusieurs façons :
- de façon câblée, par les éléments classiques de la logique séquentielle (portes, bascules, ..),
- de façon microprogrammée, par l'utilisation de réseaux combinatoires non simplifiés ou
PROMS (modèle de Wilkes).
Dans ces 2 cas, le jeu d'instructions est fixe.
Si l'utilisateur a accès au contenu des PROMS, le système est "microprogrammable".
La plupart des unités de traitement sont microprogrammées et
d'instructions fixes.
-23-
donc à jeux
I-2-2 Aspect logiciel
I-2-2-1 Classification des instructions
Les instructions peuvent porter soit sur les données, soit sur les adresses.
Dans le premier cas, il s'agit d'un traitement essentiellement effectué dans l'ALU, par
exemple : addition, décalage, opérations logiques, transfert U.T. <--> mémoire, etc...
Dans le deuxième cas, il s'agit de la gestion du PC : possibilité de fixer arbitrairement
ou conditionnellement l'adresse de la prochaine instruction (saut), d'"appeler" une suite
d'instruction, puis de continuer en séquence (sous-programme).
I-2-2-2 Format des instructions
De façon générale une instruction est composée de 2 informations :
- le code-opération indiquant le type d'opération à effectuer,
- la désignation des opérandes, c'est à dire des données sur lesquelles doit s'appliquer
l'opération.
Dans la plupart des cas, l'instruction présente en mémoire contient ces 2 informations
dans des mots consécutifs.
Le nombre d'instructions (jeu d'instructions) est directement lié au format du codeopération. Ainsi un octet permet de distinguer au maximum 256 instructions différentes.
I-2-2-3 Modes d'adressage
Une opération se présente sous la forme générale suivante :
(Opérande source 1) F (Opérande source 2) --> Destination
On parle alors de "machines à 3 adresses".
Pour éviter de spécifier systématiquement ces 3 adresses à chaque opération, les
opérandes sources ou/et destination sont contenus dans les registres internes de l'U.T. Ainsi,
la plupart des U.T. spécifient une seule adresse selon :
(Registre N) F (Opérande) --> (Registre N)
Les façons de désigner les opérandes constituent les "modes d'adressage". On
rencontre principalement les modes suivants :
* Adressage implicite
Ici les opérandes sont désignés dans le code-opération ; les données concernées se
trouvent dans les registres internes de l'U.T. (Fig.I-2-4).
***********
-24-
Format :
* CODE-OP *
***********
MEMOIRE
PC
CODE OP
UT
opération
interne
IMPLICITE
Figure I-2-4
* Adressage immédiat
L'opérande est fourni explicitement, soit dans le code-opération, soit immédiatement
après le code-opération (Fig.I-2-5).
Format :
************* ************
* CODE-OP * * VALEUR *
************* ************
MEMOIRE
PC
UT
CODE OP
opérande
IMMEDIAT
Figure I-2-5
* Adressage absolu ou étendu
L'opérande est trouvé à l'adresse fournie à la suite du code-opération (Fig.I-2-6).
Format :
************
* CODE-OP *
************
************
* ADRESSE *
************
-25-
MEMOIRE
PC
CODE OP
UT
ADR.
ADR
opérande
ETENDU
Figure I-2-6
* Adressage indirect
Ici, on peut distinguer 2 types (Fig.I-2-7) :
- par registre : l'opérande est trouvé à l'adresse pointée par le registre, celui-ci étant
désigné dans le code-opération (mode implicite),
- par la mémoire : l'opérande est trouvé à l'adresse contenue dans la case mémoire
dont l'adresse est indiquée à la suite du code-opération.
Format :
************
* CODE-OP *
************
**************************
* ADRESSE DE L'ADRESSE *
**************************
MEMOIRE
MEMOIRE
PC
CODE OP
PC
UT
CODE OP
UT
REGISTRE
ADR1
ADR1
ADR2
ADR2
opérande
opérande
INDIRECT(registre)
INDIRECT(mémoire)
Figure I-2-7
* Adressage indexé et relatif
L'opérande est trouvé à une adresse calculée de la façon suivante :
- un pointeur fournit une adresse dite "de base",
- la valeur indiquée à la suite du code-opération est appelée "déplacement (offset)",
- l'adresse de l'opérande est obtenue en additionnant la base au déplacement. Ce
déplacement peut être exprimé en valeur signée et le pointeur peut être un registre d'index ou
le PC lui-même (Fig.I-2-8).
-26-
************
* CODE-OP *
************
Format :
*****************
* DEPLACEMENT *
*****************
MEMOIRE
PC
CODE OP
UT
DEPL.
INDEX
DEPL.
opérande
INDEXE
Figure I-2-8
* Adressage auto-indexé
Le calcul de l'adresse est identique au cas précédent, mais le registre concerné est
modifié. Plusieurs cas sont possibles :
- la nouvelle base est égale à l'adresse calculée,
- le pointeur est incrémenté ou décrémenté après ou avant l'opération. Ce type
d'adressage est utilisé par le mécanisme de pile (Figure I-2-9).
MEMOIRE
PC
MEMOIRE
CODE OP
PC
UT
CODE OP
UT
(1)
SP
SP
avant
(2)
SP
(2)
SP
SP
après
SP
avant
EMPILEMENT (PUSH)
(1)
après
DEPILEMENT (PULL)
Figure I-2-9
Le SP désigne le sommet de la pile :
- l'empilement consiste à stocker l'information à l'adresse pointée par le SP, puis à
décrémenter la valeur du SP,
- le dépilement consiste à incrémenter le SP, puis à lire l'information pointée par le
SP.
Note : l'ordre de ces opérations peut être inversé dans certaines machines.
-27-
I-2-2-4 Instructions de saut
Le déroulement "normal" d'un programme est une suite d'opérations correspondant à
des instructions rangées séquentiellement en mémoire et adressées par incrémentation du PC.
Pour rompre ce type de séquence on doit disposer d'instructions de "saut" (Fig.I-2-10).
Il existe 2 types de saut :
- le saut inconditionnel,
- le saut conditionnel.
Dans le premier cas, le PC est chargé avec l'adresse spécifiée dans l'instruction
(plusieurs modes d'adressage sont possibles). La prochaine instruction sera exécutée à partir
de cette adresse.
Dans le deuxième cas, le déroulement du programme dépend du test d'une condition
(état d'un bit du registre d'état) :
- si la condition est réalisée, le saut s'effectue,
- si la condition n'est pas réalisée, le programme continue en séquence.
MEMOIRE
PC
UT
MEMOIRE
CODE OP
PC
UT
ADR
CODE OP
ADR
(CODE OP)
ADR
(CODE OP)
ETAT
PC
ADR
avant
après
(CODE OP)
avant
SAUT INCONDITIONNEL (étendu)
condition
PC
non réalisée
condition
PC
réalisée
après
SAUT CONDITIONNEL
Figure I-2-10
* Sous-programme
Lorsqu'un même programme est utilisé plusieurs fois, il serait maladroit de réécrire ce
programme à chaque fois qu'on en a besoin. Il faut donc que ce programme soit "appelable"
de plusieurs endroits en mémoire et qu'après son exécution, le déroulement reprenne à
l'instruction suivant celle d'appel.
Ce programme particulier prend alors le nom de "sous-programme". La seule
différence avec un programme "normal" est la présence à la fin du sous-programme d'une
instruction spéciale appelée "Retour de Sous-Programme (RTS)".
Il est nécessaire de mémoriser l'adresse de retour à chaque appel. On doit donc
réserver, soit dans l'unité de traitement, soit en mémoire, un emplacement pour stocker
automatiquement cette information à chaque appel de sous-programme.
-28-
Si l'on désire que, pendant l'exécution du sous-programme on puisse appeler un autre
sous-programme et ainsi de suite, il est nécessaire de pouvoir stocker autant d'adresses de
retour qu'il y a de sous-programmes appelés (niveaux de sous-programmes).
La gestion du stockage de ces adresses ne peut se faire que par le mécanisme de pile
(Dernier Entré - Premier Sorti). La taille de la pile fixe le nombre maximum de niveaux
admissibles (Fig.I-2-11).
MEMOIRE
PC
CODE OP
MEMOIRE
APPEL
(CODE OP)
(1)
ADR
sous-
(CODE OP)
ADRET
ADR
MEMOIRE
(2)
(1)
SP
(2)
ADRET
programme
RETOUR
RTS
PILE
APPEL DE SOUS-PROGRAMME
Figure I-2-11
La figure I-2-12 illustre l'imbrication de sous-programmes et montre les états
successifs de la pile au cours des phases d'exécution des programmes et des sousprogrammes.
MEMOIRE
(1)
SP
(2)
SP
MEMOIRE
SP
MEMOIRE
MEMOIRE
MEMOIRE
XXXX
ADR1
ADR2 SP
ADR1
ADR2
ADR1 SP
ADR2
ADR1
PILE
PILE
PILE
PILE
PILE
(1)
(2)
(3)
(4)
(5)
ADR1
(3)
ADR2
(5)
(4)
IMBRICATION DE SOUS-PROGRAMMES
Figure I-2-12
-29-
I-3 LES ORGANES D'ENTREE-SORTIE
I-3-1 Fonctions de base
I-3-1-1 Isolation-Mémorisation
I-3-1-2 Synchronisation
I-3-1-3 Adressage des organes d'E/S
I-3-1-4 Adaptation du format des informations
I-3-2 Procédures d'échange
I-3-2-1 Mode programmé par test de mot d'état
I-3-2-2 Mode programmé par interruption
I-3-2-3 Mode en "accès direct mémoire (DMA)"
I-3-1 Fonctions de base
I-3-1-1 Isolation-Mémorisation
L'échange d'informations avec l'environnement (entrée-sortie) se fait à l'aide d'organes
spécialisés dont les fonctions élémentaires sont les suivantes :
- isolation du bus de donnée du monde extérieur,
- mémorisation des valeurs transmises pendant le temps nécessaire à leur prise en
compte.
Ces 2 fonctions sont réalisables par des registres aussi bien en entrée qu'en sortie ; on
parle de "portes d'entrée-sortie" (Input-Output Port).
En sortie, ces fonctions sont réalisées par un registre de type "D" (Fig.I-3-1-a).
En entrée, généralement seule la fonction isolation est réalisée par un élément "tampon
3 états" (Fig.I-3-1-b). C'est alors au périphérique de maintenir la donnée stable sur le bus
externe pendant la durée de sa prise en compte.
E/S
E/S
BUS DONNEE
BUS DONNEE
BUS EXTERNE
D
BUS EXTERNE
Q
/CS
CK
ECRITURE
LECTURE
a)
b)
Figure I-3-1
I-3-1-2 Synchronisation
-30-
Des lignes de dialogue doivent indiquer qu'une donnée est disponible en entrée ou en
sortie. Ces lignes peuvent être considérées comme des entrées "normales" de données ou bien
comme des lignes spécialisées.
L'occurrence d'un événement externe se manifeste par un changement d'état de la ligne
de dialogue (front). Si ce changement est bref, il peut ne pas être détecté par l'U.T. C'est la
raison pour laquelle il est nécessaire de mémoriser cet événement dans une bascule.
Un mécanisme de synchronisation peut être le suivant (Fig.I-3-2) :
- l'U.T. met initialement à 0 la bascule (RAZ),
- un front externe met à 1 celle-ci,
- en testant l'état de la bascule, l'U.T. peut savoir si un événement a eu lieu.
CK
VERS BUS DONNEE
évènement externe
Q
D
1
CLEAR
LECTURE
RAZ
Figure I-3-2
En général, les états des différentes bascules de synchronisation sont regroupés dans
un registre d'état.
Un échange de données entre un organe d'E/S et un périphérique nécessite en général
2 lignes de dialogue : l'une indiquant la transmission d'une donnée (validation) par
l'émetteur, l'autre indiquant que le récepteur à pris en compte cette donnée (acquittement)
(Fig.I-3-3).
Validation
Validation
E/S
DONNEES
PERIPH.
E/S
DONNEES
Acquittement
Acquittement
SORTIE DE DONNEES
ENTREE DE DONNEES
Figure I-3-3
I-3-1-3 Adressage des organes d'E/S
Deux possibilités sont principalement utilisées à l'heure actuelle :
- Concept "INTEL" (Fig.I-3-4-a)
-31-
PERIPH.
Les organes d'E/S et la mémoire sont adressés par le même bus d'adresse, mais
validés en écriture ou en lecture par des signaux distincts.
L'espace d'adressage des E/S est plus petit que l'espace mémoire, ce qui n'est pas
gênant, étant donné le nombre restreint de liaisons externes nécessaires à un système.
Pour activer ces E/S, des instructions spéciales sont nécessaires (IN, OUT).
- Concept "MOTOROLA (Fig.I-3-4-b)
Les organes d'E/S sont considérés comme des positions mémoire où l'on lit (Entrée)
ou écrit (Sortie) des données.
L'avantage de cette approche est que l'on peut utiliser le jeu d'instructions complet de
l’U.T. pour manipuler les informations provenant de ces organes.
L'inconvénient est que la zone d'E/S de petite dimension "empiète" sur l'espace total
adressable normalement réservé à la mémoire.
écriture
lecture
MEM
zone
mémoire
lect/ecr
MEM
MEM
E/S
U.T.
U.T.
zone
mémoire
adressable
MEM
écriture
lecture
E/S
E/S
zone
E/S
b)
a)
Figure I-3-4
I-3-1-4 Adaptation du format des informations
Les organes d'E/S sont également chargés de transformer les informations parallèles
véhiculées sur le bus de donnée, sous une forme compatible avec celles des unités
périphériques utilisées.
Les 2 principaux modes de transmission sont les transmissions "parallèles" et les
transmissions "séries". Dans ce dernier cas, les organes d'E/S assurent les transformations
parallèle-série (sortie) ou série-parallèle (entrée).
I-3-2 Procédures d'échange
La transmission d'une donnée entre un émetteur et un récepteur ne peut s'effectuer
correctement que si ce dernier est prêt à la recevoir. Ceci implique que le système émetteur
doit être informé de l'état de disponibilité du récepteur.
La manière d'informer l'U.T. de l'état du périphérique est fonction du mode de transfert
choisi.
-32-
Il existe 2 modes de transfert :
- mode programmé utilisant les procédures de test de mot d'état ou d'interruption,
- mode en "Accès Direct Mémoire (DMA)".
I-3-2-1 Mode programmé par test de mot d'état
L'organe d'E/S fournit un mot d'état indiquant les informations suivantes :
- le périphérique est prêt à émettre ou à recevoir (Ready),
- le périphérique a envoyé une donnée,
- une erreur s'est produite pendant la transmission (série).
Le programme de transfert est donc une boucle dont la structure est présentée (Fig.I-35).
(1)
MEMOIRE
Ev.
UT
Lecture mot d'état
(1)
E/S
prêt ?
N
(3)
O
(2)
(2) et (3)
Transfert donnée
Figure I-3-5
Remarque : dans ce programme, l'U.T. teste l'état du périphérique jusqu'à ce que ce dernier
soit prêt ; elle se synchronise sur la vitesse de celui-ci.
I-3-2-2 Mode programmé par interruption
L'inconvénient du premier mode est le ralentissement de l'U.T. qui est "asservie" à un
périphérique dont la vitesse est souvent très faible.
Un mode dans lequel le périphérique informe l'U.T. qu'il est disponible semble
préférable. Mais, dans ce cas, il faut pouvoir interrompre le fonctionnement de l'U.T.,
exécuter le programme de transfert avec l'E/S, puis reprendre le programme qui était
exécuté avant l'interruption sans avoir perdu d'informations.
* Mécanisme des interruptions
- Définitions
Si le déroulement d'un programme peut être suspendu, puis repris, ce programme est
interruptible.
-33-
Si l'U.T. peut, par une instruction, inhiber ou autoriser la prise en compte
d'interruptions, les interruptions sont masquables.
- Fonctionnement avec une source d'interruption (Fig.I-3-6)
Les 2 conditions suivantes sont à respecter :
- l'instruction en cours ne doit pas être perturbée,
- l'état de l'U.T. doit être inchangé lorsque le programme interrompu reprend son
déroulement.
La première condition impose de terminer l'exécution de l'instruction en cours avant
la prise en compte de l'interruption.
La deuxième impose une sauvegarde de l'état de l'U.T. au moment de l'interruption, et
une restitution à la fin du programme d'interruption.
L'état de l'U.T. est également appelé "contexte". Dans certains cas, seuls les contenus
du PC et du registre d'état sont sauvegardés. La sauvegarde des registres utilisés dans le
programme d'interruption doit être prise en charge dans ce programme.
L'adresse de début du programme d'interruption peut être fournie de plusieurs
manières :
- elle peut être contenue dans un "vecteur d'interruption" situé dans une adresse fixe
en mémoire : le branchement à ce programme s'effectue donc par un saut indirect,
- elle peut être fournie par l'organe d'E/S au moment de la prise en compte de
l'interruption.
A la fin du programme d'interruption, l'U.T. revient à l'exécution du programme initial
par l'exécution d'une instruction de "retour d'interruption (RTI)". Ceci est réalisé
automatiquement en restituant le contexte, puisque ce dernier inclut le contenu du PC. Bien
entendu, la zone mémoire de sauvegarde ne doit pas être modifiée par le programme
d'interruption.
Demande IT
(1)
PROGRAMME
MEMOIRE
Ev.
UT
(3)
PROG. D'INTERRUPTION
Sauvegarde
E/S
(2)
(2)
(3)
(1)
Interruption
Restitution
Figure I-3-6
-34-
RTI
Note : le programme d'interruption est assimilable à un sous-programme, le moment et donc
le lieu de l'appel n'étant pas prévisibles.
- Fonctionnement avec plusieurs sources d'interruption
Le mécanisme de fonctionnement précédemment décrit reste valable, mais deux
problèmes supplémentaires sont à résoudre :
- l'U.T. doit pouvoir identifier la source d'interruption avant d'exécuter un programme
d'interruption spécifique à cette source,
- dans le cas où plusieurs interruptions arrivent simultanément, il faut pouvoir régler le
conflit : c'est la hiérarchisation des interruptions.
Plusieurs cas liés au matériel sont rencontrés :
- chaque E/S est connectée à une ligne d'interruption différente (Fig.I-3-7-a). L'U.T.
identifie directement l'organe demandeur ; un vecteur est affecté à chaque ligne. Lorsque
plusieurs demandes ont lieu simultanément, une règle de priorité est établie de façon
interne.
- toutes les E/S sont connectées à une entrée d'interruption commune (Ou câblé).
Plusieurs solutions peuvent être adoptées :
- solution logicielle (Fig.I-3-7-b ).
L'U.T. entreprend à chaque interruption une scrutation séquentielle des registres
d'état des organes d'E/S émetteurs d'interruption (Polling Sequence) suivant l'ordre de priorité
décroissante. Cette recherche s'arrête lorsque un émetteur est identifié ; ce dernier est
nécessairement celui qui a la plus haute priorité relative. Un saut au programme
correspondant à l'organe identifié réalise une vectorisation programmée. Cette méthode peut
être trop lente dans certaines applications.
- solution matérielle.
Plusieurs variantes sont possibles :
- un circuit "contrôleur d'interruption" est utilisé. Il s'apparente à un codeur de
priorité. Il fournit directement le numéro du vecteur d'interruption ou bien l'adresse de
l'interruption de la source la plus prioritaire (Fig.I-3-7-c).
- les organes d'E/S sont connectés entre-eux (chaînage ou "daisy chain"). En cas de
simultanéité d'interruption, la disposition des éléments dans la chaîne établit la priorité (Fig.I3-7-d).
-35-
IT
IT1
U.T.
E/S
U.T.
E/S
E/S
MEM
E/S
IT2
MEM
VECT1
VECT2
VECT
(a)
(b)
acq
U.T.
IT
U.T.
IT
E/S
CONTROL.D'IT
MEM
E/S
MEM
E/S
E/S
VECT1
VECT2
VECT1
VECT2
(c)
(d)
Figure I-3-7
Lorsque un programme d'interruption a été effectué, l'U.T. doit prendre en compte les
interruptions de niveau inférieur qui étaient présentes ou qui ont eu lieu depuis le traitement
de la première interruption.
Comme un programme d'interruption peut être lui-même interrompu, l'imbrication des
interruptions est similaire à celle des sous-programmes : une pile est donc nécessaire pour
sauvegarder les contextes correspondant à chaque niveau d'interruption.
De façon générale, les organes d'E/S peuvent être programmés pour activer les lignes
d'interruption au moment de l'apparition d’événements particuliers :
- périphérique prêt à recevoir,
- réception d'une donnée,
- fin de transmission (pour une transmission série par ex.),
- erreur dans la transmission,
- etc...
La désactivation de la ligne d'interruption se fait automatiquement par la prise en
compte (lecture ou écriture) des données au niveau de l'organe d'E/S émetteur de la demande.
-36-
* Autres types d'interruption
On trouve :
- les commandes d'initialisation (RESET) qui sont non masquables et de priorité
maximum. Elles servent à démarrer le système en plaçant dans le PC l'adresse de la première
instruction à exécuter. Ici, l'opération de sauvegarde de contexte n'est pas nécessaire.
- les interruptions logicielles qui permettent la sauvegarde automatique du contexte et l'appel
de fonctions prédéfinies. A chaque interruption est associé un numéro ou type désignant un
vecteur (mémoire d'indirection) dans une table.
I-3-2-3 Mode en "accès direct mémoire (DMA)"
Ce mode permet le transfert de blocs de données entre la mémoire et le périphérique sans
passer par l'U.T (Fig.I-3-8).
Mémoire
Adresse de début
EXTERIEUR
Bloc
E/S
Adresse de fin
Figure I-3-8
Pour cela, un circuit appelé contrôleur de DMA, prend en charge les différentes
opérations.
On distingue principalement 2 modes de transfert :
- mode "adresse implicite" ou "à 1 adresse",
- mode "adresse explicite" ou "à 2 adresses".
Dans le premier cas, l'échange s'effectue directement entre l'organe d'E/S et la
mémoire. Le contrôleur de DMA dispose de l'adresse en mémoire du bloc à transférer. Il
commande directement l'organe d'E/S lors du transfert grâce à des lignes de dialogue (Fig.I-39-a).
Dans le deuxième cas, le transfert s'effectue en 2 étapes (cas d'un transfert en entrée) :
- transfert de l'organe d'E/S vers le contrôleur,
- transfert du contrôleur vers la mémoire.
-37-
Ici le contrôleur contient les 2 adresses concernées. Dans ce cas, des transferts peuvent
être effectués de mémoire à mémoire (Fig.I-3-9-b).
BUS ADRESSE
MEM
DMA
E/S
BUS DONNEE
BUS ADRESSE
BUS ADRESSE
(a)
MEM
DMA
MEM
E/S
(MEM)
DMA
(b)
BUS DONNEE
E/S
(MEM)
BUS DONNEE
Figure I-3-9
Une procédure d'échange possible dans le premier mode est la suivante (entrée de
données) (Fig.I-3-10) :
- le circuit d'E/S informe le contrôleur de DMA qu'il a reçu une donnée (1),
- le contrôleur demande à l'U.T. une mise à l'état haute impédance de ses bus (bus
request) (2),
- dès que l'U.T. a libéré les bus, elle avertit le contrôleur (bus grant) (3),
- le contrôleur effectue alors les opérations suivantes (4):
- positionnement de l'adresse mémoire,
- lecture de la donnée de l'organe d'E/S,
- écriture de cette donnée en mémoire.
BUS ADRESSE
R/W
MEM
(2)
UT
(1)
DMA
(3)
IRQ
BUS DONNEE
Figure I-3-10
-38-
E/S
(4)
EXT
Le contrôleur dispose de registres internes programmables indiquant l'adresse de
début de bloc et le nombre de transferts à effectuer.
Les transferts sont réalisés à des adresses successives par incrémentation du registre
d'adresse et s'arrêtent lorsque le nombre programmé est atteint. A ce moment, l'U.T. est
avertie de cet événement, soit par lecture du mot d'état du contrôleur, soit par une interruption
issue de celui-ci.
Note : le contrôleur de DMA peut gérer des transferts de donnée avec plusieurs organes d'E/S.
Pour cela, il dispose de plusieurs "canaux" (lignes de dialogue et registres). Des règles de
priorité doivent être utilisées pour régler les conflits de demande de transfert (priorités fixe ou
tournante).
* Modes de DMA
- Arrêt de l'U.T. ( Fig.I-3-11-a)
Pendant tout le transfert, l'U.T. est arrêtée et ses bus sont en haute impédance.
Notons que le temps d'attente pour la prise en compte des bus peut être assez long, car l'U.T.
doit terminer l' instruction en cours avant de libérer les bus qu'elle commande.
- Vol de cycles (Fig.I-3-11-b)
Pour éviter l'arrêt complet de l'U.T., on peut lui dérober des cycles en agissant sur la
forme de l'horloge associée. Durant ces cycles, on effectue des transferts DMA. Une
conséquence est le ralentissement de l'exécution du programme.
Note : pour certaines U.T. de structure dynamique, il existe un intervalle de temps maximum
entre 2 tops horloge, ce qui limite le nombre de cycles consécutifs que l'on peut dérober et
donc la vitesse de transfert DMA.
- Accès multiplexé ou "transparent" (Fig.I-3-11-c)
En examinant les chronogrammes d'accès de l'U.T. à la mémoire, on s'aperçoit que
certaines périodes sont disponibles car l'U.T. effectue un travail interne. On peut donc en
profiter pour effectuer un accès DMA. Ici la mise à l'état haute impédance ne peut être
réalisée : un multiplexage des bus est nécessaire.
Notons que le programme n'est pas ralenti par le transfert DMA mais que le temps
d'accès des mémoires utilisées doit être réduit par rapport à une utilisation normale.
-39-
1 cycle
Horloge
Demande DMA
a)
Acquittement
U.T.
U.T.
DMA
DMA
DMA
U.T.
1 cycle
Horloge
Cycles volés
b)
Horloge U.T.
U.T.
U.T.
DMA
DMA
DMA
U.T.
1 cycle
Horloge
c)
DMA
U.T.
DMA
U.T.
DMA
U.T.
DMA
Figure I-3-11
-40-
U.T.
DMA
U.T.
DMA
U.T.
CHAPITRE II
ETUDE DE MICROPROCESSEURS ET D'ORGANES D'ENTREESORTIE
II-1 LE MICROCONTROLEUR 8051
II-1-1 Organisation externe
II-1-1-1 Chronologie des échanges avec la mémoire
II-1-2 Organisation interne
II-1-3 Les instructions du 8051
II-1-4 Modes d'adressage
II-1-4-1 Mode implicite
II-1-4-2 Mode immédiat
II-1-4-3 Mode direct
II-1-4-4 Mode indirect
II-1-4-5 Mode indexé
II-1-4-6 Mode relatif
II-1-4-7 Opérations spéciales
Le microcontrôleur 8051 est un microcontrôleur 8 bits ayant un bus d'adresse de 16
bits. Il appartient à une famille possédant des variantes qui diffèrent par des ressources
internes diverses (ROM, RAM, organes d’E/S,...).
II-1-1 Organisation externe
L’organisation externe du 8051 est présentée sur la figure II-1-1.
Figure II-1-1
-41-
Le 8051 est relié à son environnement par 40 broches dont le rôle est explicité cidessous (E : entrée, S : sortie, E/S entrée-sortie) :
Broches
XTAL1
XTAL2
RESET
ALE
/PSEN
/EA
VCC
VSS
P0.7-P0.0
P1.7-P1.0
P2.7-P2.0
P3.7-P3.0
Sens
E
S
E
S
S
E/S
E
E
E/S
E/S
E/S
E/S
Signification
entrée horloge
sortie horloge
Initialisation
Adress Latch Enable
Program Store Enable
CPU Memory Separate
alimentation 5V
masse
Port 0
Port 1
Port 2
Port 3
Les broches de certains ports ont un rôle particulier dans le fonctionnement du 8051 :
- le port 0 est utilisé comme bus d’adresse de poids faible A7-A0 multiplexé avec le
bus de données D7-D0,
- le port 2 est utilisé comme bus d’adresse de poids fort A15-A8,
- le port 1 peut véhiculer les signaux suivants :
- T2 entrée Timer 2 (80C154),
- T2EX entrée flag Timer 2 (80C154),
- le port 3 véhicule les signaux suivants :
- RXD entrée série,
- TXD sortie série,
- /INT0 entrée d’interruption 0,
- /INT1 entrée d’interruption 1,
- T0 entrée Timer 0,
- T1 entrée Timer 1,
- /WR signal d’écriture,
- /RD signal de lecture.
II-1-1-1 Chronologie des échanges avec la mémoire
Le 8051 est un µP synchrone, c'est à dire que tous les échanges avec la mémoire se
font en synchronisme avec une horloge.
Un cycle comprend 12 périodes horloge et 6 états S1-S6. Selon la nature de l’accès,
différents chronogrammes sont observables.
Le chronogramme de la recherche d’une instruction en mémoire externe (fetch) est
présenté (Fig.II-1-2).
-42-
Figure II-1-2
Le chronogramme de la lecture d’une donnée en mémoire externe est présenté (Fig.II1-3).
Figure II-1-3
Le chronogramme de l’écriture d’une donnée en mémoire externe est présenté (Fig.II1-4).
-43-
Figure II-1-4
-44-
II-1-2 Organisation interne
Le modèle simplifié du 8051 est présenté à la figure II-1-5.
7
SP
PILE
4 bancs de 8 registres 8 bits
0
B
R0
R1
R2
R3
R4
R5
R6
R7
ACCU
A
ETAT
PSW
15
8 7
0
PC
PCH
PCL
INDEX
DPH
DPL
Figure II-1-5
Le 8051 possède une RAM interne de 128 octets (ou 256 selon le modèle) et un
ensemble de registres appelés SFR (Special Function Register). Parmi ces registres, on
distingue :
- 4 registres de 8 bits : 1 accumulateur (A ou ACC), 1 registre (B), 1 registre d'état
(PSW), 1 pointeur de pile (SP),
- 2 registre de 16 bits : 1 compteur ordinal (PC), 1 pointeur de données (DPTR).
Voici le détail des bits du registre d'état PSW :
Bit n°
7
CY
6
AC
5
F0
4
RS1
3
RS0
2
OV
1
F1
0
P
CY : Carry Flag (retenue)
AC : Auxilliary Carry Flag (retenue auxiliaire)
F0 : Flag 0 (utilisateur)
RS1 : Register Bank Selector bit 1
RS0 : Register Bank Selector bit 0
OV : Overflow Flag
F1 : Flag 1 (utilisateur)
P : Parity Flag
La RAM interne possède des emplacements pouvant être utilisés comme registres.
Ainsi la zone (00-1F) peut contenir 4 bancs de 8 registres (R7-R0). Chaque banc est
sélectionnée par les bits RS1 et RS0 de PSW selon la table de vérité suivante :
-45-
RS1
0
0
1
1
RS0
0
1
0
1
Sélection
Banc 0 (00-07)
Banc 1 (08-0F)
Banc 2 (10-17)
Banc 3 (18-1F)
Le 8051 possède en outre :
- 2 registres associés aux interruptions : IP et IE,
- 1 registre associé au contrôle d’alimentation : PCON,
- 6 registres associés aux timer : TMOD, TCON, TH0, TL0, TH1,TL1,
- 2 registres associés aux liaisons série : SCON et SBUF.
L’architecture plus détaillée du 8051 est présentée sur la figure II-1-6.
Figure II-1-6
-46-
La figure II-1-7 détaille le rôle des bits de IE et la figure II-1-8 celui de IP.
Figure II-1-7
Figure II-1-8
La figure II-1-9 détaille le rôle des bits de TCON.
Figure II-1-9
-47-
Le tableau suivant donne l’état des différents registres après un RESET.
PC
A
B
PSW
SP
DPTR
P0-P3
IP
IE
TMOD
TCON
TH0
TL0
TH1
TL1
SCON
SBUF
PCON
0000H
00H
00H
00H
07H
0000H
FFFFH
XXX00000B
0XX00000B
00H
00H
00H
00H
00H
00H
00H
XXH
0XXXXXXXB
II-1-3 Les instructions du 8051
Le 8051 peut exécuter des instructions portant sur :
- des échanges de données entre la mémoire et les registres internes,
- des opérations logiques ou arithmétiques sur l'accumulateur,
- des opérations booléennes au niveau de l’octet et au niveau du bit,
- des manipulations sur les registres,
- des ruptures de séquences (sauts inconditionnels ou conditionnels).
Les instructions comprennent 1, 2 ou 3 octets successifs suivant les modes
d'adressage. Le premier octet contient le code opération ; le deuxième ou les deux suivants
sont des données ou des adresses.
II-1-4 Modes d'adressage
Le 8051 possède 6 modes d'adressage :
- le mode implicite,
- le mode immédiat,
- le mode direct,
- le mode indirect,
- le mode indexé,
- le mode relatif.
II-1-4-1 Mode implicite
Il comprend les instructions portant sur les registres internes du 8051.
Exemple :
-48-
Opération
A + 1 -> A
Mnémonique Instruction en hexadécimal
INC A
04
II-1-4-2 Mode immédiat
Les instructions en mode immédiat ont 2 octets. Le premier est le code opération. Le
deuxième est la donnée sur laquelle porte l'opération.
Exemple :
valeur->A
MOV A ,#valeur
74 valeur
II-1-4-3 Mode direct
Le mode direct porte sur la valeur contenue dans l’adresse fournie à la suite du code
opération.
Exemple :
(adresse)->A MOV A ,adresse
E5 adresse
Remarque : l’adresse fournie concerne la RAM interne.
II-1-4-4 Mode indirect
Le mode indirect porte sur la valeur désignée soit par l’adresse contenue dans un
registre, soit par celle de l’adresse fournie à la suite du code opération.
Exemples :
- par registre
((R1))->A
((DPTR))->A
- par adresse
((adresse))->A
MOV A ,@R18 bits (RAM interne)
MOVX A,@DPTR 16 bits (RAM externe)
MOV A,@adresse
8 bits (RAM interne)
II-1-4-5 Mode indexé
L'adresse mémoire est calculée en additionnant la valeur contenue dans l’accumulateur
à l'adresse contenue dans le pointeur de donnée.
((DPTR+A))->A
MOVC A,@A+DPTR
II-1-4-6 Mode relatif
Les ruptures de séquence se font grâce à des sauts (jump) inconditionnels
(adressage absolu) ou conditionnels (adressage relatif).
Pour les sauts conditionnels, le test sur la condition exigée se fait sur certains bits du
registre d'état PSW, des divers registres ou sur la valeur de l’accumulateur. Il s'agit de sauts
relatifs (au PC), c'est-à-dire calculés à partir de l'adresse qui contient l'instruction de saut :
Exemple :
-49-
Saut conditionnel si A=0 (JZ : Jump If Zero) (code opération : 60)
PC
JZ
PC+1
OFFSET K
PC+2
XX (instruction suivante)
........................
.
--> PC+2+K INSTRUCTION DU SAUT
K est un nombre signé en complément à 2 :
de 0 à 7F
de 80 à FF
K = 0 à + 127 -> saut positif ou nul
K = - 128 à - 1 -> saut négatif
Exemples :
Saut positif
Saut négatif
PC
60
PC+1
03
PC+2
|
PC+3
|
PC+4
|
PC+5 <-------
PC-3 <-------PC-2
|
PC-1
|
PC
60
PC+1
FB (-5)
PC+2
Si la condition est réalisée, le saut est effectué, sinon l'instruction suivante (PC+2) est
exécutée.
II-1-4-7 Opérations spéciales
Ce sont les instructions sur la pile, les appels de sous-programmes et les
interruptions.
Dans ces opérations, on utilise le pointeur de pile (SP) qui est un registre de 8 bits
désignant une adresse de la mémoire interne.
a) Instructions sur la pile
Ce sont les instructions d'empilement (PUSH) et de dépilement (POP).
Pour l'empilement, le SP est incrémenté de 1, puis la donnée concernée est stockée à
l'endroit pointé par SP (sommet de la pile).
L'exemple suivant montre l'état et la position de la pile après l’empilement successif
de 2 octets A1 et A2 :
SP ->
sens de
|
chargement |
de la pile
v
0007
0008
0009
000A
xx
A1
A2
xx
Pour le dépilement, la donnée concernée pointée par SP est restituée, puis le SP est
décrémenté de 1.
-50-
b) Appel de sous-programme
Lors d'un appel de sous-programme, on se déroute du programme principal pour
exécuter ce sous-programme. Il est alors nécessaire de mémoriser l'adresse de l'instruction (du
programme principal) qui suit immédiatement l'appel du sous-programme, pour que le PC
vienne se recharger avec cette adresse lors du retour du sous-programme.
* Instruction d'appel de sous-programme : CALL
L'adresse suivante de l'instruction CALL est empilée dans la pile (sur 2 octets). Le PC
est alors chargé avec l'adresse spécifiée par l'instruction CALL.
* Instruction de retour du sous-programme : RET
L'adresse contenue dans la pile est dépilée dans le PC.
Exemple : CALL 0029 (code opération : 12)
- programme :
- état de la pile :
- contenu du PC :
1000 12
1001 00
1002 29
1003 xx (instruction suivante)
SP -> 0007 xx
0008 xx
0009 xx
xx
10
03
1000
Avant CALL
<- SP
1029
Après CALL
Exemple : RET (code opération : 22)
- programme :
120A 22
- état de la pile
0007 xx
0008 10
SP -> 0009 03
- contenu du PC :
xx
10
03
120A
Avant RET
<- SP
1003
Après RET
c) Interruptions
Les procédures d'interruption sont similaires aux sous-programmes, mais l'instant et
donc le lieu de déroutement du programme principal ne sont pas connus. Dans ce cas,
l'adresse de retour est automatiquement sauvegardée dans la pile. On exécute alors un
programme d'interruption à la fin duquel l'instruction RETI place l'adresse de retour dans le
PC, ce qui permet de reprendre le programme à l'endroit où avait eu lieu l'interruption.
On distingue les types d'interruptions suivantes :
- RST : Reset (ré-initialisation : pas de sauvegarde)
- INT0: Interruption 0
- TM0 : Interruption Timer 0
- INT1: Interruption 1
-51-
- TM1 : Interruption Timer 1
- SI0 : Interruption Série
- TM2 : Interruption Timer 2 (80C154)
Lorsqu'une interruption externe est demandée et si elle n’est pas masquée, le 8051
termine l'opération en cours et ayant identifié la source d’interruption, saute à l’adresse
associée. Il trouve à cette adresse, soit le programme d'interruption correspondant, soit une
instruction de saut à ce dernier.
La table des interruptions est indiquée ci-après :
RST
INT0
TM0
INT1
TM1
SI0
TM2
0000H
0003H
000BH
0013H
001BH
0023H
002BH
ATTENTION : le programme d'interruption doit sauvegarder les registres utilisés autres que
PC.
Dans le cas où plusieurs interruptions de type différent se produisent, les registres IE
et IP définissent les autorisations et règles de priorité, le registre TCON les conditions de
déclenchement (niveau ou front).
-52-
II-2 L'INTERFACE PARALLELE 8255 (Programmable Peripheral
Interface PPI)
II-2-1 Présentation du circuit
II-2-2 Modes de fonctionnement
II-2-1 Présentation du circuit
Le 8255 est un circuit permettant un échange de données sous forme parallèle entre le
µP et l'extérieur (Fig.II-2-1).
COTE MICRO
COTE EXTERIEUR
PA7-PA0
/CS
groupe A
A0
A1
PC7-PC4
/RD
/WR
RESET
D7-D0
PC3-PC0
groupe B
PB7-PB0
Figure II-2-1
* Liaisons avec le microprocesseur
- D7-D0
- RESET
- /WR
- /RD
- A1, A0
- /CS
: Bus de donnée
: Initialisation
: Write (écriture)
: Read (lecture)
: Adresses
: Chip Select (sélection de boîtier)
* Liaisons avec l'extérieur
Les lignes connectées sur l'extérieur sont au nombre de 24 : 3 bus (ports) de 8 bits
(PA0-PA7, PB0-PB7, PC0-PC7). Les 3 ports sont associés selon 2 groupes : le groupe A
associe le port A et le quartet fort de C ; le groupe B associe le port B et le quartet faible de
C.
L’adressage des différents ports se fait selon les tables de vérité suivantes :
-53-
II-2-1 Modes de fonctionnement
Les modes de fonctionnement sont déterminés par l'état d’un registre contenant le mot
de contrôle : "Control Word" (CW).
On distingue 3 modes qui déterminent la façon dont sont utilisés les ports d’E/S :
- le mode 0 appelé : Basic Input/output,
- le mode 1 appelé : Strobed Input/output,
- le mode 2 appelé : Bi-Directional Bus.
Dans le mode 0, les ports peuvent être programmés en entrée ou en sortie (8 bits pour
Aet B, 2*4 bits pour C). Les sorties sont mémorisées dans des bascules D. Les entrées ne sont
pas mémorisées. Il y a 16 configurations possibles. Aucune ligne de dialogue n’est disponible.
Dans les modes 1 et 2, les ports A et B peuvent être programmés en entrée ou en
sortie, le port C regroupant des lignes de dialogue et des lignes d’E/S. Certaines lignes de
dialogue peuvent être utilisées comme demande d’interruption.
Ceci est résumé sur la figure II-2-2.
Figure II-2-2
-54-
Le mot de contrôle permet de déterminer le mode choisi ainsi que le sens de transfert
des données avec le monde extérieur.
Le bit 7 du CW établit le mode d’accès aux différents ports. Lorsqu’il est à 1, il s’agit
d’un accès normal par octets (Fig. II-2-3), lorsqu’il est à 0, il s’agit d’un accès au niveau du
bit (Fig. II-2-4). Dans ce dernier cas, chaque bit du port C peut être mis sélectivement à 0 ou à
1.
Figure II-2-3
-55-
Figure II-2-4
On trouvera la notice de fonctionnement détaillé du 8255 en annexe.
-56-
II-3 LES TRANSMISSIONS SERIE
II-3-1 Généralités
II-3-1-1 Communications asynchrones
II-3-1-2 Communications synchrones
II-3-2 Exemple d'interface série : l'ACIA MC 6850
II-3-2-1 Présentation du circuit
II-3-2-2 Fonctionnement
II-3-1 Généralités
II-3-1-1 Communications asynchrones
Ici la transmission s'effectue caractère par caractère. Un caractère comprend (Fig.II3-1) :
- un bit de départ (Start),
- des bits de donnée selon un format variable (5,6,7,8 bits),
- un bit de parité (optionnel),
- un ou plusieurs bits d'arrêt (Stop).
BITS DE DONNEE
START
0
1
N-1
parité
STOP
(option.) (1 ou 2 bits)
durée d' 1 bit
Figure II-3-1
La cadence de transmission est fixée par une horloge dont la période donne le temps
de transmission de 1 bit. La cadence de transmission exprimée en bit/s ou bauds est l'inverse
de cette période.
Au repos, la ligne de transmission est à l'état 1 (Mark). Le début de transmission est
signalé par l'apparition du bit de départ qui est dans l'état logique 0 (Space).
Les bits de donnée sont ensuite transmis séquentiellement.
Un bit de parité est ajouté éventuellement à la suite des bits de donnée. Il permet de
détecter des erreurs de transmission.
La fin de transmission du caractère est signalée par un ou plusieurs bits d'arrêt à l'état
1.
Le bit de départ permet au récepteur de détecter l'arrivée d'un caractère et de recaler la
phase de l'horloge de réception afin d'échantillonner correctement les bits suivants (au milieu
-57-
de chacun des bits). Ainsi, comme les fréquences d'émission et de réception ne sont pas
strictement identiques, il suffit de garantir une précision de quelques pour-cent pour assurer
une réception valide.
Les bits d'arrêt permettent d'effectuer un contrôle de la réception et garantissent que le
prochain mot démarrera avec une transition descendante .
Les vitesses normalisées sont : 50, 75, 110, 150, 300, 600, 1200, 2400, 4800, 9600,
19200, 38400 bauds.
II-3-1-2 Communications synchrones
Ici les données forment un flot continu de bits. Il est donc nécessaire d'effectuer la
synchronisation des caractères au début du bloc de données. Cette synchronisation peut être
interne ou externe.
La synchronisation interne s'effectue par la détection par le récepteur d'un ou
plusieurs caractères de synchronisation en tête de message. Cette détection est réalisée en
cherchant une correspondance bit à bit entre un caractère de synchronisation préétabli et le
train de bits arrivant.
La synchronisation externe nécessite une ligne spécialisée qui fournit un top à chaque
début de transmission de bloc.
Dans tous les cas, une horloge cadence la transmission des bits qui ne sont donc émis
qu'à des instants déterminés.
A la réception, on dispose soit de l'horloge et des données séparées, soit des données
seules. Dans ce dernier cas, le récepteur doit reconstituer l'horloge à partir des données (par
exemple avec une boucle à verrouillage de phase).
* Définition des procédures et protocoles
La délimitation de l'information s'effectue dans un bloc par un en-tête et un message
de contrôle d'erreur à la fin.
Un bloc comprend plusieurs champs selon la structure suivante :
synchro
en-tête
données utiles
indicateur de fin
On distingue 2 types de procédure :
- Byte Control Oriented Protocol (BCP), où chaque champ a une signification octet par octet,
- Bit Oriented Protocol (BOP), où chaque bit d'un champ peut avoir une signification
particulière.
La première est de moins en moins utilisée. La seconde est utilisée dans la procédure
HDLC (High Level Data Link Control).
-58-
L'information est véhiculée dans des trames séparées par des caractères de
synchronisation.
- Délimitation
Une trame débute et se termine par un fanion de synchronisation.
- Contenu de la trame
Une trame comprend les champs suivants :
a) champ adresse 8/16 bits désigne le numéro de la station concernée (dans un réseau),
b) champ de commande 8/16 bits caractérise le type de trames,
c) champ d'information comprenant un nombre quelconque de bits,
d) champ de contrôle d'erreur FCS (Frame Control Sequence) sur 16 bits.
- synchronisation entre trames
Elle est obtenue en insérant au moins un fanion entre 2 trames.
- transparence
Pour différencier les fanions des données reproduisant un fanion, on insère à
l'émission un 0 dans les données, chaque fois que l'on rencontre cinq 1 consécutifs à l'intérieur
d'une trame. A la réception, ce 0 sera enlevé lorsque les 5 bits précédents seront à 1.
- Structure d'une trame
Fanion
01111110
Adresse
8/16 bit
Commande
8/16 bits
Données
FCS
16bits
Fanion
01111110
II-3-2 Exemple d'interface série : l'ACIA MC 6850
A.C.I.A : Asynchronous Communication Interface Adapter (Circuit d'Interface de
Communication Asynchrone)
II-3-2-1 Présentation du circuit (Fig.II-3-2)
Cet organe d'entrée-sortie permet de travailler dans le mode série asynchrone. Il
réalise donc les transformations parallèle-série et série parallèle, en effectuant la mise au
format des informations.
-59-
/IRQ
TXCK
TX
D0-D7
/RTS
RS
/CTS
CS0
/DCD
CS1
/CS2
R/W
E
D
A
RXCK
RX
C
Figure II-3-2
L'ACIA comprend 4 registres accessibles par le microprocesseur :
- un registre de commande RC,
- un registre d'état RE,
- un registre de transmission RT,
- un registre de réception RR.
* Liaisons avec le microprocesseur
- CS0, CS1, /CS2 : Chip Select (sélections de boîtier).
- RS : Register Select ( sélection de registre).
- R/W : Read/Write (lecture-écriture).
- E : Enable : activation des échanges.
- /IRQ : Interrupt Request (demande d'interruption).
- D7-D0 : Bus de donnée.
Le tableau de sélection des différents registres est indiqué (Fig.II-3-3) :
-60-
CS0*CS1*/CS2
1
1
1
1
0
RS
0
0
1
1
X
R/W
0
1
0
1
X
FONCTIONS
Ecriture du REGISTRE DE COMMANDE RC
Lecture du REGISTRE D'ETAT RE
Ecriture du REGISTRE TRANSMISSION RT
Lecture du REGISTRE RECEPTION RR
Pas d'opération
Figure II-3-3
* Liaisons avec l'extérieur
- TXD : Transmit Data (ligne de transmission des informations en série).
- RXD : Receive Data (ligne de réception des informations en série).
- TXCK : Transmit Clock (Horloge de transmission).
- RXCK : Receive Clock (Horloge de réception).
- /CTS : Clear To Send (inhibition de l'émission).
- /RTS : Request To Send (demande d'émission).
- /DCD : Data Carrier Detect (détection de porteuse).
II-3-2-2 Fonctionnement
a) Transmission
La partie transmission est composée de deux registres : le registre de transmission
(RT) et le registre de sérialisation (RS).
Une donnée fournie par le bus donnée est d'abord introduite dans le registre RT, puis,
s'il n'est pas en train de transmettre, dans le registre RS, à partir duquel elle sera transmise en
série suivant le format dont les caractéristiques sont précisées dans le registre de commande
RC.
Lorsque RT est vide (quelque soit l'état du registre de sérialisation RS), l'ACIA
positionne le bit TDRE du registre d'état à 1 et l'ACIA émet une demande d'interruption si elle
est autorisée (/IRQ = 0) et positionne à 1 le bit IRQ du registre d'état.
b) Réception
Cette partie est composée de deux registres (RD et RR) :
-61-
- un registre de désérialisation (RD) transformant l'information série reçue, en information
parallèle "expurgée" des bits de START, STOP et PARITE, qui sera envoyée au registre de
réception RR, qui le délivrera (sur lecture) sur le bus de données.
Dès que ce registre de réception RR est "plein", le bit RDRF du registre d'état est mis
à 1 et l'ACIA émet une demande d'interruption /IRQ = 0 (si elle est autorisée) et positionne à
1 le bit IRQ du mot d'état.
c) Programmation et utilisation
A la mise sous tension, l'A.C.I.A se trouve dans un état d'attente de commande
(écriture dans le registre de commande RC).
- Mot de commande
Ce mot de commande est le contenu du registre RC ; son rôle est :
- de fixer la vitesse de transmission/réception par rapport à TXCK ou RXCK.
- de fixer le format de l'information série :
. nombre de bits de la donnée,
. bit de parité/imparité,
. nombre de bits de STOP.
- d'autoriser ou d'interdire les demandes d'interruption.
- de commander la sortie /RTS.
Structure du mot de commande :
D7
RIE
D6
TC2
D5
TC1
D4
WS3
D3
WS2
D2
WS1
D1
CDS2
On distingue les champs suivants :
RIE : Receiver Interrupt Enable,
TC2-TC1 : Transmitter Control
WS3-WS1 : Word Select,
CDS2-CDS2 : Counter Divide.
Leur rôle est indiqué ci-après.
Vitesse de transfert du transmetteur et du récepteur :
D1
0
0
1
1
D0
0
1
0
1
OBSERVATION
CK/1
CK/16
CK/64
RAZ
-62-
D0
CDS1
Format de l'information (Emission et Réception) :
D4
0
0
0
0
1
1
1
1
D3
0
0
1
1
0
0
1
1
D2
0
1
0
1
0
1
0
0
Nb. bits donnée
7
7
7
7
8
8
8
8
Parité
paire
impaire
paire
impaire
sans
sans
paire
impaire
Nombre bits stop
2
2
1
1
2
1
1
1
Commande de RTS et de l'interruption en transmission :
D6
0
1
1
1
D5
0
0
0
1
FONCTION
/RTS=0 Interruption transmetteur inhibée
/RTS=0 Interruption transmetteur autorisée
/RTS=1 Interruption transmetteur inhibée
/RTS=0 Interruption transmetteur inhibée
Transmission du caractère BREAK
Commande de l'interruption en réception :
D7
0
1
SIGNIFICATION
Interruption du récepteur inhibée
Interruption du récepteur autorisée
- Mot d'état
La lecture du registre d'état permet de connaître "l'état" interne de l'ACIA et de
certaines lignes externes.
D7
IRQ
D6
PE
D5
OVRN
D4
FE
D3
/CTS
D2
/DCD
D1
TDRE
D0
RDRF
- IRQ : Interrupt Request (demande d'interruption). Ce bit indique le complément de la
sortie /IRQ. Il est positionné à 1 dans 3 cas :
. si les interruptions du transmetteur sont autorisées quand le registre de transmission
RT est vide (disponible),
. si les interruptions du récepteur sont autorisées, quand le registre de réception RR est
"plein" (donnée reçue),
. lorsqu'il y a détection d'une perte de porteuse (/DCD= 1).
- PE : Parity Error : erreur de parité (imparité)
-63-
- OVRN : Over Run (surcharge). Quand un ou plusieurs caractères ont été reçus avant la
lecture du caractère précédent, ce bit est mis à 1.
- FE : Framing Error (erreur de format). Ce bit à 1 indique une erreur sur la donnée reçue :
. erreur de synchronisation,
. absence de bit de stop,
. réception d'un BREAK.
- /CTS : Clear To Send (inhibition de l'émetteur). Ce bit reflète l'état de l'entrée /CTS.
- /DCD : Data Carrier Detect (détection de porteuse). Ce bit reflète l'état de l'entrée /DCD.
- TDRE : Transmit Data Register Empty (registre de transmission vide). Ce bit est à 1 quand
RT est disponible (soit une transmission est en cours dans RS, soit elle est achevée). Il passe à
0 à la suite d'un chargement de RT.
- RDRF : Receive Data Register Full (registre de réception plein). Ce bit est à 1 quand le
registre de réception RR contient une donnée. Il passe à 0 à la suite de la lecture du registre
RR par le microprocesseur.
Remarque : une commande RAZ positionne à 0 les bits : RDRF, FE, OVRN, PE.
-64-
CHAPITRE III
III-1 DESCRIPTION DU MATERIEL DE TRAVAUX PRATIQUES
III-2 DESCRIPTION DE LA CARTE MICR0CONTROLEUR 8051
III-3 DESCRIPTION DE LA PLAQUETTE DE TP-CNA
III-4 TRAVAIL A REALISER
III-4-1 Utilisation de l’environnement MUVISION
III-4-2 Exercices de programmation
III-4-3 Sortie d’informations
III-4-4 Conversion analogique-numérique
III-4-5 Acquisition de données
III-1 DESCRIPTION DU MATERIEL DE TRAVAUX PRATIQUES
Le matériel utilisé comprend les éléments suivants (fig.III-1) :
- un microordinateur de type PC équipé d’une carte d’E/S comprenant 2 PIA MC6821,
- une carte à microcontrôleur 8051 munie de 2 interfaces parallèles (PPI) 8255,
- une carte TP-CNA comprenant 2 convertisseurs numérique-analogique et une entrée pour la
conversion analogique-numérique,
- un oscilloscope pouvant fonctionner en mode X-Y,
- un générateur BF.
GENE
BF
PC
PIA
PPI-D PPI-U
OSCILLO
TP-CNA
Carte 8051
E
Y
X
Figure III-1
-65-
III-2 DESCRIPTION DE LA CARTE MICR0CONTROLEUR 8051
La carte 8051 comprend les éléments suivants (fig. III-2) :
- un microcontrôleur 8051 fonctionnant à 12 MHZ,
- une PROM de 2Koctets (2716) ou 8Koctets (27C64),
- une RAM de 8Koctets,
- 2 circuits d’interface parallèle (PPI) de type 8255,
- une interface série RS232 (non utilisée ici).
Un ensemble logique non représenté assure les fonctions de décodage et de
démultiplexage d’adresse , d’initialisation,...
On trouvera le schéma détaillé de la carte en annexe.
8051
PROM
2k*8/
8k*8
RS232
RAM
8k*8
PPI-D
PPI-U
PC
Utilisateur
Figure III-2
L’organisation mémoire de la carte est la suivante :
A15
A14
A13
A12
A11
A10
A9
0
0
0
-/* -/* *
*
0
0
1
*
*
*
*
0
1
0
0
1
1
1
0
0
1
0
1
1
1
0
1
1
1
PPI-D : PPI Debug (connecté au PC)
PPI-U : PPI User (utilisateur)
* : connecté
- : non connecté
N.U. : non utilisé
A8
A7
A6
A5
A4
A3
A2
A1
A0
TYPE
*
*
-
*
*
-
*
*
-
*
*
-
*
*
-
*
*
-
*
*
-
*
*
*
*
-
*
*
*
*
-
ROM
RAM
PPI-D
PPI-U
N.U.
N.U.
N.U.
N.U.
Soit :
Adresse (hexa)
0000-1FFF
2000-3FFF
4000-5FFF
6000-7FFF
TYPE
PROM (2K ou 8K)
RAM (8K)
PPI-DEBUG (4 oct.)
PPI-USER (4 oct.)
-66-
III-3 DESCRIPTION DE LA PLAQUETTE DE TP-CNA
La plaquette de TP-CNA (fig.III-3) comprend un ensemble de circuits permettant
d’effectuer la conversion numérique-analogique sur 8 bits de 2 bus A et B provenant d’une
interface numérique.
+5V
13 1 2
12
MC 1408
11
10
9 U1 4
8
1K
7
15
6
PA7
5 3 16 14
1K
47pF
-12V
+2V
+5V
PA0
1K
Interface numérique
PB0
B
PB7
13 1 2
12
11
10
9 U2 4
8
7
15
6
5 3 16 14
+2V
U3
E (t)
Y
MC 1408
1K
1K
+2V
COMP
U6
470
470
Q1
+
TL081
+
U5
-
C1
0,1uF
1M
10K
TL081
+
U7
-
+5V
470K
P1
+12V
47K
+5V
741
+
-
MC1710
U8
4,7K 100nF
U10
2N 4858
TL081
U4
1K
1M
1uF
SW1
T
TL081
+12V
3,3K
1K
1K
47pF
-12V
X
TL081
A
4,7K 100nF
10K
+2V
1K
Q
U9
CL
BT
+5V
A
B
U9
Q
CL
A
B
2,2K
74123
+5V
Figure III-3
Le bus A est relié à un CNA MC 1408 (U1) associé à un convertisseur courant-tension
(U3). Cet ensemble constitue la voie X.
Le bus B est relié à un ensemble du même type (CNA (U2) et convertisseur couranttension (U4)) constituant la voie Y.
La tension de référence des CNA est obtenue, après division de la tension
d'alimentation + 12 V dans un pont résistif, par l'amplificateur opérationnel U10 monté en
suiveur. Cette tension est ajustée à + 2 V.
-67-
A la voie Y est associé un ensemble comprenant un étage échantillonneur-bloqueur et
un comparateur, utilisé pour la conversion analogique-numérique programmée d'un signal
d'entrée E.
Le signal d'entrée E est appliqué à U5 par une liaison continue (DC) ou alternative
(AC) par l'intermédiaire de SW1. En mode (AC), une polarisation égale à Vref/2 est
appliquée à U5 afin de centrer la valeur moyenne du signal à convertir sur cette valeur.
L'échantillonnage est réalisé par le transistor à effet de champ Q1 et le blocage par le
condensateur C1. Le signal bloqué (T) est disponible à la sortie du suiveur U6. La commande
appliquée sur la grille de Q1 provient de U7 qui réalise une adaptation de niveau pour une
sortie TTL (niveau 1 --> Q1 bloqué, niveau 0 --> Q1 passant).
Le comparateur de type MC 1710 (U8) reçoit les signaux Y et T. Sa sortie (COMP) est
à 1 si Y < T.
Un oscillateur utilisant 2 monostables rebouclés de type SN 74123 (U9) fournit un
signal de base de temps (BT) dont la durée à l'état haut est constante (temps de blocage), et
celle à l'état bas variable par l'intermédiaire de P1. Le signal BT est envoyé à
l'échantillonneur-bloqueur.
Les 2 signaux COMP et BT sont envoyés vers l’interface numérique. Celle-ci peut être
réalisée soit par un PPI de type 8255 (cas où l’on connecte la plaquette de TP-CNA à la carte
8051), soit par 2 PIA 6821 (cas où l’on connecte la plaquette de TP-CNA directement à la
carte PIA du PC).
La figure III-4 montre les connexions réalisées suivant les 2 cas.
PA
PB
INT1
PC7
BT
PC4
COMP
PPI
CA1
PIA4 PA
PB
BT
PIA0
COMP
PA7
PIA
Figure III-4
C’est la première configuration (PPI) qui est utilisée ici (PPI user d’adresse de
base 6000H). Il faut noter que le signal BT est envoyé simultanément sur l’entrée PC7 du
PPI et sur l’entrée d’interruption INT1 du 8051.
-68-
III-4 TRAVAIL A REALISER
III-4-1 Utilisation de l’environnement MUVISION
Le logiciel MUVISION permet de développer des applications en assembleur ou en C
pour la famille 8051. Il comprend les outils pour :
- l’édition des fichiers sources,
- l’assemblage ou la compilation,
- la simulation.
La version d’évaluation disponible est limitée : la taille du code objet ne peut dépasser
2 Koctets et celle du programme source ne peut dépasser 16 Koctets en mode édition.
ETAPES DE DEVELOPPEMENT
1 Edition - assemblage
- Lancer le logiciel uVision-51.
- Choisir dans le menu File l’option New.
Une fenêtre d’édition apparaît.
- Taper le programme suivant :
org 0000H
LJMP DEBUT
DEBUT:
MOV A,#55H
MOV B,#0AAH
JMP $
END
- Sauvegarder ce programme dans un fichier d’extension (.a51) dans le répertoire de travail,
par exemple : tp1.a51.
- Choisir dans le menu Project l’option : New Project.
Taper le nom du projet : tp1.prj. (Le projet doit porter le même nom que le
programme assembleur)
- Choisir dans le menu Project l’option : Edit Project.
Choisir : Add ; sélectionner le fichier source tp1.a51.
Choisir : Save, puis fermer.
- Choisir dans le menu Options l’option : A51 Assembler.
Choisir : Object ; cocher la ligne : Include Debug Information.
- Choisir dans le menu Project l’option Make Build Project.
Une boîte de message affiche les différentes étapes et la présence éventuelle
d’erreurs.
- Choisir dans le menu File l’option Open.
Sélectionner le fichier listing tp1.lst. En voici un extrait :
LOC OBJ
LINE
0000
1
SOURCE
org 0000H
-69-
0000 020003
0003
0003 7455
0005 75F0AA
0008 80FE
2
3
4
5
6
7
8
LJMP DEBUT
DEBUT:
MOV A,#55H
MOV B,#0AAH
JMP $
END
Pour simuler l’exécution du programme, il faut utiliser un autre logiciel.
- Choisir dans le menu Run : dScope Debugger.
Ceci lance le programme de mise au point qui contrôle maintenant les opérations.
2 Simulation
- Choisir dans le menu File l’option Load Object File.
Sélectionner le nom du fichier (Tp1).
Une fenêtre affiche le programme source. Une autre affiche les différents registres du
8051.
- Choisir dans la fenêtre programme : Stepinto (pas-à-pas).
La première instruction s’exécute. Vérifier l’effet dans la fenêtre registre.
- Effectuer plusieurs commandes de pas-à-pas. Observer la fenêtre registre.
Pour relancer la simulation choisir dans le menu principal : Setup puis Reset.
Observer la fenêtre registre.
* Mise en place de point d’arrêt (Breakpoint).
- Double cliquer sur la ligne n°4. La ligne passe en jaune et le mot [BR 0] s’y affiche.
- Effectuer un Reset.
- Lancer l’exécution par Go.
Le programme s’arrête sur la ligne du BR. Le pas-à-pas peut continuer.
Pour enlever le point d’arrêt, double-cliquer sur la ligne du BR.
Pour modifier le programme, revenir à uVision-51.
- Editer le programme.
- Le sauvegarder (par File puis Save).
- Choisir dans le menu Project l’option Build Project.
- Revenir à dScope Debugger.
- Recharger le programme par : File, puis Load Object File.
La fenêtre programme peut afficher ce dernier de plusieurs manières (menu : Commands) :
- High Level : source (si les informations sont disponibles dans le fichier (.obj) délivré par
uVision-51).
- Mixed : source et assembleur.
- Assembly : assembleur.
III-4-2 Exercices de programmation
Dans cette partie, on utilisera tout d’abord le simulateur dScope Debugger. Les
programmes seront écrits à partir de l’adresse 0000H.
-70-
On se propose de réaliser des programmes de multiplication de 2 nombres de 8 bits
qui "émulent" la fonction MUL du 8051. Le multiplicande et le multiplicateur seront placés
dans A et B respectivement. Le résultat final devra être dans A et B (cf. instructions du 8051).
On développera tout d’abord un programme fonctionnant par "additions successives".
Puis, on réalisera un programme fonctionnant par "décalages" selon le principe donné ciaprès :
Exemple sur 4 bits :
1010
x 1001
-----1010
0000
0000
1010
-----------01011010
multiplicande
multiplicateur
!
! résultats
! partiels
!
produit
Selon la valeur des bits successifs du multiplicateur, la multiplication des bits de
différents poids conduit à prendre comme résultat partiel soit le multiplicande, soit 0.
On décale les résultats partiels vers la gauche en allant du plus faible au plus fort.
On testera la validité des résultats obtenus et on évaluera les temps d’exécution des
opérations pour les 2 programmes réalisés.
Ces programmes peuvent être exécutés sur la maquette de TP. La seule modification à
leur apporter est de fixer l’adresse de départ dans la zone RAM (de 2000H à 3FFFH), par
exemple 3000H.
Le moniteur de mise au point décrit en annexe (CATMON32) permet le chargement
(Load) et le lancement de l’exécution (Goto) des programmes assemblés par l’environnement
Muvision.
Vérifier le fonctionnement des logiciels réalisés sur la maquette de TP.
Les programmes suivants seront chargés et testés sur la maquette de TP.
III-4-3 Sortie d’informations
On se propose de commander par programme la position du spot d'un oscilloscope.
Pour cela on relie les sorties X et Y de la plaquette aux entrées X et Y d'un oscilloscope.
On désire réaliser un balayage "télévision" (fig.III-5).
-71-
Y
Ymax
O
Xmax X
Figure III-5
La vitesse de déplacement du spot peut être ajustée de deux manières :
a ) par programme : c'est le microprocesseur qui impose la vitesse. Celle-ci est fonction de
la fréquence de l'horloge interne (temps de cycle machine) et du nombre d'instructions
élémentaires du programme. Par l'intermédiaire de "boucles de temporisation" de durée
variable avant chaque sortie des valeurs X et Y, on peut uniquement ralentir la vitesse.
b) par demande externe : ici 2 méthodes peuvent être utilisées : synchronisation et
interruption.
Dans la première méthode, le signal de base de temps (BT) étant appliqué à l’interface
numérique (PC7), le microprocesseur effectue une boucle d'attente sur le front actif de BT
(front montant) avant chaque sortie des valeurs X et Y.
Dans la deuxième méthode, le signal /BT étant appliqué à l’entrée d’interruption INT1
du 8051, on peut déclencher une interruption sur le front descendant de /BT avant chaque
sortie des valeurs X et Y.
La vitesse du spot est alors "asservie" à la fréquence de BT.
Réaliser des versions du programme de balayage utilisant ces différentes possibilités.
III-4-4 Conversion analogique-numérique
Le principe de la conversion consiste à calculer la valeur numérique codant
l'amplitude du signal à partir du signe de la différence entre la valeur inconnue à mesurer (T)
et une valeur connue appliquée au CNA sur la voie Y. Deux techniques sont utilisables : la
conversion par "rampe" et la conversion par "pesées successives".
a) Conversion par rampe
On applique à Y des valeurs croissantes en partant de la valeur 0. Après l'application
de chaque valeur, on teste l'état du signal COMP disponible sur PC4 provenant du
comparateur, afin de connaître le signe de (T - Y). On arrête l'incrémentation lorsque Y est
supérieur à T. La valeur de Y à cet instant est la valeur par excès de T.
b) Conversion par pesées successives
On applique à Y des valeurs calculées de la façon suivante :
128 --> Y ; si Y>T alors Y-128 -> Y
sinon Y est gardé
Y+64 --> Y ; si Y>T alors Y-64 --> Y
-72-
sinon Y est gardé
Y+32 --> Y ; si Y>T alors Y-32 --> Y
sinon Y est gardé
Y+16 --> Y ; si Y>T alors Y-16 --> Y
sinon Y est gardé
Y+08 --> Y ; si Y>T alors Y-08 --> Y
sinon Y est gardé
Y+04 --> Y ; si Y>T alors Y-04 --> Y
sinon Y est gardé
Y+02 --> Y ; si Y>T alors Y-02 --> Y
sinon Y est gardé
Y+01 --> Y ; si Y>T alors Y-01 --> Y
sinon Y est gardé
La valeur finale de Y constitue le résultat de la conversion qui nécessite ici 8
opérations successives. Cette méthode est donc en moyenne plus rapide que la précédente
(durée constante de N cycles au lieu de 2(N-1) cycles en moyenne et 2N cycles au maximum, où
N est le nombre de bits).
- Réaliser des programmes de conversion suivant les 2 techniques.
- Tester les programmes en appliquant une tension continue comprise entre 0 et 2 V à
l'entrée E de la plaquette (SW1 étant en position DC !). Vérifier le comportement des
programmes pour des tensions qui sortent de la plage de conversion (inférieures à 0V et
supérieures à 2V)
- Observer et relever les divers signaux test à l'oscilloscope pour différentes valeurs de la
tension d'entrée et mesurer les temps de conversion.
III-4-5 Acquisition de données
On désire acquérir un certain nombre d'échantillons du signal d'entrée. Pour cela, il
faut convertir chaque échantillon durant la période de blocage (BT=1) et donc effectuer une
boucle de synchronisation sur le signal BT avant chaque phase de conversion.
* Acquisition
- Modifier en conséquence le programme par pesées successives.
- Vérifier à l'oscilloscope que la conversion s'effectue bien durant la période de blocage et
que sa durée est inférieure à celle-ci. Si cette dernière condition n'est pas remplie, il faut
optimiser le programme de conversion par l'utilisation d'instructions s'exécutant plus
rapidement.
* Visualisation
Après avoir transféré dans une zone mémoire (buffer) 256 échantillons du signal, on
peut visualiser en "continu" le contenu de cette zone et donc la forme du signal "numérisé".
Pour cela, on applique périodiquement sur les voies X et Y respectivement les valeurs
X et Y = buffer[X] pour X variant de 0 à 255, l'oscilloscope étant en mode X-Y.
- Réaliser un programme permettant d'acquérir 256 échantillons du signal et de visualiser
périodiquement le signal numérisé sur l'oscilloscope.
-73-
- Tester le programme en appliquant à l'entrée E (SW1 étant en position AC) un signal de
quelques dizaines de hertz et d'amplitude crête à crête inférieure à 2V.
- Faire varier les fréquences du signal E et de BT. Interpréter les résultats obtenus.
* Couplage avec le PC
Il est possible de commander la carte 8051 à partir du PC grâce à des fonctions
disponibles en bibliothèque : on peut charger un programme, lancer son exécution et
transférer des données en lecture ou en écriture (cf. annexe).
- Développer un logiciel en C pour visualiser le signal numérisé par la carte 8051 sur l'écran
du micro-ordinateur à l'aide des fonctions graphiques disponibles.
-74-
BIBLIOGRAPHIE
- MICROPROCESSEURS ET CIRCUITS ASSOCIES R.Dubois. Collection Editest
- THEORY AND DESIGN OF DIGITAL COMPUTERS D.Lewin. Editions Nelson
- COURS FONDAMENTAL DES MICROPROCESSEURS H.Lilen. Editions Radio
- DU COMPOSANT AU SYSTEME - INTRODUCTION AUX MICROPROCESSEURS
R.ZAKS - A.WOLFE. Editions Sybex
- DU COMPOSANT AU SYSTEME - APPLICATIONS DES MICROPROCESSEURS
R.ZAKS - A.WOLFE. Editions Sybex
- LES ARCHITECTURES RISC J.C.Heudin - C.Panetto. Editions Dunod Informatique
-75-
ANNEXES
A1 - INSTRUCTIONS DU 8051
A2 - LANGAGE ASSEMBLEUR DU 8051
A3 - UTILISATION DU MONITEUR DE MISE AU POINT CATMON32
A4 - COMMANDES DU MONITEUR RESIDENT CATBUG
A5 - RESSOURCES UTILISEES PAR CATBUG
A6 - FONCTIONS C DE LA BIBLIOTHEQUE DE GESTION DE LA CARTE 8051
A7 - SCHEMA ELECTRIQUE CARTE 8051 1/2
A8 - SCHEMA ELECTRIQUE CARTE 8051 2/2
A9 - IMPLANTATION CARTE 8051
A10 - STRUCTURE D’UN FICHIER (.HEX)
A11 - LE CODE ASCII
A12 - 80C51 FAMILY ARCHITECTURE
A13 - 80C51 FAMILY PROGRAMMER’S GUIDE
A14 - NOTICE TECHNIQUE DU 8255
-76-
A1 - INSTRUCTIONS DU 8051
-77-
-78-
-79-
-80-
-81-
-82-
A2 - LANGAGE ASSEMBLEUR DU 8051
Le langage d'assemblage permet d'écrire le programme directement exécuté par le
microprocesseur sous une forme symbolique. C'est donc un traducteur d'un programme
symbolique dit programme source, en données binaires correspondant aux codes machine ou
programme objet.
Le programme source comprend un ensemble de lignes composées chacune de
plusieurs champs séparés par des espaces selon :
étiquette !_! code-OP ou directive !_! opérande !_! ; commentaire
*
*
*
*
!_! représente un espace au moins.
* représente des champs optionnels.
Nous détaillons le rôle des différents champs.
1 Etiquette
Elle permet de repérer l'adresse de la ligne. Elle est composée de lettres et de chiffres
(premier caractère = 1 lettre, longueur maximum =32 caractères) et doit se terminer par le
caractère : .
Exemples :
DEBUT:
FIN:
BOUCLE1:
Si le premier caractère de la ligne est le caractère ;, la ligne est considérée comme un
commentaire.
Exemple :
;*******Ceci est un commentaire*******
2 Code Opération
Il représente l'instruction sous forme mnémonique.
Exemples : MOV signifie MOVE (transfert )
ADD signifie ADDITION
RR signifie ROTATE RIGHT (Rotation à droite)
3 Opérande
L'opérande représente une donnée ou une adresse sur laquelle porte l'opération. Il
regroupe d'une part le mode d'adressage, d'autre part une expression évaluable par
l'assembleur.
3-1 Mode d'adressage
-83-
Le mode par défaut est le mode direct ou implicite. A chaque autre mode est associé
un symbole particulier.
Exemple :
# signifie : immédiat
@ signifie : indirect
3-2 Evaluation de l'opérande
Elle peut être faite de deux façons :
- Forme numérique
Un nombre est interprété en décimal, sauf s'il est suivi d'un des caractères suivants :
H signifie : nombre hexadécimal,
B signifie : nombre binaire.
Exemples :
80H = 128 (décimal)
10101010B = 0AAH = 170 (décimal)
Un caractère ASCII est représenté de la façon suivante :
‘A’ = 41H = 65 (décimal)
Remarque : si un nombre hexadécimal commence par une lettre (A-F), il faut le faire
précéder par le chiffre 0.
Le caractère $ est réservé pour désigner l'adresse courante de l'instruction.
Exemple :
JMP $ ; Boucle sans fin !!!
- Forme symbolique
Un symbole est constitué comme une étiquette (sans le caractère :). Sa valeur doit
pouvoir être évaluée par l'assembleur. Nous verrons ultérieurement que des directives
permettent les affectations de valeurs numériques aux symboles.
Notons que l'opérande peut être calculé à partir d'opérations arithmétiques portant sur
des combinaisons entre valeurs numériques ou symboliques.
Les opérations reconnues sont :
+
:
Addition
:
Soustraction
*
:
Multiplication
/
:
Division entière
MOD :
Module (reste de la division entière)
SHR :
Décalage à droite
SHL :
Décalage à gauche
NOT :
Négation logique (complément)
AND :
Et logique
OR
:
Ou (inclusif)
XOR :
Ou (exclusif)
LOW :
8 bits de poids faible
HIGH :
8 bits de poids fort
-84-
EQ
NE
GT
GE
LT
LE
:
:
:
:
:
:
Relation d’égalité (=)
Relation de non égalité (<>)
Relation de supériorité (>)
Relation de supériorité ou égalité (>=)
Relation d’infériorité (<)
Relation d’infériorité ou égalité (<=)
4 Directives
Placés dans le champ "code-opération", ces pseudo-codes sont destinés à l'assembleur. On
trouve les directives suivantes :
EQU : permet l'affectation d'une valeur à un symbole (adresse ou donnée).
Exemples :
ETI
EQU 0C000H
DATA1 EQU 01001010B
ORG : établit l'adresse à partir de laquelle est implanté le programme qui suit.
END : marque la fin du programme assembleur.
DB : stocke des octets en mémoire.
Exemples :
DB
0,45,0FFH
DB
‘A’,’B’,C’
DB
"ERREUR" ; l'assembleur placera ici les codes ASCII du mot ERREUR.
DW : stocke des mots de 16 bits en mémoire.
Exemple :
DW 56FFH,1000
DS : réserve des octets en mémoire.
Exemple :
DS
10
; réserve 10 octets en mémoire.
-85-
A3 - UTILISATION DU MONITEUR DE MISE AU POINT CATMON32
Développé au Département d’Electronique de l’ENSEEIHT, ce logiciel permet de
commander la carte 8051. Ecrit en langage C++ (Borlandc 5.02), c’est une application
WINDOWS 32 bits qui assure la communication avec le logiciel résident sur la PROM
(CATBUG).
La fenêtre suivante regroupe les différentes commandes.
- Goto : lancement de l’exécution d’un programme à partir d’une adresse de départ.
- Cont : lancement de l’exécution d’un programme à partir de l’adresse courante (cf.Step).
- Step : lancement de l’exécution d’un programme en pas-à-pas à partir de l’adresse
courante.
- Brkpt : ajout et suppression d’un point d’arrêt.
- Load : chargement d’un programme objet sous forme de fichier (.hex).
- Dump : affichage par blocs du contenu de la mémoire externe ou de la mémoire interne.
- Reset : ré-initialisation de la carte.
- Tppi : test du PPI utilisateur.
On visualise et on peut modifier le contenu des différents registres du 8051 (sauf SP).
L’écriture est réalisée en entrant la valeur de la donnée dans la zone d’édition du registre.
On peut effectuer la consultation en lecture et écriture de la mémoire externe et de la
mémoire interne. Les boutons associés permettent d’incrémenter ou de décrémenter les
adresses. L’écriture est réalisée en entrant la valeur de la donnée dans la zone d’édition des
données.
Lorsque le fichier listing (.lst) est disponible, une fenêtre permet de suivre le
déroulement du programme en pas-à-pas. L’instruction courante est repérée en bleu. La
présence d’un point d’arrêt est repérée en rouge. Ceci est visible sur la fenêtre suivante.
-86-
Attention : l’utilisation de points d’arrêt doit s’effectuer avec précaution. En effet, le principe
utilisé ici consiste à remplacer l’instruction du point d’arrêt par un appel à un sousprogramme du moniteur ; cet appel occupe 3 octets. Pour éviter tout problème, il est
préférable d’introduire des instructions de type NOP pour que l’instruction remplacée
"occupe" elle aussi 3 octets !
La fonction Dump permet de visualiser par blocs de 256 octets le contenu de la
mémoire interne ou externe. La fenêtre d’affichage est la suivante :
Le bouton I/E permet de choisir entre Interne et Externe. En mode Interne, seuls les
128 premiers octets sont significatifs. En mode Externe, on peut fixer l’adresse de début du
bloc qui est arrondie à un multiple de 16. Les boutons + et - permettent de se déplacer dans la
mémoire. La fonction Remp permet de remplir une zone mémoire externe entre une adresse
de départ et une adresse d’arrivée par une constante.
-87-
A4 - COMMANDES DU MONITEUR RESIDENT CATBUG
Les commandes élémentaires reconnues par CATBUG sont les suivantes :
MAAAA : lecture mémoire externe (AAAA : adresse en hexadécimal) ; le moniteur renvoie
DD# (DD : octet lu, # : fin de transaction).
IAA : lecture mémoire interne (AA : adresse en hexadécimal) ; le moniteur renvoie DD# (DD
: octet lu, # : fin de transaction).
FAADD : écriture mémoire interne (AA : adresse en hexadécimal, DD : donnée en
hexadécimal) ; le moniteur renvoie # (# : fin de transaction).
LXXXXYYYY112233... : écriture en mémoire externe d’un bloc compris entre l’adresse de
début XXXX et l’adresse de fin YYYY par les octets 112233... ; le moniteur renvoie # (# : fin
de transaction).
RC : lecture d’un registre (C : code du registre : A : accumulateur, B : registre B, H : DPH, L
: DPL, S : PSW, 0 : R0, 1 : R1, 2 : R2, 3 : R3, 4 : R4, 5 : R5, 6 : R6, 7 : R7, P : SP) ; le
moniteur renvoie DD# (DD : contenu du registre, # : fin de transaction).
WCDD : écriture d’un registre avec la valeur DD (C : code du registre : A : accumulateur, B :
registre B, H : DPH, L : DPL, S : PSW, 0 : R0, 1 : R1,2 : R2, 3 : R3, 4 : R4, 5 : R5,6 : R6, 7 :
R7, P : SP) ; le moniteur renvoie # (# : fin de transaction).
B1AAAA : Pose d’un point d’arrêt à l’adresse AAAA ; le moniteur renvoie # (# : fin de
transaction).
B1- : suppression du point d’arrêt ; le moniteur renvoie # (# : fin de transaction).
GAAAA : lancement d’un programme à l’adresse AAAA ; le moniteur renvoie # (# : fin de
transaction) si le programme utilisateur redonne le contrôle au moniteur (Point d’entrée :
0033). Si un point d’arrêt est rencontré, le moniteur renvoie BBBB# (BBBB : adresse du
point d’arrêt, # : fin de transaction).
SAAAA : lancement d’un programme à l’adresse AAAA en mode pas-à-pas ; le moniteur
renvoie BBBB# (BBBB : adresse suivante, # : fin de transaction).
Toutes ces commandes peuvent être envoyées par logiciel ou en mode émulation
"terminal".
-88-
A5 - RESSOURCES UTILISEES PAR CATBUG
Le moniteur CATBUG utilise des emplacements en mémoire interne et en mémoire
externe. Le tableau suivant montre l’utilisation de la mémoire interne :
00
10
20
30
40
50
60
70
0
R
R
1
R
R
2
R
R
3
R
R
4
R
R
5
R
R
6
R
R
7
R
R
P
->
->
->
->
->
->
->
M
M
M
M
M
M
M
M
8
R
R
9
R
R
A
R
R
B
R
R
C
R
R
D
R
R
E
R
R
F
R
R
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
R : registres, P : pile ; M : moniteur.
Le tableau suivant montre l’utilisation de la mémoire externe (RAM) :
2000
2010
2020
2030
0
X
1
X
2
X
3
X
U
U
4
X
U
U
5
X
U
U
6
7
8
9
A
P
P
P
B
U
U
U
C
U
U
U
D
U
U
U
E
F
X, U : vecteurs d’interruption renvoyés en RAM (correspondant à la table de vecteur du
8051), P : zone de "Patch".
Remarques : - lors d’un Reset, les vecteurs modifiables par l’utilisateur (U) sont initialisés
par défaut avec l’instruction RETI (23H),
- le vecteur associé à l’interruption INT0 (2003H) est contrôlé par Catbug et
utilisé pour le pas-à-pas. Il ne faut donc pas le modifier dans la phase de mise au point !
Lorsque l’utilisateur veut prendre le contrôle d’une interruption, il doit réaliser un
programme d’initialisation chargé d’écrire à l’emplacement du vecteur correspondant (sur 3
octets), une instruction de saut vers l’adresse du programme qui prendra en charge
l’interruption. Cette instruction comprend le code opération de l’instruction de saut LJMP
(02H), suivi des octets d’adresse haute et d’adresse basse du début du programme
d’interruption. Puis, afin d’autoriser la prise en compte des interruptions, il doit configurer
correctement le contenu du registre IE et éventuellement celui de IP (pour les priorités).
Remarque : Catbug utilisant l’interruption INT0, il ne faut pas modifier la
configuration associée dans IE !
Le moniteur possède un certain nombre de fonctions appelables depuis une table de
saut à partir de l’adresse 0030H. Les 2 premières sont des points d’entrée du moniteur. Les
autres sont des sous-programmes appelables.
0030 LJMP INIT
0033 LJMP GETCMD
// Initialisation
// Point d’entrée de l’interpréteur de commandes du moniteur
-89-
0036 LJMP DELAY
0039 LJMP SERIN
003C LJMP GETC
003F LJMP PUTC
0042 LJMP PUTS
0045 LJMP ASC2HEX
0048 LJMP HEX2ASC
004B LJMP RDHEX
004E LJMP WRBYTE
0051 LJMP TESTSERIN
// Temporisation de A * 1 ms
// Entrée d’un caractère dans A
// Entrée d’un caractère et conversion minuscule-majuscule (A)
// Sortie d’un caractère dans A
// Sortie d’une chaîne de caractère pointée par DPTR et terminée
// par 0
// Conversion ASCII-Hexadécimal (A)
// Conversion Hexadécimal-ASCII (A)
// Entrée d’un octet à partir de 2 caractères hexa (A)
// Sortie d’un octet sous forme de 2 caractères hexa (A)
// Test de réception d’un caractère : C=0 : non ; C=1 : oui
Lorsque un programme utilisateur se termine, il doit rendre le contrôle à Catbug par un
saut à l’adresse 033H.
-90-
A6 - FONCTIONS C DE LA BIBLIOTHEQUE DE GESTION DE LA CARTE 8051
Les fonctions C sont contenues dans le fichier 8051drv.obj (version DOS) ou
8051dr32.obj (version Windows 32 bits) et leurs prototypes dans le fichier 8051drv.h
(version DOS) ou 8051dr32.h (version Windows 32 bits). Les programmes appelant ces
fonctions doivent comprendre la directive : #include "8051drv.h" ou #include "8051dr32.h"
selon le cas.
ADR_IN
Fonction : Lecture d’une adresse sur deux octets de la carte 8051.
Prototype : int Adr_in(unsigned int *adr)
Paramètres en entrée : pointeur sur l’adresse à lire
Valeur retournée : 0 : OK, ESC : erreur.
BUF_OUT
Fonction : Sortie du contenu d’un buffer de caractères vers la carte 8051.
Prototype : int Buf_out(char buf[])
Paramètres en entrée : buffer de caractères
Valeur retournée : 0 : OK, ESC : erreur.
BYTE_IN
Fonction : Lecture d’une donnée sur un octet de la carte 8051.
Prototype : int Byte_in(unsigned int *data)
Paramètres en entrée : pointeur sur la donnée à lire
Valeur retournée : 0 : OK, ESC : erreur.
CIN
Fonction : Entrée d’un caractère émis par la carte 8051.
Prototype : int Cin(void)
Paramètres en entrée : aucun
Valeur retournée : caractère, ESC : erreur.
COUT
Fonction : Sortie d’un caractère vers la carte 8051.
Prototype : int Cout(int valeur)
Paramètres en entrée : valeur du caractère
Valeur retournée : 0 : OK, ESC : erreur.
DOWNLOAD
Fonction : Chargement d’un programme dans la carte 8051.
Prototype : int Download(char FileName[],unsigned int *adr1)
Paramètres en entrée : nom du fichier (.hex), pointeur sur l’adresse de début de chargement
Valeur retournée : 0 : OK, 1 : erreur.
ECR_MEMINT
Fonction : Ecriture d’un octet en mémoire interne de la carte 8051.
Prototype : int Ecr_memint(unsigned int adresse,unsigned int donnee)
Paramètres en entrée : adresse, donnée
Valeur retournée : 0 : OK, ESC : erreur.
-91-
ECR_MEMEXT
Fonction : Ecriture d’un octet en mémoire externe de la carte 8051.
Prototype : int Ecr_memext(unsigned int adresse,unsigned int donnee)
Paramètres en entrée : adresse, donnée
Valeur retournée : 0 : OK, ESC : erreur.
GOTO1
Fonction : Lancement d’un programme de la carte 8051.
Prototype : int Goto1(unsigned int *adr)
Paramètres en entrée : pointeur sur l’adresse de début du programme chargé
Valeur retournée : 0 : OK, ESC : erreur.
LEC_MEMINT
Fonction : Lecture d’un octet en mémoire interne de la carte 8051.
Prototype : int Lec_memint(unsigned int adresse,unsigned int *data)
Paramètres en entrée : adresse, pointeur sur la donnée
Valeur retournée : 0 : OK, ESC : erreur.
LEC_MEMEXT
Fonction : Lecture d’un octet en mémoire externe de la carte 8051.
Prototype : int Lec_memext(unsigned int adresse,unsigned int *data)
Paramètres en entrée : adresse, pointeur sur la donnée
Valeur retournée : 0 : OK, ESC : erreur.
RESET1
Fonction : Initialisation de la carte 8051 et des PIA de communication.
Prototype : int Reset1(void)
Paramètres en entrée : aucun
Valeur retournée : 0 : OK, 1 : erreur.
TEST_CIN
Fonction : Test de disponibilité d’un caractère émis par la carte 8051.
Prototype : int Test_cin(void)
Paramètres en entrée : aucun
Valeur retournée : 0 : pas de caractère, 1 caractère émis.
-92-
A7 - SCHEMA ELECTRIQUE CARTE 8051 1/2
-93-
A8 - SCHEMA ELECTRIQUE CARTE 8051 2/2
-94-
A9 - IMPLANTATION CARTE 8051
-95-
A10 - STRUCTURE D’UN FICHIER (.HEX)
Intel 8-bit Hex File Format
The 8-bit Intel Hex File Format is a printable ASCII format consisting of one or more
data records followed by an end of file record. Each record consists of one line of
information. Data records may appear in any order. Address and data values are represented
as 4 or 2 hexadecimal digit values.
Record Format
:LLAAAARRDDDD......DDDDCC
LL
AAAA
RR
DD
CC
Length field. Number of data bytes.
Address field. Address of first byte.
Record type field. 00 for data and 01 for end of record.
Data field.
Checksum field. Two's complement of length, address, record type and data fields modulo 256.
Example:
:06010000010203040506E4
:00000001FF
The first line in the above example Intel Hex file is a data record addressed at location
100H with data values 1 to 6. The second line is the end of file record.
-96-
A11 - LE CODE ASCII
-97-
A12 - 80C51 FAMILY ARCHITECTURE
-98-
Philips Semiconductors
80C51 Family
80C51 family architecture
The interrupt service locations are spaced at 8-byte intervals: 0003H
for External Interrupt 0, 000BH for Timer 0, 0013H for External
Interrupt 1, 001BH for Timer 1, etc. If an interrupt service routine is
short enough (as is often the case in control applications), it can
reside entirely within that 8-byte interval. Longer service routines
can use a jump instruction to skip over subsequent interrupt
locations, if other interrupts are in use.
80C51 ARCHITECTURE
MEMORY ORGANIZATION
All 80C51 devices have separate address spaces for program and
data memory, as shown in Figures 1 and 2. The logical separation of
program and data memory allows the data memory to be accessed
by 8-bit addresses, which can be quickly stored and manipulated by
an 8-bit CPU. Nevertheless, 16-bit data memory addresses can also
be generated through the DPTR register.
The lowest 4k bytes of Program Memory can either be in the on-chip
ROM or in an external ROM. This selection is made by strapping the
EA (External Access) pin to either VCC, or VSS. In the 80C51, if the
EA pin is strapped to VCC, then the program fetches to addresses
0000H through 0FFFH are directed to the internal ROM. Program
fetches to addresses 1000H through FFFFH are directed to external
ROM.
Program memory (ROM, EPROM) can only be read, not written to.
There can be up to 64k bytes of program memory. In the 80C51, the
lowest 4k bytes of program are on-chip. In the ROMless versions, all
program memory is external. The read strobe for external program
memory is the PSEN (program store enable).
If the EA pin is strapped to VSS, then all program fetches are
directed to external ROM. The ROMless parts (8031, 80C31, etc.)
must have this pin externally strapped to VSS to enable them to
execute from external Program Memory.
Data Memory (RAM) occupies a separate address space from
Program Memory. In the 80C51, the lowest 128 bytes of data
memory are on-chip. Up to 64k bytes of external RAM can be
addressed in the external Data Memory space. In the ROMless
version, the lowest 128 bytes are on-chip. The CPU generates read
and write signals, RD and WR, as needed during external Data
Memory accesses.
The read strobe to external ROM, PSEN, is used for all external
program fetches. PSEN is not activated for internal program fetches.
The hardware configuration for external program execution is shown
in Figure 4. Note that 16 I/O lines (Ports 0 and 2) are dedicated to
bus functions during external Program Memory fetches. Port 0 (P0
in Figure 4) serves as a multiplexed address/data bus. It emits the
low byte of the Program Counter (PCL) as an address, and then
goes into a float state awaiting the arrival of the code byte from the
Program Memory. During the time that the low byte of the Program
Counter is valid on Port 0, the signal ALE (Address Latch Enable)
clocks this byte into an address latch. Meanwhile, Port 2 (P2 in
Figure 4) emits the high byte of the Program Counter (PCH). Then
PSEN strobes the EPROM and the code byte is read into the
microcontroller.
External Program Memory and external Data Memory may be
combined if desired by applying the RD and PSEN signals to the
inputs of an AND gate and using the output of the gate as the read
strobe to the external Program/Data memory.
Program Memory
Figure 3 shows a map of the lower part of the Program Memory.
After reset, the CPU begins execution from location 0000H. As
shown in Figure 3, each interrupt is assigned a fixed location in
Program Memory. The interrupt causes the CPU to jump to that
location, where it commences execution of the service routine.
External Interrupt 0, for example, is assigned to location 0003H. If
External Interrupt 0 is going to be used, its service routine must
begin at location 0003H. If the interrupt is not going to be used, its
service location is available as general purpose Program Memory.
Program Memory addresses are always 16 bits wide, even though
the actual amount of Program Memory used may be less than 64k
bytes. External program execution sacrifices two of the 8-bit ports,
P0 and P2, to the function of addressing the Program Memory.
External
Interrupts
Interrupt
Control
4k
ROM
Timer 1
128
RAM
Counter
Inputs
Timer 0
CPU
Osc
Bus
Control
Serial
Port
Four I/O Ports
TXD
P0
P2
P1
RXD
P3
Address/Data
SU00458
Figure 1. 80C51 Block Diagram
March 1995
1
Philips Semiconductors
80C51 Family
80C51 family architecture
Program Memory
(Read Only)
Data Memory
(Read/Write)
FFFFH:
FFFFH:
External
Internal
0FFFH
EA = 0
External
FFH:
EA = 1
Internal
0000
00
RD
PSEN
WR
SU00459
Figure 2. 80C51 Memory Structure
80C51
0023H
EPROM
P0
001BH
EA
8 Bytes
Interrupt
Locations
0013H
ALE
000BH
P2
0003H
PSEN
Reset
OE
0000H
SU00460
SU00461
Figure 3. 80C51 Program Memory
Figure 4. Executing from External Program Memory
Memory addresses can be either 1 or 2 bytes wide. One-byte
addresses are often used in conjunction with one or more other I/O
lines to page the RAM, as shown in Figure 5.
Data Memory
The right half of Figure 2 shows the internal and external Data
Memory spaces available to the 80C51 user. Figure 5 shows a
hardware configuration for accessing up to 2k bytes of external
RAM. The CPU in this case is executing from internal ROM. Port 0
serves as a multiplexed address/data bus to the RAM, and 3 lines of
Port 2 are being used to page the RAM. The CPU generates RD
and WR signals as needed during external RAM accesses. There
can be up to 64k bytes of external Data Memory. External Data
March 1995
ADDR
Latch
Two-byte addresses can also be used, in which case the high
address byte is emitted at Port 2.
Internal Data Memory is mapped in Figure 6. The memory space is
shown divided into three blocks, which are generally referred to as
the Lower 128, the Upper 128, and SFR space.
2
Philips Semiconductors
80C51 Family
80C51 family architecture
The next 16 bytes above the register banks form a block of
bit-addressable memory space. The 80C51 instruction set includes
a wide selection of single-bit instructions, and the 128 bits in this
area can be directly addressed by these instructions. The bit
addresses in this area are 00H through 7FH.
Internal Data Memory addresses are always one byte wide, which
implies an address space of only 256 bytes. However, the
addressing modes for internal RAM can in fact accommodate 384
bytes, using a simple trick. Direct addresses higher than 7FH
access one memory space, and indirect addresses higher than 7FH
access a different memory space. Thus Figure 6 shows the Upper
128 and SFR space occupying the same block of addresses, 80H
through FFH, although they are physically separate entities.
All of the bytes in the Lower 128 can be accessed by either direct or
indirect addressing. The Upper 128 (Figure 8) can only be accessed
by indirect addressing.
The Lower 128 bytes of RAM are present in all 80C51 devices as
mapped in Figure 7. The lowest 32 bytes are grouped into 4 banks
of 8 registers. Program instructions call out these registers as R0
through R7. Two bits in the Program Status Word (PSW) select
which register bank is in use. This allows more efficient use of code
space, since register instructions are shorter than instructions that
use direct addressing.
Figure 9 gives a brief look at the Special Function Register (SFR)
space. SFRs include the Port latches, timers, peripheral controls,
etc. These registers can only be accessed by direct addressing.
Sixteen addresses in SFR space are both byte- and bit-addressable.
The bit-addressable SFRs are those whose address ends in 0H or 8H.
Data
P0
FFH
EA
80C51
with
Internal
ROM
VCC
Upper
128
Latch
Accessible
by Direct
Addressing
80H
80H
7FH
ALE
ADDR
Lower
128
P3
FFH
Accessible
by Indirect
Addressing
Only
RAM
P2
Special
Function
Registers
0
RD
I/O
WR
Accessible
by Direct
and Indirect
Addressing
Page
Bits
WE
OE
Ports,
Status and
Control Bits,
Timer,
Registers,
Stack Pointer,
Accumulator
(Etc.)
SU00462
SU00463
Figure 5. Accessing External Data Memory
If the Program Memory Is Internal,
the Other Bits of P2 Are Available as I/O
Figure 6. Internal Data Memory
7FH
FFH
2FH
Bank
Select
Bits in
PSW
Bit-Addressable Space
(Bit Addresses 0-7F)
No Bit-Addressable
Spaces
20H
1FH
11
18H
17H
10
10H
0FH
4 Banks of
8 Registers
R0-R7
01
08H
07H
00
Reset Value of
Stack Pointer
80H
0
SU00464
SU00465
Figure 7. Lower 128 Bytes of Internal RAM
March 1995
Figure 8. Upper 128 Bytes of Internal RAM
3
Philips Semiconductors
80C51 Family
80C51 family architecture
.
.
.
FFH
Register-Mapped Ports
ACC
E0H
.
.
.
Addresses that end in 0H or 8H
are also
bit-addressable.
Port 3
B0H
.
.
.
A0H
Port 2
90H
Port 1
-
Port Pins
Accumulator
PSW
(Etc.)
.
.
.
Port 0
80H
SU00466
Figure 9. SFR Space
CY
AC
F0
RS1
RS0
OV
PSW 7
Carry flag receives carry out
from bit 7 of ALU operands
P
PSW 0
Parity of accumulator set
by hardware to 1 if it contains
an odd number of 1s; otherwise
it is reset to 0.
PSW 6
Auxiliary carry flag receives carry out from bit 3
of addition operands.
PSW 1
User-definable flag
PSW 5
General purpose status flag
PSW 2
Overflow flag set by
arithmetic operations
PSW 4
Register bank select bit 1
PSW 3
Register bank select bit 0
SU00467
Figure 10. PSW (Program Status Word) Register in 80C51 Devices
RAM locations as R0 through R7. The selection of which of the four
is being referred to is made on the basis of the RS0 and RS1 at
execution time.
80C51 FAMILY INSTRUCTION SET
The 80C51 instruction set is optimized for 8-bit control applications.
It provides a variety of fast addressing modes for accessing the
internal RAM to facilitate byte operations on small data structures.
The instruction set provides extensive support for one-bit variables
as a separate data type, allowing direct bit manipulation in control
and logic systems that require Boolean processing.
The Parity bit reflects the number of 1s in the Accumulator: P = 1 if
the Accumulator contains an odd number of 1s, and P = 0 if the
Accumulator contains an even number of 1s. Thus the number of 1s
in the Accumulator plus P is always even. Two bits in the PSW are
uncommitted and may be used as general purpose status flags.
Program Status Word
The Program Status Word (PSW) contains several status bits that
reflect the current state of the CPU. The PSW, shown in Figure 10,
resides in the SFR space. It contains the Carry bit, the Auxiliary
Carry (for BCD operations), the two register bank select bits, the
Overflow flag, a Parity bit, and two user-definable status flags.
Addressing Modes
The addressing modes in the 80C51 instruction set are as follows:
Direct Addressing
In direct addressing the operand is specified by an 8-bit address
field in the instruction. Only internal Data RAM and SFRs can be
directly addressed.
The Carry bit, other than serving the function of a Carry bit in
arithmetic operations, also serves as the “Accumulator” for a
number of Boolean operations.
The bits RS0 and RS1 are used to select one of the four register
banks shown in Figure 7. A number of instructions refer to these
March 1995
4
Philips Semiconductors
80C51 Family
80C51 family architecture
Indirect Addressing
In indirect addressing the instruction specifies a register which
contains the address of the operand. Both internal and external
RAM can be indirectly addressed.
Arithmetic Instructions
The menu of arithmetic instructions is listed in Table 1. The table
indicates the addressing modes that can be used with each
instruction to access the <byte> operand. For example, the ADD
A,<byte> instruction can be written as:
ADD
a, 7FH (direct addressing)
ADD
A, @R0 (indirect addressing)
ADD
a, R7 (register addressing)
ADD
A, #127 (immediate constant)
The address register for 8-bit addresses can be R0 or R1 of the
selected bank, or the Stack Pointer. The address register for 16-bit
addresses can only be the 16-bit “data pointer” register, DPTR.
Register Instructions
The register banks, containing registers R0 through R7, can be
accessed by certain instructions which carry a 3-bit register
specification within the opcode of the instruction. Instructions that
access the registers this way are code efficient, since this mode
eliminates an address byte. When the instruction is executed, one of
the eight registers in the selected bank is accessed. One of four
banks is selected at execution time by the two bank select bits in the
PSW.
The execution times listed in Table 1 assume a 12MHz clock
frequency. All of the arithmetic instructions execute in 1µs except
the INC DPTR instruction, which takes 2µs, and the Multiply and
Divide instructions, which take 4µs.
Note that any byte in the internal Data Memory space can be
incremented without going through the Accumulator.
One of the INC instructions operates on the 16-bit Data Pointer. The
Data Pointer is used to generate 16-bit addresses for external
memory, so being able to increment it in one 16-bit operation is a
useful feature.
Register-Specific Instructions
Some instructions are specific to a certain register. For example,
some instructions always operate on the Accumulator, or Data
Pointer, etc., so no address byte is needed to point to it. The opcode
itself does that. Instructions that refer to the Accumulator as A
assemble as accumulator specific opcodes.
The MUL AB instruction multiplies the Accumulator by the data in
the B register and puts the 16-bit product into the concatenated B
and Accumulator registers.
Immediate Constants
The value of a constant can follow the opcode in Program Memory.
For example,
MOV A, #100
loads the Accumulator with the decimal number 100. The same
number could be specified in hex digits as 64H.
The DIV AB instruction divides the Accumulator by the data in the B
register and leaves the 8-bit quotient in the Accumulator, and the
8-bit remainder in the B register.
Oddly enough, DIV AB finds less use in arithmetic “divide” routines
than in radix conversions and programmable shift operations. An
example of the use of DIV AB in a radix conversion will be given
later. In shift operations, dividing a number by 2n shifts its n bits to
the right. Using DIV AB to perform the division completes the shift in
4µs and leaves the B register holding the bits that were shifted out.
The DA A instruction is for BCD arithmetic operations. In BCD
arithmetic, ADD and ADDC instructions should always be followed
by a DA A operation, to ensure that the result is also in BCD. Note
that DA A will not convert a binary number to BCD. The DA A
operation produces a meaningful result only as the second step in
the addition of two BCD bytes.
Indexed Addressing
Only program Memory can be accessed with indexed addressing,
and it can only be read. This addressing mode is intended for
reading look-up tables in Program Memory A 16-bit base register
(either DPTR or the Program Counter) points to the base of the
table, and the Accumulator is set up with the table entry number.
The address of the table entry in Program Memory is formed by
adding the Accumulator data to the base pointer.
Another type of indexed addressing is used in the “case jump”
instruction. In this case the destination address of a jump instruction
is computed as the sum of the base pointer and the Accumulator
data.
Table 1.
80C51 Arithmetic Instructions
MNEMONIC
OPERATION
ADDRESSING MODES
EXECUTION
DIR
IND
REG
IMM
TIME (µs)
ADD A,<byte>
A = A + <byte>
X
X
X
X
1
ADDC A,<byte>
A = A + <byte> + C
X
X
X
X
1
SUBB A,<byte>
A = A – <byte> – C
X
X
X
X
1
INC A
A=A+1
INC <byte>
<byte> = <byte> + 1
INC DPTR
DPTR = DPTR + 1
Data Pointer only
2
DEC A
A=A–1
Accumulator only
1
DEC <byte>
<byte> = <byte> – 1
MUL AB
B:A = B x A
ACC and B only
4
DIV AB
A = Int[A/B]
B = Mod[A/B]
ACC and B only
4
DA A
Decimal Adjust
Accumulator only
1
March 1995
Accumulator only
X
X
5
X
X
X
X
1
1
1
Philips Semiconductors
80C51 Family
80C51 family architecture
MOVE
DIV
SWAP
ADD
Logical Instructions
Table 2 shows the list of 80C51 logical instructions. The instructions
that perform Boolean operations (AND, OR, Exclusive OR, NOT) on
bytes perform the operation on a bit-by-bit basis. That is, if the
Accumulator contains 00110101B and byte contains 01010011B,
then:
ANL
A, <byte>
Dividing the number by 10 leaves the tens digit in the low nibble of
the Accumulator, and the ones digit in the B register. The SWAP and
ADD instructions move the tens digit to the high nibble of the
Accumulator, and the ones digit to the low nibble.
will leave the Accumulator holding 00010001B.
The addressing modes that can be used to access the <byte>
operand are listed in Table 2.
Data Transfers
Internal RAM
Table 3 shows the menu of instructions that are available for moving
data around within the internal memory spaces, and the addressing
modes that can be used with each one. With a 12MHz clock, all of
these instructions execute in either 1 or 2µs.
The ANL A, <byte> instruction may take any of the forms:
ANL
A,7FH (direct addressing)
ANL
A,@R1 (indirect addressing)
ANL
A,R6 (register addressing)
ANL
A,#53H (immediate constant)
The MOV <dest>, <src> instruction allows data to be transferred
between any two internal RAM or SFR locations without going
through the Accumulator. Remember, the Upper 128 bytes of data
RAM can be accessed only by indirect addressing, and SFR space
only by direct addressing.
All of the logical instructions that are Accumulator-specific execute
in 1µs (using a 12MHz clock). The others take 2µs.
Note that Boolean operations can be performed on any byte in the
internal Data Memory space without going through the Accumulator.
The XRL <byte>, #data instruction, for example, offers a quick and
easy way to invert port bits, as in XRL P1, #OFFH.
Note that in 80C51 devices, the stack resides in on-chip RAM, and
grows upwards. The PUSH instruction first increments the Stack
Pointer (SP), then copies the byte into the stack. PUSH and POP
use only direct addressing to identify the byte being saved or
restored, but the stack itself is accessed by indirect addressing
using the SP register. This means the stack can go into the Upper
128 bytes of RAM, if they are implemented, but not into SFR space.
If the operation is in response to an interrupt, not using the
Accumulator saves the time and effort to push it onto the stack in the
service routine.
The Rotate instructions (RL, A, RLC A, etc.) shift the Accumulator 1
bit to the left or right. For a left rotation, the MSB rolls into the LSB
position. For a right rotation, the LSB rolls into the MSB position.
The Upper 128 bytes of RAM are not implemented in the 80C51 nor
in its ROMless or EPROM counterparts. With these devices, if the
SP points to the Upper 128, PUSHed bytes are lost, and POPed
bytes are indeterminate.
The SWAP A instruction interchanges the high and low nibbles
within the Accumulator. This is a useful operation in BCD
manipulations. For example, if the Accumulator contains a binary
number which is known to be less than 100, it can be quickly
converted to BCD by the following code:
Table 2.
B,#10
AB
A
A,B
The Data Transfer instructions include a 16-bit MOV that can be
used to initialize the Data Pointer (DPTR) for look-up tables in
Program Memory, or for 16-bit external Data Memory accesses.
80C51 Logical Instructions
MNEMONIC
OPERATION
ADDRESSING MODES
EXECUTION
DIR
IND
REG
IMM
TIME (µs)
ANL A,<byte>
A = A.AND. <byte>
X
X
X
X
1
ANL <byte>,A
<byte> = <byte> .AND.A
X
ANL <byte>,#data
<byte> = <byte> .AND.#data
X
ORL A,<byte>
A = A.OR.<byte>
X
ORL <byte>,A
<byte> = <byte> .OR.A
X
ORL <byte>,#data
<byte> = <byte> .OR.#data
X
XRL A,<byte>
A = A.XOR. <byte>
X
XRL <byte>,A
<byte> = <byte> .XOR.A
X
XRL <byte>,#data
<byte> = <byte> .XOR.#data
X
CRL A
A = 00H
Accumulator only
1
CPL A
A = .NOT.A
Accumulator only
1
RL A
Rotate ACC Left 1 bit
Accumulator only
1
RLC A
Rotate Left through Carry
Accumulator only
1
RR A
Rotate ACC Right 1 bit
Accumulator only
1
RRC A
Rotate Right through Carry
Accumulator only
1
SWAP A
Swap Nibbles in A
Accumulator only
1
March 1995
6
1
2
X
X
X
1
1
2
X
X
X
1
1
2
Philips Semiconductors
80C51 Family
Table 3.
80C51 family architecture
Data Transfer Instructions that Access Internal Data Memory Space
MNEMONIC
OPERATION
ADDRESSING MODES
EXECUTION
DIR
IND
REG
IMM
TIME (µs)
MOV A,<src>
A = <src>
X
X
X
X
1
MOV <dest>,A
<dest> = A
X
X
X
MOV <dest>,<src>
<dest> = <src>
X
X
X
MOV DPTR,#data16
DPTR = 16-bit immediate constant
PUSH <src>
INC SP:MOV“@SP”,<src>
X
POP <dest>
MOV <dest>,“@SP”:DEC SP
X
XCH A,<byte>
ACC and <byte> exchange data
X
XCHD A,@Ri
ACC and @Ri exchange low nibbles
To see how XCH and XCHD can be used to facilitate data
manipulations, consider first the problem of shifting an 8-digit BCD
number two digits to the right. Figure 11 shows how this can be
done using direct MOVs, and for comparison how it can be done
using XCH instructions. To aid in understanding how the code
works, the contents of the registers that are holding the BCD
number and the content of the Accumulator are shown alongside
each instruction to indicate their status after the instruction has been
executed.
To right-shift by an odd number of digits, a one-digit shift must be
executed.
MOV
MOV
MOV
MOV
MOV
A,2EH
2EH,2DH
2DH,2CH
2CH,2BH
2BH,#0
00
00
00
00
00
12
12
12
12
00
34
34
34
12
12
56
56
34
34
34
2E
78
56
56
56
56
A
A,2BH
A,2CH
A,2DH
A2EH
MOV
MOV
78
78
78
78
78
2A
2B
2C
2D
2E
ACC
00
00
00
00
00
12
00
00
00
00
34
34
12
12
12
56
56
56
34
34
78
78
78
78
56
00
12
34
56
78
1
1
R1,#2EH
R0,#2DH
2A
2B
2C
2D
2E
ACC
00
00
12
12
34
34
56
56
78
78
XX
XX
00
00
00
00
00
00
12
12
12
12
12
12
34
34
34
34
34
34
56
58
58
58
58
58
78
78
78
67
67
67
78
76
67
67
67
67
00
00
08
12
18
01
38
23
23
45
45
45
67
67
67
45
23
01
08
00
01
01
23
23
45
45
67
67
00
08
loop for R1 = 2EH:
LOOP:
MOV
XCHD
SWAP
MOV
DEC
DEC
CJNE
A,@R1
A,@R0
A
@R1,A
R1
R0
R1,#2AH,LOOP
loop for R1 = 2DH:
loop for R1 = 2CH:
loop for R1 = 2BH:
B. Using XCHs: 9 bytes, 5 µs
CLR
XCH
SU00468
A
A,2AH
SU00469
Figure 11. Shifting a BCD Number Two Digits to the Right
March 1995
X
X
ACC
A. Using direct MOVs: 14 bytes, 9 µs
CLR
XCH
XCH
XCH
XCH
2
X
The read and write strobes to external RAM are activated only
during the execution of a MOVX instruction. Normally these signals
are inactive, and in fact if they’re not going to be used at all, their
pins are available as extra I/O lines.
First, pointers R1 and R0 are set up to point to the two bytes
containing the last four BCD digits. Then a loop is executed which
2D
2
Note that in all external Data RAM accesses, the Accumulator is
always either the destination or source of the data.
Figure 12 shows a sample of code that will right-shift a BCD number
one digit, using the XCHD instruction. Again, the contents of the
registers holding the number and of the Accumulator are shown
alongside each instruction.
2C
2
External RAM
Table 4 shows a list of the Data Transfer instructions that access
external Data Memory. Only indirect addressing can be used. The
choice is whether to use a one-byte address, @Ri, where Ri can be
either R0 or R1 of the selected register bank, or a two-byte address,
@DPTR. The disadvantage to using 16-bit addresses if only a few k
bytes of external RAM are involved is that 16-bit addresses use all 8
bits of Port 2 as address bus. On the other hand, 8-bit addresses
allow one to address a few bytes of RAM, as shown in Figure 5,
without having to sacrifice all of Port 2. All of these instructions
execute in 2 µs, with a 12MHz clock.
After the routine has been executed, the Accumulator contains the
two digits that were shifted out on the right. Doing the routine with
direct MOVs uses 14 code bytes and 9µs of execution time
(assuming a 12MHz clock). The same operation with XCHs uses
only 9 bytes and executes almost twice as fast.
2B
2
X
leaves the last byte, location 2EH, holding the last two digits of the
shifted number. The pointers are decremented, and the loop is
repeated for location 2DH. The CJNE instruction (Compare and
Jump if Not Equal) is a loop control that will be described later. The
loop executed from LOOP to CJNE for R1 = 2EH, 2DH, 2CH, and
2BH. At that point the digit that was originally shifted out on the right
has propagated to location 2AH. Since that location should be left
with 0s, the lost digit is moved to the Accumulator.
The XCH A, <byte> instruction causes the Accumulator and
addressed byte to exchange data. The XCHD A, @Ri instruction is
similar, but only the low nibbles are involved in the exchange.
2A
1
X
Figure 12. Shifting a BCD Number One Digit to the Right
7
Philips Semiconductors
80C51 Family
Table 4.
80C51 family architecture
80C51 Data Transfer Instructions that Access External Data Memory Space
ADDRESS
WIDTH
MNEMONIC
OPERATION
EXECUTION
TIME (µs)
8 bits
MOVX A,@Ri
Read external RAM @Ri
2
8 bits
MOVX @Ri,A
Write external RAM @ Ri
2
16 bits
MOVX A,@DPTR
Read external RAM @ DPTR
2
16 bits
MOVX @DPTR,A
Write external RAM @ DPTR
2
Table 5.
80C51 Lookup Table Read Instructions
MNEMONIC
OPERATION
EXECUTION TIME (µs)
MOVC A,@A+DPTR
Read program memory at (A + DPTR)
2
MOVC A,@A+PC
Read program memory at (A + PC)
2
Note how easily an internal flag can be moved to a port pin:
MOV
C,FLAG
MOV
P1.0,C
Lookup Tables
Table 5 shows the two instructions that are available for reading
lookup tables in Program Memory. Since these instructions access
only Program Memory, the lookup tables can only be read, not
updated.
In this example, FLAG is the name of any addressable bit in the
Lower 128 or SFR space. An I/O line (the LSB of Port 1, in this
case) is set or cleared depending on whether the flag bit is 1 or 0.
If the table access is to external Program Memory, then the read
strobe is PSEN.
The Carry bit in the PSW is used as the single-bit Accumulator of
the Boolean processor. Bit instructions that refer to the Carry bit as
C assemble as Carry-specific instructions (CLR C, etc.). The Carry
bit also has a direct address, since it resides in the PSW register,
which is bit-addressable.
The mnemonic is MOVC for “move constant.” The first MOVC
instruction in Table 5 can accommodate a table of up to 256 entries
numbered 0 through 255. The number of the desired entry is loaded
into the Accumulator, and the Data Pointer is set up to point to the
beginning of the table. Then:
MOVC A,@A+DPTR
Note that the Boolean instruction set includes ANL and ORL
operations, but not the XRL (Exclusive OR) operation. An XRL
operation is simple to implement in software. Suppose, for example,
it is required to form the Exclusive OR of two bits:
C = bit1 .XRL. bit2
copies the desired table entry into the Accumulator.
The other MOVC instruction works the same way, except the
Program Counter (PC) is used as the table base, and the table is
accessed through a subroutine. First the number of the desired
entry is loaded into the Accumulator, and the subroutine is called:
MOV
A,ENTRY NUMBER
CALL
TABLE
The software to do that could be as follows:
MOV
C,bit1
JNB
bit2,OVER
CPL
C
OVER: (continue)
The subroutine “TABLE” would look like this:
TABLE: MOVC A,@A+PC
RET
First, bit1 is moved to the Carry. If bit2 = 0, then C now contains the
correct result. That is, bit1 .XRL. bit2 = bit1 if bit2 = 0. On the other
hand, if bit2 = 1, C now contains the complement of the correct
result. It need only be inverted (CPL C) to complete the operation.
The table itself immediately follows the RET (return) instruction in
Program Memory. This type of table can have up to 255 entries,
numbered 1 through 255. Number 0 cannot be used, because at the
time the MOVC instruction is executed, the PC contains the address
of the RET instruction. An entry numbered 0 would be the RET
opcode itself.
This code uses the JNB instruction, one of a series of bit-test
instructions which execute a jump if the addressed bit is set (JC, JB,
JBC) or if the addressed bit is not set (JNC, JNB). In the above
case, bit2 is being tested, and if bit2 = 0, the CPL C instruction is
jumped over.
Boolean Instructions
JBC executes the jump if the addressed bit is set, and also clears
the bit. Thus a flag can be tested and cleared in one operation. All
the PSW bits are directly addressable, so the Parity bit, or the
general purpose flags, for example, are also available to the bit-test
instructions.
80C51 devices contain a complete Boolean (single-bit) processor.
The internal RAM contains 128 addressable bits, and the SFR
space can support up to 128 addressable bits as well. All of the port
lines are bit-addressable, and each one can be treated as a
separate single-bit port. The instructions that access these bits are
not just conditional branches, but a complete menu of move, set,
clear, complement, OR, and AND instructions. These kinds of bit
operations are not easily obtained in other architectures with any
amount of byte-oriented software.
Relative Offset
The destination address for these jumps is specified to the
assembler by a label or by an actual address in Program memory.
However, the destination address assembles to a relative offset
byte. This is a signed (two’s complement) offset byte which is added
to the PC in two’s complement arithmetic if the jump is executed.
The range of the jump is therefore –128 to +127 Program Memory
bytes relative to the first byte following the instruction.
The instruction set for the Boolean processor is shown in Table 6. All
bit accesses are by direct addressing.
Bit addresses 00H through 7FH are in the Lower 128, and bit
addresses 80H through FFH are in SFR space.
March 1995
8
Philips Semiconductors
80C51 Family
Table 6.
80C51 family architecture
80C51 Boolean Instructions
MNEMONIC
OPERATION
EXECUTION TIME (µs)
ANL
C,bit
C = C.AND.bit
2
ANL
C,/bit
C = C.AND..NOT.bit
2
ORL
C,bit
C = C.OR.bit
2
ORL
C,/bit
C = C.OR..NOT.bit
2
MOV
C,bit
C = bit
1
MOV
bit,C
bit = C
2
CLR
C
C=0
1
CLR
bit
bit = 0
1
SETB
C
C=1
1
SETB
bit
bit = 1
1
CPL
C
C = .NOT.C
1
CPL
bit
bit = .NOT.bit
1
JC
rel
Jump if C = 1
2
JNC
rel
Jump if C = 0
2
JB
bit,rel
Jump if bit = 1
2
JNB
bit,rel
Jump if bit = 0
2
JBC
bit,rel
Jump if bit = 1; CLR bit
2
Table 7.
Unconditional Jumps in 80C51 Devices
MNEMONIC
OPERATION
EXECUTION TIME (µs)
JMP
addr
Jump to addr
2
JMP
@A+DPTR
Jump to A + DPTR
2
CALL
addr
Call subroutine at addr
2
RET
Return from subroutine
2
RETI
Return from interrupt
2
NOP
No operation
1
In all cases the programmer specifies the destination address to the
assembler in the same way: as a label or as a 16-bit constant. The
assembler will put the destination address into the correct format for
the given instruction. If the format required by the instruction will not
support the distance to the specified destination address, a
“Destination out of range” message is written into the List file.
Jump Instructions
Table 7 shows the list of unconditional jumps with execution time for
a 12MHz clock.
The table lists a single “JMP addr” instruction, but in fact there are
three SJMP, LJMP, and AJMP, which differ in the format of the
destination address. JMP is a generic mnemonic which can be used
if the programmer does not care which way the jump is encoded.
The JMP @A+DPTR instruction supports case jumps. The
destination address is computed at execution time as the sum of the
16-bit DPTR register and the Accumulator. Typically, DPTR is set up
with the address of a jump table. In a 5-way branch, for example, an
integer 0 through 4 is loaded into the Accumulator. The code to be
executed might be as follows:
MOV
DPTR,#JUMP TABLE
MOV
A,INDEX_NUMBER
RL
A
JMP
@A+DPTR
The SJMP instruction encodes the destination address as a relative
offset, as described above. The instruction is 2 bytes long,
consisting of the opcode and the relative offset byte. The jump
distance is limited to a range of –128 to +127 bytes relative to the
instruction following the SJMP.
The LJMP instruction encodes the destination address as a 16-bit
constant. The instruction is 3 bytes long, consisting of the opcode
and two address bytes. The destination address can be anywhere in
the 64k Program Memory space.
The RL A instruction converts the index number (0 through 4) to an
even number on the range 0 through 8, because each entry in the
jump table is 2 bytes long:
JUMP TABLE:
AJMP
CASE 0
AJMP
CASE 1
AJMP
CASE 2
AJMP
CASE 3
AJMP
CASE 4
The AJMP instruction encodes the destination address as an 11-bit
constant. The instruction is 2 bytes long, consisting of the opcode,
which itself contains 3 of the 11 address bits, followed by another
byte containing the low 8 bits of the destination address. When the
instruction is executed, these 11 bits are simply substituted for the
low 11 bits in the PC. The high 5 bits stay the same. Hence the
destination has to be within the same 2k block as the instruction
following the AJMP.
March 1995
9
Philips Semiconductors
80C51 Family
80C51 family architecture
The CJNE instruction (Compare and Jump if Not Equal) can also be
used for loop control as in Figure 12. Two bytes are specified in the
operand field of the instruction. The jump is executed only if the two
bytes are not equal. In the example of Figure 12, the two bytes were
data in R1 and the constant 2AH. The initial data in R1 was 2EH.
Every time the loop was executed, R1 was decremented, and the
looping was to continue until the R1 data reached 2AH.
Table 7 shows a single “CALL addr” instruction, but there are two of
them, LCALL and ACALL, which differ in the format in which the
subroutine address is given to the CPU. CALL is a generic
mnemonic which can be used if the programmer does not care
which way the address is encoded.
The LCALL instruction uses the 16-bit address format, and the
subroutine can be anywhere in the 64k Program Memory space.
The ACALL instruction uses the 11-bit format, and the subroutine
must be in the same 2k block as the instruction following the
ACALL.
Another application of this instruction is in “greater than, less than”
comparisons. The two bytes in the operand field are taken as
unsigned integers. If the first is less than the second, then the Carry
bit is set (1). If the first is greater than or equal to the second, then
the Carry bit is cleared.
In any case, the programmer specifies the subroutine address to the
assembler in the same way: as a label or as a 16-bit constant. The
assembler will put the address into the correct format for the given
instructions.
CPU Timing
All 80C51 microcontrollers have an on-chip oscillator which can be
used if desired as the clock source for the CPU. To use the on-chip
oscillator, connect a crystal or ceramic resonator between the
XTAL1 and XTAL2 pins of the microcontroller, and capacitors to
ground as shown in Figure 13.
Subroutines should end with a RET instruction, which returns
execution to the instruction following the CALL.
RETI is used to return from an interrupt service routine. The only
difference between RET and RETI is that RETI tells the interrupt
control system that the interrupt in progress is done. If there is no
interrupt in progress at the time RETI is executed, then the RETI is
functionally identical to RET.
Examples of how to drive the clock with an external oscillator are
shown in Figure 14. Note that in the NMOS devices (8051, etc.) the
signal at the XTAL2 pin actually drives the internal clock generator.
In the CMOS devices (80C51, etc.), the signal at the XTAL1 pin
drives the internal clock generator. The internal clock generator
defines the sequence of states that make up the 80C51 machine
cycle.
Table 8 shows the list of conditional jumps available to the 80C51
user. All of these jumps specify the destination address by the
relative offset method, and so are limited to a jump distance of –128
to +127 bytes from the instruction following the conditional jump
instruction. Important to note, however, the user specifies to the
assembler the actual destination address the same way as the other
jumps: as a label or a 16-bit constant.
HMOS or
CMOS
There is no Zero bit in the PSW. The JZ and JNZ instructions test
the Accumulator data for that condition.
XTAL2
Quartz crystal
or ceramic
resonator
The DJNZ instruction (Decrement and Jump if Not Zero) is for loop
control. To execute a loop N times, load a counter byte with N and
terminate the loop with a DJNZ to the beginning of the loop, as
shown below for N = 10.
MOV
LOOP: (begin loop)
C1
C2
XTAL1
COUNTER,#10
•
•
•
VSS
SU00470
(end loop)
DJNZ
(continue)
Table 8.
Figure 13. Using the On-Chip Oscillator
COUNTER,LOOP
Conditional Jumps in 80C51 Devices
MNEMONIC
OPERATION
ADDRESSING MODES
DIR
IND
REG
EXECUTION
IMM
TIME (µs)
JZ rel
Jump if A = 0
Accumulator only
2
JNZ rel
Jump if A ≠ 0
Accumulator only
2
DJNZ <byte>,rel
Decrement and jump if not zero
X
CJNE A,<byte>,rel
Jump if A ≠ <byte>
X
CJNE <byte>,#data,rel
Jump if <byte> ≠ #data
March 1995
X
X
10
2
X
X
2
2
Philips Semiconductors
80C51 Family
80C51 family architecture
External
clock
signal
External
clock
signal
XTAL2
(NC)
XTAL2
XTAL1
XTAL1
External
clock
signal
XTAL1
VSS
VSS
XTAL2
a. NMOS or CMOS
VSS
b. NMOS Only
c. CMOS Only
SU00471
Figure 14. Using an External Clock
The fetch/execute sequences are the same whether the Program
Memory is internal or external to the chip. Execution times do not
depend on whether the Program Memory is internal or external.
Machine Cycles
A machine cycle consists of a sequence of 6 states, numbered S1
through S6. Each state time lasts for two oscillator periods. Thus a
machine cycle takes 12 oscillator periods or 1µs if the oscillator
frequency is 12MHz.
Figure 16 shows the signals and timing involved in program fetches
when the Program Memory is external. If Program Memory is
external, then the Program Memory read strobe PSEN is normally
activated twice per machine cycle, as shown in Figure 16a. If an
access to external Data Memory occurs, as shown in Figure 16b,
two PSENs are skipped, because the address and data bus are
being used for the Data Memory access.
Each state is divided into a Phase 1 half and a Phase 2 half.
Figure 15 shows that fetch/execute sequences in states and phases
for various kinds of instructions. Normally two program fetches are
generated during each machine cycle, even if the instruction being
executed doesn’t require it. If the instruction being executed doesn’t
need more code bytes, the CPU simply ignores the extra fetch, and
the Program Counter is not incremented.
Note that a Data Memory bus cycle takes twice as much time as a
Program Memory bus cycle. Figure 16 shows the relative timing of
the addresses being emitted at Ports 0 and 2, and of ALE and
PSEN. ALE is used to latch the low address byte from P0 into the
address latch.
Execution of a one-cycle instruction (Figures 15a and 15b) begins
during State 1 of the machine cycle, when the opcode is latched into
the Instruction Register. A second fetch occurs during S4 of the
same machine cycle. Execution is complete at the end of State 6 of
this machine cycle.
When the CPU is executing from internal Program Memory, PSEN is
not activated, and program addresses are not emitted. However,
ALE continues to be activated twice per machine cycle and so it is
available as a clock output signal. Note, however, that one ALE is
skipped during the execution of the MOVX instruction.
The MOVX instructions take two machine cycles to execute. No
program fetch is generated during the second cycle of a MOVX
instruction. This is the only time program fetches are skipped. The
fetch/execute sequence for MOVX instructions is shown in Figure
15d.
March 1995
11
Philips Semiconductors
80C51 Family
Osc.
(XTAL2)
80C51 family architecture
S1
S2
S3
S4
S5
S6
S1
S2
S3
S4
S5
S6
S1
P1 P2
P1 P2
P1 P2
P1 P2
P1 P2
P1 P2
P1 P2
P1 P2
P1 P2
P1 P2
P1 P2
P1 P2
P1 P2
ALE
Read next
opcode
(discard).
Read opcode.
S1
S2
S3
S4
S5
Read next opcode again.
S6
a. 1-byte, 1-cycle Instruction, e.g., INC A
S1
S2
S3
Read next opcode.
Read 2nd byte.
Read opcode.
S4
S5
S6
b. 2-byte, 1-cycle Instruction, e.g., ADD A,#data
S1
S2
S3
Read next opcode again.
Read next
opcode (discard)
Read opcode.
S4
S5
S6
S1
S2
S3
S4
S5
S6
c. 1-byte, 2-cycle Instruction, e.g., INC DPTR
Read next opcode again.
No
fetch.
Read opcode.
(MOVX)
S1
S2
S3
No fetch.
Read next
opcode (discard)
S4
S5
S6
No ALE
S1
ADDR
S2
S3
S4
S5
S6
DATA
Access external memory.
d. MOVX (1-byte, 2-cycle)
SU00472
Figure 15. State Sequence in 80C51 Family Devices
March 1995
12
Philips Semiconductors
80C51 Family
80C51 family architecture
One Machine Cycle
S1
S2
S3
S4
One Machine Cycle
S5
S6
S1
S2
S3
S4
S5
S6
ALE
PSEN
RD
P2
PCH out
P0
INST
in
PCH out
PCL
out
PCH out
INST
in
PCL
out
PCL out
Valid
PCH out
PCL
out
INST
in
PCL out
Valid
PCH out
INST
in
PCL
out
PCL out
Valid
PCH out
INST
in
PCL
out
PCL out
Valid
PCL out
Valid
a. Without a MOVX
Cycle 1
S1
S2
S3
Cycle 2
S4
S5
S6
S1
S2
S3
S4
S5
S6
ALE
PSEN
RD
P2
PCH out
P0
INST
in
PCH out
PCL
out
INST
in
PCL out
Valid
DPH out or P2 out
ADDR
out
PCH out
Data
in
ADDR out
Valid
PCL
out
PCH out
INST
in
PCL
out
PCL out
Valid
b. With a MOVX
Figure 16. Bus Cycles in 80C51 Family Devices Executing from External Program Memory
March 1995
13
SU00473
Philips Semiconductors
80C51 Family
80C51 family architecture
(MSB)
EA
X
X
ES
Symbol
Position Function
EA
IE.7
ET1
EX1
ET0
(LSB)
(MSB)
EX0
X
IE.6
Reserved.
X
Symbol
Disables all interrupts. If EA = 0, no
interrupt will be acknowledged. If EA = 1,
each interrupt source is individually
enabled or disabled by setting or clearing
its enable bit.
IE.5
Reserved.
ES
IE.4
Enables or disables the Serial Port
interrupt. If ES = 0, the Serial Port
interrupt is disabled.
ET1
IE.3
Enables or disables the Timer 1 Overflow
interrupt. If ET1 = 0, the Timer 1 interrupt
is disabled.
EX1
IE.2
Enables or disables External Interrupt 1.
If EX1 = 0, External Interrupt 1 is disabled.
ET0
IE.1
Enables or disables the Timer 0 Overflow
interrupt. If ET0 = 0, the Timer 0 interrupt
is disabled.
EX0
IE.0
Enables or disables Exeternal Interrupt 0.
If EX0 = 0, External Interrupt 0 is disabled.
(LSB)
X
PS
PT1
PX1
PT0
PX0
Position Function
IP.7
Reserved.
IP.6
Reserved.
IP.5
Reserved.
PS
IP.4
Defines the Serial Port interrupt priority
level. PS = 1 programs it to the higher
priority level.
PT1
IP.3
Defines the Timer 1 interrupt priority
level. PT1 = 1 programs it to the higher
priority level.
PX1
IP.2
Defines the External Interrupt 1 priority
level. PX1 = 1 programs it to the higher
priority level.
PT0
IP.1
Enables or disables the Timer 0 Interrupt
priority level. PT) = 1 programs it to the
higher priority level.
PX0
IP.0
Defines the External Interrupt 0 priority
level. PX0 = 1 programs it to the higher
priority level.
SU00474
SU00475
Figure 17. Interrupt Enable (IE) Register
Figure 18. Interrupt Priority (IP) Register
IE Register
IP Register
High Priority
Interrupt
0
INT0
IT0
IE0
1
Interrupt Polling
Sequence
TF0
0
INT1
IT1
IE1
1
TF1
RI
TI
Individual
Enables
Global
Disable
Low Priority
Interrupt
SU00476
Figure 19. Interrupt Control System
March 1995
14
Philips Semiconductors
80C51 Family
80C51 family architecture
noted (Figure 3), the service routine for each interrupt begins at a
fixed location.
Interrupt Structure
The 80C51 and its ROMless and EPROM versions have 5 interrupt
sources: 2 external interrupts, 2 timer interrupts, and the serial port
interrupt.
Only the Program Counter is automatically pushed onto the stack,
not the PSW or any other register. Having only the PC automatically
saved allows the programmer to decide how much time should be
spent saving other registers. This enhances the interrupt response
time, albeit at the expense of increasing the programmer’s burden of
responsibility. As a result, many interrupt functions that are typical in
control applications toggling a port pin for example, or reloading a
timer, or unloading a serial buffer can often be completed in less
time than it takes other architectures to complete.
What follows is an overview of the interrupt structure for the device.
More detailed information for specific members of the 80C51
derivative family is provided in later chapters of this user’s guide.
Interrupt Enables
Each interrupt source can be individually enabled or disabled by
setting or clearing a bit in the SFR named IE (Interrupt Enable). This
register also contains a global disable bit, which can be cleared to
disable all interrupts at once. Figure 17 shows the IE register.
Simulating a Third Priority Level in Software
Some applications require more than two priority levels that are
provided by on-chip hardware in 80C51 devices. In these cases,
relatively simple software can be written to produce the same effect
as a third priority level. First, interrupts that are to have higher
priority than 1 are assigned to priority 1 in the Interrupt Priority (IP)
register. The service routines for priority 1 interrupts that are
supposed to be interruptable by priority 2 interrupts are written to
include the following code:
Interrupt Priorities
Each interrupt source can also be individually programmed to one of
two priority levels by setting or clearing a bit in the SFR named IP
(Interrupt Priority). Figure 18 shows the IP register. A low-priority
interrupt can be interrupted by a high-priority interrupt, but not by
another low-priority interrupt. A high-priority interrupt can’t be
interrupted by any other interrupt source.
If two interrupt requests of different priority levels are received
simultaneously, the request of higher priority is serviced. If interrupt
requests of the same priority level are received simultaneously, an
internal polling sequence determines which request is serviced.
Thus within each priority level there is a second priority structure
determined by the polling sequence. Figure 19 shows how the IE
and IP registers and the polling sequence work to determine which if
any interrupt will be serviced.
PUSH IE
MOV IE,#MASK
CALL LABEL
************************
(execute service routine)
*************************
POP
IE
RET
LABEL:
RETI
In operation, all the interrupt flags are latched into the interrupt
control system during State 5 of every machine cycle. The samples
are polled during the following machine cycle. If the flag for an
enabled interrupt is found to be set (1), the interrupt system
generates an LCALL to the appropriate location in Program Memory,
unless some other condition blocks the interrupt. Several conditions
can block an interrupt, among them that an interrupt of equal or
higher priority level is already in progress.
As soon as any priority interrupt is acknowledged, the Interrupt
Enable (IE) register is redefined so as to disable all but priority 2
interrupts. Then a CALL to LABEL executes the RETI instruction,
which clears the priority 1 interrupt-in-progress flip-flop. At this point
any priority 1 interrupt that is enabled can be serviced, but only
priority 2 interrupts are enabled.
POPing IE restores the original enable byte. Then a normal RET
(rather than another RETI) is used to terminate the service routine.
The additional software adds 10µs (at 12MHz) to priority 1
interrupts.
The hardware-generated LCALL causes the contents of the
Program Counter to be pushed into the stack, and reloads the PC
with the beginning address of the service routine. As previously
March 1995
15
A13 - 80C51 FAMILY PROGRAMMER’S GUIDE
-99-
Philips Semiconductors
80C51 family programmer’s guide
and instruction set
80C51 Family
register bank contains eight 1-byte registers 0 through 7. Reset
initializes the stack pointer to location 07H, and it is incremented
once to start from location 08H, which is the first register (R0) of
the second register bank. Thus, in order to use more than one
register bank, the SP should be initialized to a different location
of the RAM where it is not used for data storage (i.e., the higher
part of the RAM).
PROGRAMMER’S GUIDE AND INSTRUCTION SET
Memory Organization
Program Memory
The 80C51 has separate address spaces for program and data
memory. The Program memory can be up to 64k bytes long. The
lower 4k can reside on-chip. Figure 1 shows a map of the 80C51
program memory.
2. Bit Addressable Area: 16 bytes have been assigned for this
segment, 20H-2FH. Each one of the 128 bits of this segment can
be directly addressed (0-7FH). The bits can be referred to in two
ways, both of which are acceptable by most assemblers. One
way is to refer to their address (i.e., 0-7FH). The other way is
with reference to bytes 20H to 2FH. Thus, bits 0-7 can also be
referred to as bits 20.0-20.7, and bits 8-FH are the same as
21.0-21.7, and so on. Each of the 16 bytes in this segment can
also be addressed as a byte.
The 80C51 can address up to 64k bytes of data memory to the chip.
The MOVX instruction is used to access the external data memory.
The 80C51 has 128 bytes of on-chip RAM, plus a number of Special
Function Registers (SFRs). The lower 128 bytes of RAM can be
accessed either by direct addressing (MOV data addr) or by indirect
addressing (MOV @Ri). Figure 2 shows the Data Memory
organization.
3. Scratch Pad Area: 30H through 7FH are available to the user as
data RAM. However, if the stack pointer has been initialized to
this area, enough bytes should be left aside to prevent SP data
destruction.
Direct and Indirect Address Area
The 128 bytes of RAM which can be accessed by both direct and
indirect addressing can be divided into three segments as listed
below and shown in Figure 3.
1. Register Banks 0-3: Locations 0 through 1FH (32 bytes). The
device after reset defaults to register bank 0. To use the other
register banks, the user must select them in software. Each
Figure 2 shows the different segments of the on-chip RAM.
FFFF
FFFF
60k
BYTES
EXTERNAL
64k
BYTES
EXTERNAL
OR
1000
AND
0FFF
4k BYTES
INTERNAL
0000
0000
SU00567
Figure 1. 80C51 Program Memory
1997 Sep 18
1
Philips Semiconductors
80C51 family programmer’s guide
and instruction set
80C51 Family
0FFF
INTERNAL
FF
64k
BYTES
EXTERNAL
SFRs
DIRECT ADDRESSING
ONLY
80
AND
7F
DRIECT AND INDIRECT
ADDRESSING
00
0000
SU00568
Figure 2. 80C51 Data Memory
8 BYTES
78
7F
70
77
68
6F
60
67
58
5F
50
57
48
4F
40
47
38
3F
30
37
... 7F
28
20
SCRATCH
PAD
AREA
2F
27
0 ...
18
3
1F
10
2
17
08
1
0F
00
0
07
BIT
ADDRESSABLE
SEGMENT
REGISTER
BANKS
SU00569
Figure 3. 128 Bytes of RAM Direct and Indirect Addressable
1997 Sep 18
2
Philips Semiconductors
80C51 family programmer’s guide
and instruction set
80C51 Family
Table 1.
SYMBOL
80C51 Special Function Registers
DESCRIPTION
DIRECT
ADDRESS
BIT ADDRESS, SYMBOL, OR ALTERNATIVE PORT FUNCTION
MSB
LSB
RESET VALUE
ACC*
Accumulator
E0H
E7
E6
E5
E4
E3
E2
E1
E0
00H
B*
B register
F0H
F7
F6
F5
F4
F3
F2
F1
F0
00H
DPTR
Data pointer (2 bytes)
DPH
Data pointer high
83H
DPL
Data pointer low
82H
00H
00H
AF
IE*
Interrupt enable
A8H
AE
AD
AC
AB
AA
A9
A8
EA
–
–
ES
ET1
EX1
ET0
EX0
BF
BE
BD
BC
BB
BA
B9
B8
–
–
PS
PT1
PX1
PT0
PX0
IP*
Interrupt priority
B8H
–
87
86
85
84
83
82
81
80
P0*
Port 0
80H
AD7
AD6
AD5
AD4
AD3
AD2
AD1
AD0
97
96
95
94
93
92
91
90
–
–
–
–
–
–
T2EX
T2
A7
A6
A5
A4
A3
A2
A1
A0
A14
A13
A12
A11
A10
A9
A8
P1*
Port 1
90H
0x000000B
xx000000B
FFH
FFH
P2*
Port 2
A0H
A15
B7
B6
B5
B4
B3
B2
B1
B0
P3*
Port 3
B0H
RD
WR
T1
T0
INT1
INT0
TxD
Rxd
FFH
PCON1
Power control
87H
SMOD
–
–
–
GF1
GF0
PD
IDL
0xxxxxxxB
D7
D6
D5
D4
D3
D2
D1
D0
PSW*
Program status word
D0H
CY
AC
F0
RS1
RS0
OV
–
P
SBUF
Serial data buffer
99H
9F
9E
9D
9C
9B
9A
99
98
SM0
SM1
SM2
REN
TB8
RB8
TI
RI
8F
8E
8D
8C
8B
8A
89
88
TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
SCON*
Serial controller
98H
SP
Stack pointer
81H
FFH
00H
xxxxxxxxB
00H
07H
TCON*
Timer control
88H
TH0
Timer high 0
8CH
00H
TH1
Timer high 1
8DH
00H
TL0
Timer low 0
8AH
00H
TL1
Timer low 1
8BH
00H
TMOD
Timer mode
89H
GATE
C/T
M1
M0
GATE
C/T
NOTES:
* Bit addressable
1. Bits GF1, GF0, PD, and IDL of the PCON register are not implemented on the NMOS 8051/8031.
1997 Sep 18
3
M1
M0
00H
Philips Semiconductors
80C51 family programmer’s guide
and instruction set
80C51 Family
8 BYTES
F8
F0
FF
F7
B
E8
E0
EF
E7
ACC
D8
D0
DF
D7
PSW
C8
CF
C0
C7
B8
IP
BF
B0
P3
B7
A8
IE
AF
A0
P2
A7
98
SCON
90
P1
88
TCON
TMOD
TL0
TL1
80
P0
SP
DPL
DPH
9F
SBUF
97
TH0
8F
TH1
PCON
87
BIT ADDRESSABLE
SU00570
Figure 4. SFR Memory Map
1997 Sep 18
4
Philips Semiconductors
80C51 family programmer’s guide
and instruction set
80C51 Family
Those SFRs that have their bits assigned for various functions are listed in this section. A brief description of each bit is
provided for quick reference. For more detailed information refer to the Architecture Chapter of this book.
PSW: PROGRAM STATUS WORD. BIT ADDRESSABLE.
CY
AC
F0
RS1
RS0
OV
–
P
CY
PSW.7
Carry Flag.
AC
PSW.6
Auxiliary Carry Flag.
F0
PSW.5
Flag 0 available to the user for general purpose.
RS1
PSW.4
Register Bank selector bit 1 (SEE NOTE 1).
RS0
PSW.3
Register Bank selector bit 0 (SEE NOTE 1).
OV
PSW.2
Overflow Flag.
–
PSW.1
Usable as a general purpose flag.
P
PSW.0
Parity flag. Set/cleared by hardware each instruction cycle to indicate an odd/even number of ‘1’ bus in
the accumulator.
NOTE:
1. The value presented by RS0 and RS1 selects the corresponding register bank.
RS1
RS0
REGISTER BANK
ADDRESS
0
0
0
00H-07H
0
1
1
08H-0FH
1
0
2
10H-17H
1
1
3
18H-1FH
PCON: POWER CONTROL REGISTER. NOT BIT ADDRESSABLE.
SMOD
–
–
–
GF1
GF0
PD
IDL
SMOD
Double baud rate bit. If Timer 1 is used to generate baud rate and SMOD = 1, the baud rate is doubled when the Serial
Port is used in modes 1, 2, or 3.
–
Not implemented, reserved for future use.*
–
Not implemented reserved for future use.*
–
Not implemented reserved for future use.*
GF1
General purpose flag bit.
GF0
General purpose flag bit.
PD
Power Down Bit. Setting this bit activates Power Down operation in the 80C51. (Available only in CMOS.)
IDL
Idle mode bit. Setting this bit activates Idle Mode operation in the 80C51. (Available only in CMOS.)
If 1s are written to PD and IDL at the same time, PD takes precedence.
*
User software should not write 1s to reserved bits. These bits may be used in future 8051 products to invoke new features.
1997 Sep 18
5
Philips Semiconductors
80C51 family programmer’s guide
and instruction set
80C51 Family
INTERRUPTS:
To use any of the interrupts in the 80C51 Family, the following three steps must be taken.
1. Set the EA (enable all) bit in the IE register to 1.
2. Set the corresponding individual interrupt enable bit in the IE register to 1.
3. Begin the interrupt service routine at the corresponding Vector Address of that interrupt. See Table below.
INTERRUPT SOURCE
VECTOR ADDRESS
IE0
0003H
TF0
000BH
IE1
0013H
TF1
001BH
RI & TI
0023H
In addition, for external interrupts, pins INT0 and INT1 (P3.2 and P3.3) must be set to 1, and depending on whether the
interrupt is to be level or transition activated, bits IT0 or IT1 in the TCON register may need to be set to 1.
ITx = 0 level activated
ITx = 1 transition activated
IE: INTERRUPT ENABLE REGISTER. BIT ADDRESSABLE.
If the bit is 0, the corresponding interrupt is disabled. If the bit is 1, the corresponding interrupt is enabled.
EA
–
–
ES
ET1
EX1
ET0
EX0
EA
IE.7
Disables all interrupts. If EA = 0, no interrupt will be acknowledged. If EA = 1, each interrupt source is
individually enabled or disabled by setting or clearing its enable bit.
—
IE.6
Not implemented, reserved for future use.*
—
IE.5
Not implemented, reserved for future use.*
ES
IE.4
Enable or disable the serial port interrupt.
ET1
IE.3
Enable or disable the Timer 1 overflow interrupt.
EX1
IE.2
Enable or disable External Interrupt 1.
ET0
IE.1
Enable or disable the Timer 0 overflow interrupt.
EX0
IE.0
Enable or disable External Interrupt 0.
*
User software should not write 1s to reserved bits. These bits may be used in future 80C51 products to invoke new features.
1997 Sep 18
6
Philips Semiconductors
80C51 family programmer’s guide
and instruction set
80C51 Family
ASSIGNING HIGHER PRIORITY TO ONE OR MORE INTERRUPTS:
In order to assign higher priority to an interrupt the corresponding bit in the IP register must be set to 1.
Remember that while an interrupt service is in progress, it cannot be interrupted by a lower or same level interrupt.
PRIORITY WITHIN LEVEL:
Priority within level is only to resolve simultaneous requests of the same priority level.
From high to low, interrupt sources are listed below:
IE0
TF0
IE1
TF1
RI or TI
IP: INTERRUPT PRIORITY REGISTER. BIT ADDRESSABLE.
If the bit is 0, the corresponding interrupt has a lower priority and if the bit is 1 the corresponding interrupt has a higher priority.
–
–
–
PS
PT1
PX1
PT0
–
IP.7
Not implemented, reserved for future use.*
–
IP.6
Not implemented, reserved for future use.*
–
IP.5
Not implemented, reserved for future use.*
PS
IP.4
Defines the Serial Port interrupt priority level.
PT1
IP.3
Defines the Timer 1 interrupt priority level.
PX1
IP.2
Defines External Interrupt 1 priority level.
PT0
IP.1
Defines the Timer 0 interrupt priority level.
PX0
IP.0
Defines the External Interrupt 0 priority level.
*
PX0
User software should not write 1s to reserved bits. These bits may be used in future 80C51 products to invoke new features.
1997 Sep 18
7
Philips Semiconductors
80C51 family programmer’s guide
and instruction set
80C51 Family
TCON: TIMER/COUNTER CONTROL REGISTER. BIT ADDRESSABLE.
TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
TF1
TCON.7
Timer 1 overflow flag. Set by hardware when the Timer/Counter 1 overflows. Cleared by hardware as
processor vectors to the interrupt service routine.
TR1
TCON.6
Timer 1 run control bit. Set/cleared by software to turn Timer/Counter 1 ON/OFF.
TF0
TCON.5
Timer 0 overflow flag. Set by hardware when the Timer/Counter 0 overflows. Cleared by hardware as
processor vectors to the service routine.
TR0
TCON.4
Timer 0 run control bit. Set/cleared by software to turn Timer/Counter 0 ON/OFF.
IE1
TCON.3
External Interrupt 1 edge flag. Set by hardware when External Interrupt edge is detected. Cleared by
hardware when interrupt is processed.
IT1
TCON.2
Interrupt 1 type control bit. Set/cleared by software to specify falling edge/low level triggered External
Interrupt.
IE0
TCON.1
External Interrupt 0 edge flag. Set by hardware when External Interrupt edge detected. Cleared by
hardware when interrupt is processed.
IT0
TCON.0
Interrupt 0 type control bit. Set/cleared by software to specify falling edge/low level triggered External
Interrupt.
TMOD: TIMER/COUNTER MODE CONTROL REGISTER. NOT BIT ADDRESSABLE.
GATE
C/T
M1
M0
GATE
C/T
Timer 1
M1
M0
Timer 0
GATE
When TRx (in TCON) is set and GATE = 1, TIMER/COUNTERx will run only while INTx pin is high (hardware control).
When GATE = 0, TIMER/COUNTERx will run only while TRx = 1 (software control).
C/T
Timer or Counter selector. Cleared for Timer operation (input from internal system clock). Set for Counter operation
(input from Tx input pin).
M1
Mode selector bit. (NOTE 1)
M0
Mode selector bit. (NOTE 1)
NOTE 1:
M1
M0
Operating Mode
0
0
0
13-bit Timer (8048 compatible)
0
1
1
16-bit Timer/Counter
1
0
2
8-bit Auto-Reload Timer/Counter
1
1
3
(Timer 0) TL0 is an 8-bit Timer/Counter controlled by the standart Timer 0
control bits. TH0 is an8-bit Timer and is controlled by Timer 1 control bits.
1
1
3
(Timer 1) Timer/Counter 1 stopped.
1997 Sep 18
8
Philips Semiconductors
80C51 family programmer’s guide
and instruction set
80C51 Family
TIMER SET-UP
Tables 2 through 5 give some values for TMOD which can be used to set up Timer 0 in different modes.
It is assumed that only one timer is being used at a time. If it is desired to run Timers 0 and 1 simultaneously, in any mode, the
value in TMOD for Timer 0 must be ORed with the value shown for Timer 1 (Tables 5 and 6).
For example, if it is desired to run Timer 0 in mode 1 GATE (external control), and Timer 1 in mode 2 COUNTER, then the value
that must be loaded into TMOD is 69H (09H from Table 2 ORed with 60H from Table 5).
Moreover, it is assumed that the user, at this point, is not ready to turn the timers on and will do that at a different point in the
program by setting bit TRx (in TCON) to 1.
TIMER/COUNTER 0
Table 2.
As a Timer:
TMOD
MODE
TIMER 0
FUNCTION
INTERNAL
CONTROL
(NOTE 1)
EXTERNAL
CONTROL
(NOTE 2)
0
13-bit Timer
00H
08H
1
16-bit Timer
01H
09H
2
8-bit Auto-Reload
02H
0AH
3
Two 8-bit Timers
03H
0BH
Table 3.
As a Counter:
TMOD
MODE
COUNTER 0
FUNCTION
INTERNAL
CONTROL
(NOTE 1)
EXTERNAL
CONTROL
(NOTE 2)
0
13-bit Timer
04H
0CH
1
16-bit Timer
05H
0DH
2
8-bit Auto-Reload
06H
0EH
3
One 8-bit Counter
07H
0FH
NOTES:
1. The timer is turned ON/OFF by setting/clearing bit TR0 in the software.
2. The Timer is turned ON/OFF by the 1-to-0 transition on INT0 (P3.2) when TR0 = 1 (hardware control).
1997 Sep 18
9
Philips Semiconductors
80C51 family programmer’s guide
and instruction set
80C51 Family
TIMER/COUNTER 1
Table 4.
As a Timer:
TMOD
MODE
TIMER 1
FUNCTION
INTERNAL
CONTROL
(NOTE 1)
EXTERNAL
CONTROL
(NOTE 2)
0
13-bit Timer
00H
80H
1
16-bit Timer
10H
90H
2
8-bit Auto-Reload
20H
A0H
3
Does not run
30H
B0H
Table 5.
As a Counter:
TMOD
MODE
COUNTER 1
FUNCTION
INTERNAL
CONTROL
(NOTE 1)
EXTERNAL
CONTROL
(NOTE 2)
0
13-bit Timer
40H
C0H
1
16-bit Timer
50H
D0H
2
8-bit Auto-Reload
60H
E0H
3
Not available
–
–
NOTES:
1. The timer is turned ON/OFF by setting/clearing bit TR1 in the software.
2. The Timer is turned ON/OFF by the 1-to-0 transition on INT1 (P3.2) when TR1 = 1 (hardware control).
1997 Sep 18
10
Philips Semiconductors
80C51 family programmer’s guide
and instruction set
80C51 Family
SCON: SERIAL PORT CONTROL REGISTER. BIT ADDRESSABLE.
SM0
SM1
SM2
REN
TB8
RB8
TI
RI
SM0
SCON.7
Serial Port mode specifier. (NOTE 1)
SM1
SCON.6
Serial Port mode specifier. (NOTE 1)
SM2
SCON.5
Enables the multiprocessor communication feature in modes 2 & 3. In mode 2 or 3, if SM2 is set to 1 then
RI will not be activated if the received 9th data bit (RB8) is 0. In mode 1, if SM2 = 1 then RI will not be
activated if a valid stop bit was not received. In mode 0, SM2 should be 0. (See Table 6.)
REN
SCON.4
Set/Cleared by software to Enable/Disable reception.
TB8
SCON.3
The 9th bit that will be transmitted in modes 2 & 3. Set/Cleared by software.
RB8
SCON.2
In modes 2 & 3, is the 9th data bit that was received. In mode 1, if SM2 = 0, RB8 is the stop bit that was
received. In mode 0, RB8 is not used.
TI
SCON.1
Transmit interrupt flag. Set by hardware at the end of the 8th bit time in mode 0, or at the beginning of the
stop bit in the other modes. Must be cleared by software.
RI
SCON.0
Receive interrupt flag. Set by hardware at the end of the 8th bit time in mode 0, or halfway through the
stop bit time in the other modes (except see SM2). Must be cleared by software.
NOTE 1:
SM0
0
0
1
1
SM1
0
1
0
1
Mode
0
1
2
3
Description
Shift Register
8-bit UART
9-bit UART
9-bit UART
Baud Rate
FOSC./12
Variable
FOSC./64 or FOSC./32
Variable
SERIAL PORT SET-UP:
Table 6.
MODE
SCON
SM2 VARIATION
0
1
2
3
10H
50H
90H
D0H
Single Processor
Environment
(SM2 = 0)
0
1
2
3
NA
70H
B0H
F0H
Multiprocessor
Environment
(SM2 = 1)
GENERATING BAUD RATES
Serial Port in Mode 0:
Mode 0 has a fixed baud rate which is 1/12 of the oscillator frequency. To run the serial port in this mode none of the
Timer/Counters need to be set up. Only the SCON register needs to be defined.
Osc Freq
Baud Rate 12
Serial Port in Mode 1:
Mode 1 has a variable baud rate. The baud rate is generated by Timer 1.
1997 Sep 18
11
Philips Semiconductors
80C51 family programmer’s guide
and instruction set
80C51 Family
USING TIMER/COUNTER 1 TO GENERATE BAUD RATES:
For this purpose, Timer 1 is used in mode 2 (Auto-Reload). Refer to Timer Setup section of this chapter.
K Osc Freq
Baud Rate +
32 12 [256 * (TH1)]
If SMOD = 0, then K = 1.
If SMOD = 1, then K = 2 (SMOD is in the PCON register).
Most of the time the user knows the baud rate and needs to know the reload value for TH1.
K Osc Freq
TH1 + 256 *
384 baud rate
TH1 must be an integer value. Rounding off TH1 to the nearest integer may not produce the desired baud rate. In this case, the
user may have to choose another crystal frequency.
Since the PCON register is not bit addressable, one way to set the bit is logical ORing the PCON register (i.e., ORL
PCON,#80H). The address of PCON is 87H.
SERIAL PORT IN MODE 2:
The baud rate is fixed in this mode and is 1/32 or 1/64 of the oscillator frequency, depending on the value of the SMOD bit in
the PCON register.
In this mode none of the Timers are used and the clock comes from the internal phase 2 clock.
SMOD = 1, Baud Rate = 1/32 Osc Freq.
SMOD = 0, Baud Rate = 1/64 Osc Freq.
To set the SMOD bit: ORL
PCON,#80H. The address of PCON is 87H.
SERIAL PORT IN MODE 3:
The baud rate in mode 3 is variable and sets up exactly the same as in mode 1.
1997 Sep 18
12
A14 - NOTICE TECHNIQUE DU 8255
-100-
82C55A
CHMOS PROGRAMMABLE PERIPHERAL INTERFACE
Y
Compatible with all Intel and Most
Other Microprocessors
Y
High Speed, ‘‘Zero Wait State’’
Operation with 8 MHz 8086/88 and
80186/188
Y
24 Programmable I/O Pins
Y
Low Power CHMOS
Y
Completely TTL Compatible
Y
Control Word Read-Back Capability
Y
Direct Bit Set/Reset Capability
Y
2.5 mA DC Drive Capability on all I/O
Port Outputs
Y
Available in 40-Pin DIP and 44-Pin PLCC
Y
Available in EXPRESS
Ð Standard Temperature Range
Ð Extended Temperature Range
The Intel 82C55A is a high-performance, CHMOS version of the industry standard 8255A general purpose
programmable I/O device which is designed for use with all Intel and most other microprocessors. It provides
24 I/O pins which may be individually programmed in 2 groups of 12 and used in 3 major modes of operation.
The 82C55A is pin compatible with the NMOS 8255A and 8255A-5.
In MODE 0, each group of 12 I/O pins may be programmed in sets of 4 and 8 to be inputs or outputs. In
MODE 1, each group may be programmed to have 8 lines of input or output. 3 of the remaining 4 pins are used
for handshaking and interrupt control signals. MODE 2 is a strobed bi-directional bus configuration.
The 82C55A is fabricated on Intel’s advanced CHMOS III technology which provides low power consumption
with performance equal to or greater than the equivalent NMOS product. The 82C55A is available in 40-pin
DIP and 44-pin plastic leaded chip carrier (PLCC) packages.
231256 – 31
231256 – 1
Figure 1. 82C55A Block Diagram
231256 – 2
Figure 2. 82C55A Pinout
Diagrams are for pin reference only. Package
sizes are not to scale.
October 1995
Order Number: 231256-004
82C55A
Table 1. Pin Description
Symbol
PA3–0
Pin Number
Dip
PLCC
Type
Name and Function
1–4
2–5
I/O
PORT A, PINS 0 – 3: Lower nibble of an 8-bit data output latch/
buffer and an 8-bit data input latch.
RD
5
6
I
READ CONTROL: This input is low during CPU read operations.
CS
6
7
I
CHIP SELECT: A low on this input enables the 82C55A to
respond to RD and WR signals. RD and WR are ignored
otherwise.
GND
7
8
A1–0
8–9
9–10
System Ground
I
ADDRESS: These input signals, in conjunction RD and WR,
control the selection of one of the three ports or the control
word registers.
A1
A0
RD
WR
CS
Input Operation (Read)
0
0
0
1
0
Port A - Data Bus
0
1
0
1
0
Port B - Data Bus
1
0
0
1
0
Port C - Data Bus
1
1
0
1
0
Control Word - Data Bus
0
0
1
0
0
0
1
1
0
0
Data Bus - Port B
1
0
1
0
0
Data Bus - Port C
1
1
1
0
0
Data Bus - Control
X
X
X
X
1
Data Bus - 3 - State
X
X
1
1
0
Data Bus - 3 - State
Output Operation (Write)
Data Bus - Port A
Disable Function
PC7–4
10–13
11,13–15
I/O
PORT C, PINS 4 – 7: Upper nibble of an 8-bit data output latch/
buffer and an 8-bit data input buffer (no latch for input). This port
can be divided into two 4-bit ports under the mode control. Each
4-bit port contains a 4-bit latch and it can be used for the control
signal outputs and status signal inputs in conjunction with ports
A and B.
PC0–3
PB0-7
14–17
16–19
I/O
PORT C, PINS 0 – 3: Lower nibble of Port C.
18–25
20–22,
24–28
I/O
PORT B, PINS 0 – 7: An 8-bit data output latch/buffer and an 8bit data input buffer.
VCC
26
29
D7–0
27–34
30–33,
35–38
I/O
RESET
35
39
I
RESET: A high on this input clears the control register and all
ports are set to the input mode.
WR
36
40
I
WRITE CONTROL: This input is low during CPU write
operations.
37–40
41–44
I/O
PA7–4
NC
2
1, 12,
23, 34
SYSTEM POWER: a 5V Power Supply.
DATA BUS: Bi-directional, tri-state data bus lines, connected to
system data bus.
PORT A, PINS 4 – 7: Upper nibble of an 8-bit data output latch/
buffer and an 8-bit data input latch.
No Connect
82C55A
82C55A FUNCTIONAL DESCRIPTION
General
The 82C55A is a programmable peripheral interface
device designed for use in Intel microcomputer systems. Its function is that of a general purpose I/O
component to interface peripheral equipment to the
microcomputer system bus. The functional configuration of the 82C55A is programmed by the system
software so that normally no external logic is necessary to interface peripheral devices or structures.
Data Bus Buffer
This 3-state bidirectional 8-bit buffer is used to interface the 82C55A to the system data bus. Data is
transmitted or received by the buffer upon execution
of input or output instructions by the CPU. Control
words and status information are also transferred
through the data bus buffer.
Read/Write and Control Logic
The function of this block is to manage all of the
internal and external transfers of both Data and
Control or Status words. It accepts inputs from the
CPU Address and Control busses and in turn, issues
commands to both of the Control Groups.
Group A and Group B Controls
The functional configuration of each port is programmed by the systems software. In essence, the
CPU ‘‘outputs’’ a control word to the 82C55A. The
control word contains information such as ‘‘mode’’,
‘‘bit set’’, ‘‘bit reset’’, etc., that initializes the functional configuration of the 82C55A.
Each of the Control blocks (Group A and Group B)
accepts ‘‘commands’’ from the Read/Write Control
Logic, receives ‘‘control words’’ from the internal
data bus and issues the proper commands to its associated ports.
Control Group A - Port A and Port C upper (C7 – C4)
Control Group B - Port B and Port C lower (C3 – C0)
The control word register can be both written and
read as shown in the address decode table in the
pin descriptions. Figure 6 shows the control word
format for both Read and Write operations. When
the control word is read, bit D7 will always be a logic
‘‘1’’, as this implies control word mode information.
Ports A, B, and C
The 82C55A contains three 8-bit ports (A, B, and C).
All can be configured in a wide variety of functional
characteristics by the system software but each has
its own special features or ‘‘personality’’ to further
enhance the power and flexibility of the 82C55A.
Port A. One 8-bit data output latch/buffer and one
8-bit input latch buffer. Both ‘‘pull-up’’ and ‘‘pulldown’’ bus hold devices are present on Port A.
Port B. One 8-bit data input/output latch/buffer.
Only ‘‘pull-up’’ bus hold devices are present on Port
B.
Port C. One 8-bit data output latch/buffer and one
8-bit data input buffer (no latch for input). This port
can be divided into two 4-bit ports under the mode
control. Each 4-bit port contains a 4-bit latch and it
can be used for the control signal outputs and status
signal inputs in conjunction with ports A and B. Only
‘‘pull-up’’ bus hold devices are present on Port C.
See Figure 4 for the bus-hold circuit configuration for
Port A, B, and C.
3
82C55A
231256 – 3
Figure 3. 82C55A Block Diagram Showing Data Bus Buffer and Read/Write Control Logic Functions
*NOTE:
231256 – 4
Port pins loaded with more than 20 pF capacitance may not have their logic level guaranteed following a hardware reset.
Figure 4. Port A, B, C, Bus-hold Configuration
4
82C55A
82C55A OPERATIONAL DESCRIPTION
Mode Selection
There are three basic modes of operation that can
be selected by the system software:
Mode 0 Ð Basic input/output
Mode 1 Ð Strobed Input/output
Mode 2 Ð Bi-directional Bus
When the reset input goes ‘‘high’’ all ports will be set
to the input mode with all 24 port lines held at a logic
‘‘one’’ level by the internal bus hold devices (see
Figure 4 Note). After the reset is removed the
82C55A can remain in the input mode with no additional initialization required. This eliminates the need
for pullup or pulldown devices in ‘‘all CMOS’’ designs. During the execution of the system program,
any of the other modes may be selected by using a
single output instruction. This allows a single
82C55A to service a variety of peripheral devices
with a simple software maintenance routine.
The modes for Port A and Port B can be separately
defined, while Port C is divided into two portions as
required by the Port A and Port B definitions. All of
the output registers, including the status flip-flops,
will be reset whenever the mode is changed. Modes
may be combined so that their functional definition
can be ‘‘tailored’’ to almost any I/O structure. For
instance; Group B can be programmed in Mode 0 to
monitor simple switch closings or display computational results, Group A could be programmed in
Mode 1 to monitor a keyboard or tape reader on an
interrupt-driven basis.
231256 – 6
Figure 6. Mode Definition Format
The mode definitions and possible mode combinations may seem confusing at first but after a cursory
review of the complete device operation a simple,
logical I/O approach will surface. The design of the
82C55A has taken into account things such as efficient PC board layout, control signal definition vs PC
layout and complete functional flexibility to support
almost any peripheral device with no external logic.
Such design represents the maximum use of the
available pins.
Single Bit Set/Reset Feature
Any of the eight bits of Port C can be Set or Reset
using a single OUTput instruction. This feature reduces software requirements in Control-based applications.
231256 – 5
Figure 5. Basic Mode Definitions and Bus
Interface
When Port C is being used as status/control for Port
A or B, these bits can be set or reset by using the Bit
Set/Reset operation just as if they were data output
ports.
5
82C55A
Interrupt Control Functions
When the 82C55A is programmed to operate in
mode 1 or mode 2, control signals are provided that
can be used as interrupt request inputs to the CPU.
The interrupt request signals, generated from port C,
can be inhibited or enabled by setting or resetting
the associated INTE flip-flop, using the bit set/reset
function of port C.
This function allows the Programmer to disallow or
allow a specific I/O device to interrupt the CPU without affecting any other device in the interrupt structure.
INTE flip-flop definition:
231256 – 7
Figure 7. Bit Set/Reset Format
(BIT-SET)ÐINTE is SETÐInterrupt enable
(BIT-RESET)ÐINTE is RESETÐInterrupt disable
Note:
All Mask flip-flops are automatically reset during
mode selection and device Reset.
6
82C55A
Operating Modes
Mode 0 (Basic Input/Output). This functional configuration provides simple input and output operations for each of the three ports. No ‘‘handshaking’’
is required, data is simply written to or read from a
specified port.
Mode 0 Basic Functional Definitions:
# Two 8-bit ports and two 4-bit ports.
#
#
#
#
Any port can be input or output.
Outputs are latched.
Inputs are not latched.
16 different Input/Output configurations are possible in this Mode.
MODE 0 (BASIC INPUT)
231256 – 8
MODE 0 (BASIC OUTPUT)
231256 – 9
7
82C55A
MODE 0 Port Definition
A
B
GROUP A
D4
D3
D1
D0
PORT A
0
0
0
0
OUTPUT
PORT C
(UPPER)
OUTPUT
0
0
0
1
OUTPUT
OUTPUT
0
0
1
0
OUTPUT
0
0
0
1
1
0
1
0
0
1
0
0
0
1
1
1
1
1
1
0
0
1
1
1
1
1
1
GROUP B
Ý
PORT B
0
OUTPUT
PORT C
(LOWER)
OUTPUT
1
OUTPUT
INPUT
OUTPUT
2
INPUT
OUTPUT
OUTPUT
OUTPUT
OUTPUT
INPUT
3
4
INPUT
OUTPUT
INPUT
OUTPUT
1
OUTPUT
INPUT
5
OUTPUT
INPUT
0
1
OUTPUT
OUTPUT
INPUT
INPUT
6
7
INPUT
INPUT
OUTPUT
INPUT
0
0
0
1
INPUT
INPUT
OUTPUT
OUTPUT
8
9
OUTPUT
OUTPUT
OUTPUT
INPUT
0
0
1
1
1
1
0
0
0
1
0
1
INPUT
INPUT
INPUT
INPUT
OUTPUT
OUTPUT
INPUT
INPUT
10
11
12
13
INPUT
INPUT
OUTPUT
OUTPUT
OUTPUT
INPUT
OUTPUT
INPUT
1
1
1
1
0
1
INPUT
INPUT
INPUT
INPUT
14
15
INPUT
INPUT
OUTPUT
INPUT
MODE 0 Configurations
231256 – 10
8
82C55A
MODE 0 Configurations (Continued)
231256 – 11
9
82C55A
MODE 0 Configurations (Continued)
231256 – 12
Operating Modes
MODE 1 (Strobed Input/Output). This functional
configuration provides a means for transferring I/O
data to or from a specified port in conjunction with
strobes or ‘‘handshaking’’ signals. In mode 1, Port A
and Port B use the lines on Port C to generate or
accept these ‘‘handshaking’’ signals.
Mode 1 Basic functional Definitions:
# Two Groups (Group A and Group B).
# Each group contains one 8-bit data port and one
4-bit control/data port.
# The 8-bit data port can be either input or output
Both inputs and outputs are latched.
# The 4-bit port is used for control and status of the
8-bit data port.
10
82C55A
Input Control Signal Definition
STB (Strobe Input). A ‘‘low’’ on this input loads
data into the input latch.
IBF (Input Buffer Full F/F)
A ‘‘high’’ on this output indicates that the data has
been loaded into the input latch; in essence, an acknowledgement. IBF is set by STB input being low
and is reset by the rising edge of the RD input.
INTR (Interrupt Request)
A ‘‘high’’ on this output can be used to interrupt the
CPU when an input device is requesting service.
INTR is set by the STB is a ‘‘one’’, IBF is a ‘‘one’’
and INTE is a ‘‘one’’. It is reset by the falling edge of
RD. This procedure allows an input device to request service from the CPU by simply strobing its
data into the port.
INTE A
Controlled by bit set/reset of PC4.
INTE B
231256 – 13
Controlled by bit set/reset of PC2.
Figure 8. MODE 1 Input
231256 – 14
Figure 9. MODE 1 (Strobed Input)
11
82C55A
Output Control Signal Definition
OBF (Output Buffer Full F/F). The OBF output will
go ‘‘low’’ to indicate that the CPU has written data
out to the specified port. The OBF F/F will be set by
the rising edge of the WR input and reset by ACK
Input being low.
ACK (Acknowledge Input). A ‘‘low’’ on this input
informs the 82C55A that the data from Port A or Port
B has been accepted. In essence, a response from
the peripheral device indicating that it has received
the data output by the CPU.
INTR (Interrupt Request). A ‘‘high’’ on this output
can be used to interrupt the CPU when an output
device has accepted data transmitted by the CPU.
INTR is set when ACK is a ‘‘one’’, OBF is a ‘‘one’’
and INTE is a ‘‘one’’. It is reset by the falling edge of
WR.
INTE A
Controlled by bit set/reset of PC6.
INTE B
Controlled by bit set/reset of PC2.
231256 – 15
Figure 10. MODE 1 Output
231256 – 16
Figure 11. MODE 1 (Strobed Output)
12
82C55A
Combinations of MODE 1
Port A and Port B can be individually defined as input or output in Mode 1 to support a wide variety of strobed
I/O applications.
231256 – 17
Figure 12. Combinations of MODE 1
Operating Modes
Output Operations
MODE 2 (Strobed Bidirectional Bus I/O).This
functional configuration provides a means for communicating with a peripheral device or structure on a
single 8-bit bus for both transmitting and receiving
data (bidirectional bus I/O). ‘‘Handshaking’’ signals
are provided to maintain proper bus flow discipline in
a similar manner to MODE 1. Interrupt generation
and enable/disable functions are also available.
OBF (Output Buffer Full). The OBF output will go
‘‘low’’ to indicate that the CPU has written data out
to port A.
MODE 2 Basic Functional Definitions:
INTE 1 (The INTE Flip-Flop Associated with
OBF). Controlled by bit set/reset of PC6.
# Used in Group A only.
# One 8-bit, bi-directional bus port (Port A) and a 5bit control port (Port C).
# Both inputs and outputs are latched.
# The 5-bit control port (Port C) is used for control
and status for the 8-bit, bi-directional bus port
(Port A).
Bidirectional Bus I/O Control Signal Definition
INTR (Interrupt Request). A high on this output can
be used to interrupt the CPU for input or output operations.
ACK (Acknowledge). A ‘‘low’’ on this input enables
the tri-state output buffer of Port A to send out the
data. Otherwise, the output buffer will be in the high
impedance state.
Input Operations
STB (Strobe Input). A ‘‘low’’ on this input loads
data into the input latch.
IBF (Input Buffer Full F/F). A ‘‘high’’ on this output
indicates that data has been loaded into the input
latch.
INTE 2 (The INTE Flip-Flop Associated with IBF).
Controlled by bit set/reset of PC4.
13
82C55A
231256 – 18
Figure 13. MODE Control Word
231256 – 19
Figure 14. MODE 2
231256 – 20
Figure 15. MODE 2 (Bidirectional)
NOTE:
Any sequence where WR occurs before ACK, and STB occurs before RD is permissible.
(INTR e IBF # MASK # STB # RD a OBF # MASK # ACK # WR)
14
82C55A
231256 – 21
Figure 16. MODE (/4 Combinations
15
82C55A
Mode Definition Summary
MODE 0
MODE 1
OUT
IN
OUT
GROUP A ONLY
PA0
PA1
PA2
PA3
PA4
PA5
PA6
PA7
IN
IN
IN
IN
IN
IN
IN
IN
OUT
OUT
OUT
OUT
OUT
OUT
OUT
OUT
IN
IN
IN
IN
IN
IN
IN
IN
OUT
OUT
OUT
OUT
OUT
OUT
OUT
OUT
Ý
Ý
Ý
Ý
Ý
Ý
Ý
Ý
PB0
PB1
PB2
PB3
PB4
PB5
PB6
PB7
IN
IN
IN
IN
IN
IN
IN
IN
OUT
OUT
OUT
OUT
OUT
OUT
OUT
OUT
IN
IN
IN
IN
IN
IN
IN
IN
OUT
OUT
OUT
OUT
OUT
OUT
OUT
OUT
Ð
Ð
Ð
Ð
Ð
Ð
Ð
Ð
PC0
PC1
PC2
PC3
PC4
PC5
PC6
PC7
IN
IN
IN
IN
IN
IN
IN
IN
OUT
OUT
OUT
OUT
OUT
OUT
OUT
OUT
INTRB INTRB
IBFB OBFB
STBB ACKB
INTRA INTRA
STBA
I/O
IBFA
I/O
I/O
ACKA
I/O
OBFA
Special Mode Combination Considerations
There are several combinations of modes possible.
For any combination, some or all of the Port C lines
are used for control or status. The remaining bits are
either inputs or outputs as defined by a ‘‘Set Mode’’
command.
During a read of Port C, the state of all the Port C
lines, except the ACK and STB lines, will be placed
on the data bus. In place of the ACK and STB line
states, flag status will appear on the data bus in the
PC2, PC4, and PC6 bit positions as illustrated by
Figure 18.
Through a ‘‘Write Port C’’ command, only the Port C
pins programmed as outputs in a Mode 0 group can
be written. No other pins can be affected by a ‘‘Write
Port C’’ command, nor can the interrupt enable flags
be accessed. To write to any Port C output programmed as an output in a Mode 1 group or to
16
MODE 2
IN
MODE 0
OR MODE 1
ONLY
I/O
I/O
I/O
INTRA
STBA
IBFA
ACKA
OBFA
change an interrupt enable flag, the ‘‘Set/Reset Port
C Bit’’ command must be used.
With a ‘‘Set/Reset Port C Bit’’ command, any Port C
line programmed as an output (including INTR, IBF
and OBF) can be written, or an interrupt enable flag
can be either set or reset. Port C lines programmed
as inputs, including ACK and STB lines, associated
with Port C are not affected by a ‘‘Set/Reset Port C
Bit’’ command. Writing to the corresponding Port C
bit positions of the ACK and STB lines with the
‘‘Set/Reset Port C Bit’’ command will affect the
Group A and Group B interrupt enable flags, as illustrated in Figure 18.
Current Drive Capability
Any output on Port A, B or C can sink or source 2.5
mA. This feature allows the 82C55A to directly drive
Darlington type drivers and high-voltage displays
that require such sink or source current.
82C55A
INPUT CONFIGURATION
D5
D4
D3
D2
D1
Reading Port C Status
D6
D7
In Mode 0, Port C transfers data to or from the peripheral device. When the 82C55A is programmed to
function in Modes 1 or 2, Port C generates or accepts ‘‘hand-shaking’’ signals with the peripheral device. Reading the contents of Port C allows the programmer to test or verify the ‘‘status’’ of each peripheral device and change the program flow accordingly.
There is no special instruction to read the status information from Port C. A normal read operation of
Port C is executed to perform this function.
D0
I/O I/O IBFA INTEA INTRA INTEB IBFB INTRB
GROUP A
D7
D6
GROUP B
OUTPUT CONFIGURATIONS
D5 D4
D3
D2
D1
D0
OBFA INTEA I/O I/O INTRA INTEB OBFB INTRB
GROUP A
GROUP B
Figure 17a. MODE 1 Status Word Format
D7
D6
D5
D4
D3
D2
D1
D0
OBFA INTE1 IBFA INTE2 INTRA
GROUP A
GROUP B
(Defined By Mode 0 or Mode 1 Selection)
Figure 17b. MODE 2 Status Word Format
Interrupt Enable Flag
INTE B
INTE A2
INTE A1
Position
Alternate Port C Pin Signal (Mode)
PC2
PC4
PC6
ACKB (Output Mode 1) or STBB (Input Mode 1)
STBA (Input Mode 1 or Mode 2)
ACKA (Output Mode 1 or Mode 2
Figure 18. Interrupt Enable Flags in Modes 1 and 2
17
82C55A
ABSOLUTE MAXIMUM RATINGS*
NOTICE: This is a production data sheet. The specifications are subject to change without notice.
Ambient Temperature Under BiasÀÀÀÀ0§ C to a 70§ C
Storage Temperature ÀÀÀÀÀÀÀÀÀ b 65§ C to a 150§ C
Supply Voltage ÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀ b 0.5 to a 8.0V
Operating Voltage ÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀ a 4V to a 7V
Voltage on any InputÀÀÀÀÀÀÀÀÀÀGND b 2V to a 6.5V
Voltage on any Output ÀÀGND b 0.5V to VCC a 0.5V
Power Dissipation ÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀ1 Watt
*WARNING: Stressing the device beyond the ‘‘Absolute
Maximum Ratings’’ may cause permanent damage.
These are stress ratings only. Operation beyond the
‘‘Operating Conditions’’ is not recommended and extended exposure beyond the ‘‘Operating Conditions’’
may affect device reliability.
D.C. CHARACTERISTICS
TA e 0§ C to 70§ C, VCC e a 5V g 10%, GND e 0V (TA e b 40§ C to a 85§ C for Extended Temperture)
Min
Max
Units
VIL
Symbol
Input Low Voltage
Parameter
b 0.5
0.8
V
VIH
Input High Voltage
2.0
VCC
V
VOL
Output Low Voltage
0.4
V
IOL e 2.5 mA
VOH
Output High Voltage
V
V
IOH e b 2.5 mA
IOH e b 100 mA
IIL
Input Leakage Current
g1
mA
VIN e VCC to 0V
(Note 1)
IOFL
Output Float Leakage Current
g 10
mA
VIN e VCC to 0V
(Note 2)
IDAR
Darlington Drive Current
g 2.5
(Note 4)
mA
Ports A, B, C
Rext e 500X
Vext e 1.7V
IPHL
Port Hold Low Leakage Current
a 50
a 300
mA
VOUT e 1.0V
Port A only
IPHH
Port Hold High Leakage Current
b 50
b 300
mA
VOUT e 3.0V
Ports A, B, C
IPHLO
Port Hold Low Overdrive Current
b 350
mA
VOUT e 0.8V
IPHHO
Port Hold High Overdrive Current
a 350
mA
VOUT e 3.0V
ICC
VCC Supply Current
10
mA
(Note 3)
ICCSB
VCC Supply Current-Standby
10
mA
VCC e 5.5V
VIN e VCC or GND
Port Conditions
If I/P e Open/High
O/P e Open Only
With Data Bus e
High/Low
CS e High
Reset e Low
Pure Inputs e
Low/High
NOTES:
1. Pins A1, A0, CS, WR, RD, Reset.
2. Data Bus; Ports B, C.
3. Outputs open.
4. Limit output current to 4.0 mA.
18
3.0
VCC b 0.4
Test Conditions
82C55A
CAPACITANCE
TA e 25§ C, VCC e GND e 0V
Symbol
Parameter
Min
Max
Units
Test Conditions
Unmeasured plns
returned to GND
fc e 1 MHz(5)
CIN
Input Capacitance
10
pF
CI/O
I/O Capacitance
20
pF
NOTE:
5. Sampled not 100% tested.
A.C. CHARACTERISTICS
TA e 0§ to 70§ C, VCC e a 5V g 10%, GND e 0V
TA e b 40§ C to a 85§ C for Extended Temperature
BUS PARAMETERS
READ CYCLE
Symbol
82C55A-2
Parameter
Min
tRA
v
Address Hold Time After RDu
tRR
RD Pulse Width
tRD
Data Delay from RD
tDF
RD
tRV
Recovery Time between RD/WR
tAR
Address Stable Before RD
v
u to Data Floating
Units
Max
0
ns
0
ns
150
ns
10
Test
Conditions
120
ns
75
ns
200
ns
WRITE CYCLE
Symbol
82C55A-2
Parameter
Min
v
u
Units
Max
Test
Conditions
tAW
Address Stable Before WR
0
ns
tWA
Address Hold Time After WR
20
ns
Ports A & B
20
ns
Port C
tWW
WR Pulse Width
100
ns
tDW
Data Setup Time Before WR
100
ns
tWD
Data Hold Time After WR
30
ns
Ports A & B
30
ns
Port C
u
u
19
82C55A
OTHER TIMINGS
Symbol
82C55A-2
Parameter
Min
Max
350
Units
Conditions
tWB
WR e 1 to Output
tlR
Peripheral Data Before RD
0
ns
tHR
Peripheral Data After RD
0
ns
tAK
ACK Pulse Width
200
ns
tST
STB Pulse Width
100
ns
tPS
Per. Data Before STB High
20
ns
tPH
Per. Data After STB High
50
ns
tAD
ACK e 0 to Output
tKD
ACK e 1 to Output Float
tWOB
WR e 1 to OBF e 0
tAOB
ACK e 0 to OBF e 1
150
ns
tSIB
STB e 0 to IBF e 1
150
ns
tRIB
RD e 1 to IBF e 0
150
ns
tRIT
RD e 0 to INTR e 0
200
ns
tSIT
STB e 1 to INTR e 1
150
ns
tAIT
ACK e 1 to INTR e 1
150
ns
tWIT
WR e 0 to INTR e 0
tRES
Reset Pulse Width
20
ns
175
ns
250
ns
150
ns
200
500
Test
ns
see note 1
ns
see note 2
NOTE:
1. INTRu may occur as early as WRv.
2. Pulse width of initial Reset pulse after power on must be at least 50 mSec. Subsequent Reset pulses may be 500 ns
minimum. The output Ports A, B, or C may glitch low during the reset pulse but all port pins will be held at a logic ‘‘one’’ level
after the reset pulse.
20
82C55A
WAVEFORMS
MODE 0 (BASIC INPUT)
231256 – 22
MODE 0 (BASIC OUTPUT)
231256 – 23
21
82C55A
WAVEFORMS (Continued)
MODE 1 (STROBED INPUT)
231256 – 24
MODE 1 (STROBED OUTPUT)
231256 – 25
22
82C55A
WAVEFORMS (Continued)
MODE 2 (BIDIRECTIONAL)
231256 – 26
Note:
Any sequence where WR occurs before ACK AND STB occurs before RD is permissible.
(INTR e IBF # MASK # STB # RD a OBF # MASK # ACK # WR)
WRITE TIMING
READ TIMING
231256 – 28
231256 – 27
A.C. TESTING INPUT, OUTPUT WAVEFORM
231256 – 29
A.C. Testing Inputs Are Driven At 2.4V For A Logic 1 And 0.45V
For A Logic 0 Timing Measurements Are Made At 2.0V For A
Logic 1 And 0.8 For A Logic 0.
A.C. TESTING LOAD CIRCUIT
231256 – 30
*VEXT Is Set At Various Voltages During Testing To Guarantee
The Specification. CL Includes Jig Capacitance.
23
Téléchargement