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 operand. For example, the ADD A, 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,
A = A +
X
X
X
X
1
ADDC A,
A = A + + C
X
X
X
X
1
SUBB A,
A = A – – C
X
X
X
X
1
INC A
A=A+1
INC
= + 1
INC DPTR
DPTR = DPTR + 1
Data Pointer only
2
DEC A
A=A–1
Accumulator only
1
DEC
= – 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,
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 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, 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 , #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,
A = A.AND.
X
X
X
X
1
ANL ,A
= .AND.A
X
ANL ,#data
= .AND.#data
X
ORL A,
A = A.OR.
X
ORL ,A
= .OR.A
X
ORL ,#data
= .OR.#data
X
XRL A,
A = A.XOR.
X
XRL ,A
= .XOR.A
X
XRL ,#data
= .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,
ACC and 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, 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 ,rel
Decrement and jump if not zero
X
CJNE A,,rel
Jump if A ≠
X
CJNE ,#data,rel
Jump if ≠ #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