ch4 PDF
ch4 PDF
ch4 PDF
91
92 CHAPITRE 4. ENTRÉES-SORTIES
Conception d’un port sortant.- Lorsqu’une donnée parvient à un périphérique depuis le bus des
données, un tampon (latching system en anglais) doit être conçu. On utilise pour cela un tampon
à trois états (d’après le circuit intégré tri-state buffer, marque déposée de National Semiconductor
Corp.).
La figure 4.1 montre l’utilisation d’un 74LS373 dans ce but. Pour que le 74LS373 fonctionne
en tant que bascule, la broche OC doit être à la terre et il doit y avoir une impulsion de niveau
haut à niveau bas pour verrouiller, autrement dit enregistrer, la donnée présente sur le bus des
données. Il est usuel de combiner dans une porte AND la sortie du décodeur d’adresse et le signal
de contrôle (IOR ou IOW) pour activer le verrouillage.
Conception d’un port entrant.- Le tri-state buffer 74LS244 est usuellement utilisé dans la concep-
tion des ports IN. La figure 4.2 montre l’utilisation d’un 74LS244 comme port entrant pour le
4.1. PORT D’ENTRÉE OU DE SORTIE SIMPLE 93
Description.- Il s’agit de huit commutateurs présentés sur un circuit DIP (d’après la façon de le
relier à la carte mère). On voit de quoi il s’agit sur le dessin et la photographie suivants :
dessin
photo
Ce circuit est relié au microprocesseur et correspond à un port donné, d’adresse déterminée ma-
tériellement. La donnée du commutateur est figée lors de la mise sous tension de l’ordinateur
(on ne doit changer sa configuration que lorsque l’ordinateur est éteint), ce qui explique que sa
lecture est relativement simple.
Pour être complet, indiquons que ce type de données est maintenant conservé dans des
mémoires flash plutôt que sur de tels commutateurs.
94 CHAPITRE 4. ENTRÉES-SORTIES
Schéma matériel du circuit.- La figure 4.3 montre la façon dont les commutateurs DIP sont reliés
au microprocesseur.
Des tampons à trois états sont utilisés pour placer les données d’entrée sur le bus des données.
Le circuit intégré IC1 décode l’adresse du port à l’aide des signaux A2–A15, les signaux A0 et
A1 jouant un autre rôle ; cette façon de faire est fréquente. La sortie du circuit intégré IC1 est
le signal de sélection du port (port select signal) SEL. Le circuit intégré IC2c examine les
signaux de contrôle M/IO et W/R ; sa sortie, IOR ne sera active que pour les cycles de lecture
d’entrée-sortie. Le circuit intégré IC2b associe les signaux SEL et IOR pour engendrer le signal
IN, appelé signal DSP (pour Device-Select Pulse, signal de sélection du périphérique).
Les connexions matérielles ainsi réalisées font que les commutateurs DIP sont reliés, dans
notre cas, aux port 0 et 1.
4.1. PORT D’ENTRÉE OU DE SORTIE SIMPLE 95
PUBLIC LPORT
IPORT EQU 0h ; port d’entree des donnees
CODE SEGMENT BYTE PUBLIC ’CODE’
ASSUME CS:CODE
Utilisation directe du DSP.- Normalement, comme nous l’avons vu, le DSP est utilisé pour activer
des bascules (dans le cas de sortie) ou des tristate buffers (dans le cas d’entrée). Cependant, dans
certains cas, l’impulsion du DSP est suffisante. C’est le cas pour déclencher un relais.
La figure 4.5 montre le schéma du circuit dans ce cas.
4.1.3.2 Programmation
Écrivons une procédure pour le port
ment consiste à tester répétitivement le signal d’entrée jusqu’à ce qu’on obtienne la valeur logique
voulue. C’est la technique de l’interrogation (en anglais polling).
Le problème.- Un interrupteur est relié à l’ordinateur et, à un certain moment, on attend que
l’interrupteur soit activé pour exécuter une action.
Triebel, p. 454
montre l’installation. L’interrupteur est relié à l’entrée 7 du port 0. Remarquons que lorsque
l’interrupteur est ouvert, l’entrée I7 est à +5 V (niveau logique 1), grâce à la résistance R1 .
Lorsque l’interrupteur est fermé, I7 est relié à la terre (niveau logique 0).
Le contenu du port 0 est placé dans le registre AL. Puisque le niveau logique de I7 se trouve
dans le bit 7 de AL, un décalage à gauche d’une position le placera dans CF. On utilise alors un
saut conditionnel suivant la valeur de CF. Si CF est égal à 1, l’interrupteur n’a pas encore été
activé ; on revient alors au début pour lire à nouveau le contenu du port. Lorsque l’interrupteur
est activé, le bit 7 est à 0 ; on passe alors à l’action ainsi déclenchée qui commence à CONTINUE.
attendre l’événement. Il pourrait être utilisé de façon plus rentable. Nous verrons plus tard
comment résoudre ce problème grâce à la notion d’interruption matérielle.
Brochage.- Le 8255A est un circuit intégré à 40 broches, dont les noms sont indiqués sur la figure
4.6 :
– Les broches PA0 à PA7 constituent le port A de huit bits. Il peut être programmé comme
entrant, comme sortant ou comme bidirectionel.
– Les broches PB0 à PB7 constituent le port B de huit bits. Il peut être programmé comme
entrant ou comme sortant mais pas comme bidirectionel.
– Les broches PC0 à PC7 constituent le port C de huit bits. Il peut être programmé comme
entrant ou comme sortant mais également être partagé en deux ports de quatre bits, CU
(bits supérieurs PC4–PC7) et CL (bits inférieurs PC0–PC3), chacun d’eux pouvant être
entrant ou sortant.
– On a bien entendu une tension entre les broches VCC (+ 5 V) et GND (0 V).
– Les deux broches de contrôle, RD pour lire et WR pour écrire, sont actives à niveau bas..
– La broche RESET, active à niveau haut, permet de remettre les registres internes à zéro.
Lorsque RESET est activé, tous les ports sont initialisés comme entrants.
– La broche CS (Chip Select) permet de sélectionner le circuit intégré. Les broches A0 et A1
permettent de spécifier le port :
CS A1 A0 Sélectionnent
0 0 0 Port A
0 0 1 Port B
0 1 0 Port C
0 1 1 Registre de contrôle
1 x x Le 8255 n’est pas sélectionné
Modes.- Le 8255 peut être programmé dans l’un des quatre modes suivants :
– Mode 0 Dans ce mode, le 8255 se comporte comme trois ports simples, chacun des quatre
ports A, B, CL et CU pouvant être programmé comme entrant ou sortant.
– Mode 1 Les ports A et B peuvent être utilisés comme des ports entrants ou sortants avec
poignée de main, les signaux de poignée de main étant fournis par les bits du port C.
4.2. ENTRÉES-SORTIES AVEC INTERFACE PROGRAMMABLE 101
– Mode 2 Dans ce mode, le port A peut être utilisé comme un port bidirectionnel avec cinq
signaux de poignée de main fournis par le port C. Le port B peut être utilisé comme port
simple ou avec poignée de main.
– Mode BSR (pour Bit Set/Reset) dans lequel les bits du port C sont positionnés ou non à
des fins de contrôle (ce qui en fait l’analogue d’un commutateur DIP).
000 = bit 0
001 = bit 1
010 = bit 2
011 = bit 3
100 = bit 4
101 = bit 5
110 = bit 6
111 = bit 7
Exemple.- Écrivons le code pour le 8255 de l’IBM-PC pour le mode 0, avec le port A en sortie
et les ports B et C en entrée.
En se référant à ce qui vient d’être dit, l’octet de contrôle doit être :
1 00 0 1 0 1 1 = 8Bh,
ce qui conduit au programme :
Interfaçage du clavier.- La figure 4.9 montre l’interfaçage d’un clavier à deux colonnes et huit
lignes au 8255A. Le port A est programmé comme port d’entrée et la partie supérieure du port
C comme port de sortie. On n’utilise ni le port B, ni la partie inférieure du port C.
Détection.- On peut détecter qu’une touche a été pressée simplement en lisant l’octet du port A
du PPI. En effet, lorsqu’aucune touche n’est pressée la valeur de l’octet est FFh.
La suite d’instructions suivante permet donc de détecter qu’une touche a été pressée :
Initialisation du PPI.- Pour notre exemple, on voit que le port A doit être programmé comme
entrant, la partie supérieure du port C comme sortante, le reste n’ayant pas d’importance. L’octet
de contrôle sera donc :
1 00 1 00 X X.
En choisissant 0 pour X, le code est donc 90h. Le PPI est donc programmé grâce à la suite
d’instructions :
Algorithme.- L’algorithme pour détecter, vérifier l’anti-rebond et coder est donné à la figure 4.10.
Le programme.-
4.2. ENTRÉES-SORTIES AVEC INTERFACE PROGRAMMABLE 105
debut
oui touche
pressee ?
non
attendre 20 ns
pour anti-rebond
non touche
relachee ?
oui
attendre 20 ns
pour anti-rebond
oui touche en
non
colonne 1 ?
touche en non
colonne 2
pointeur a
colonne 1 oui
pointeur a
colonne 2
obtenir le code
a partir de la
table
retour
La figure 4.11 montre les connexions avec le décodeur 74LS138 utilisé sur l’IBM PC. Les
broches A0 à A4 du microprocesseur sont reliées à des périphériques spécifiques (décrits plus
4.3. CAS DE L’IBM-PC 107
loin) tandis que les broches A5, A6 et A7 sont responsables des sorties Y0 à Y7 du 74LS138
lorsque G2A, G2B et G1 sont actives.
Connexion.- La figure 4.12 montre comment les adresses des ports du 8255 sont décodés en
utilisant un 74LS138. A0 et A1 sont utilisés pour sélectionner l’un des ports A, B, C. Le registre
de contrôle et CS sont activés par la broche Y3 du 74LS138. La table suivante montre le calcul
de l’adresse de port, en supposant que les x valent zéro :
Adresse en binaire
AEN A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 Adresse Port
1 0 0 0 1 1 x x x 0 0 60h Port A
1 0 0 0 1 1 x x x 0 1 61h Port B
1 0 0 0 1 1 x x x 1 0 62h Port C
1 0 0 0 1 1 x x x 1 1 63h Registre de contrôle
Port A.- Sur l’IBM PC et l’IBM PC/XT, ce port, d’adresse 61h, est utilisé pour l’entrée du
clavier.
La table ci-dessous résume l’attribution des bits du port A.
– KP (pour Key Pressed) indique si une touche est enfoncée (1, make-code) ou non (0, break-
code).
– Le code clavier (scan code) est la valeur brute de la touche. Même avec un clavier à 102
touches, sept octets sont suffisants pour indiquer cette valeur.
108 CHAPITRE 4. ENTRÉES-SORTIES
Port B.- Le port B, d’adresse 61h, est initialisé comme port sortant. Les fonctions de chacun des
bits sont montrées sur la table ci-dessous :
Port B (sortant)
PB7 PB6 PB5 PB4 PB3 PB2 PB1 PB0
PA KBC NME NMI SB2 SPARE TM1 TM2
Port C.- Le port C, d’adresse 62h, est programmé comme entrant avec la signification suivante
des bits :
– PC7 donne PE1 ou PAR (pour Parity Error ou PARity) indique une erreur (1) de parité
pour la mémoire centrale ou non (0).
– PC6 donne PE2 ou EXT indique une erreur (1) de parité sur une carte d’extension ou non
(0).
– PC5 donne TMR (pour TiMeR) donne le signal de sortie du compteur 2 du temporisateur :
0 pour niveau bas et 1 pour niveau haut.
– PC4 indique Spare
– Le contenu du commutateur DIP de configuration est lu lors du démarrage par le BIOS et
est alors stocké dans la zone de communication du BIOS. Après cela, on n’a plus besoin de
le lire. PC3 à PC0 donnent SW–1 à SW–4 ou SW–5 à SW–8 :
– SW–1 spécifie normal ou hh Loop on POST ii.
4.3. CAS DE L’IBM-PC 109
Il y a au plus 256 KiO sur la carte mère, le reste étant éventuellement sur une carte
d’extension.
– SW–5 et SW–6 spécifient la carte graphique installée :
SW–6 SW–5
0 0 Réservé
0 1 CGA 40 x 25 (en noir et blanc)
1 0 CGA 80 x 25 (en noir et blanc)
1 1 MDA 80 x 25
Bien entendu, beaucoup de ces indications sont devenues obsolètes pour les ordinateurs qui
ont suivi. Le port A permet encore de lire le code clavier et les bits 0 et 1 du port B sont encore
utilisés pour contrôler le temporisateur et le haut-parleur.
Les informations sur la configuration sont maintenant stockées dans de la mémoire CMOS.
110 CHAPITRE 4. ENTRÉES-SORTIES
4.4 Le BIOS
Le début du code du BIOS, en langage d’assemblage, consiste à donner des noms aux divers
ports du 8255 :
1 $TITLE(BIOS FOR THE IBM PERSONAL COMPUTER XT)
2
3 ;---------------------------------------------------------
4 ; THE BIOS ROUTINES ARE MEANT TO BE ACCESSED THROUGH :
5 ; SOFTWARE INTERRUPTS ONLY. ANY ADDRESSES PRESENT IN :
6 ; THE LISTINGS ARE INCLUDED ONLY FOR COMPLETENESS, :
7 ; NOT FOR REFERENCE. APPLICATIONS WHICH REFERENCE :
8 ; ABSOLUTE ADDRESSES WITHIN THE CODE SEGMENT :
9 ; VIOLATE THE STRUCTURE AND DESIGN OF BIOS. :
10 ;---------------------------------------------------------
11
12 ;---------------------------------
13 ; EQUATES :
14 ;---------------------------------
0060 15 PORT_A EQU 60H ; 8255 PORT A ADDR
0061 16 PORT_B EQU 61H ; 8255 PORT B ADDR
0062 17 PORT_C EQU 62H ; 8255 PORT C ADDR
0063 18 CMD_PORT EQU 63H
Commentaires.- 1o ) On initialise le PPI 8255 (lignes 378 et 379) de façon à ce que les ports A et
B de celui-ci soient sortants et le port C entrant.
On envoie 89h au port de commande du 8255. On a 89h = 1000 1001b, c’est-à-dire qu’on
définit la fonction des ports (D7 = 1), le port A est simple (mode 00, spécifié par D6 et D5),
sortant (D4 = 0), la partie supérieure du port C est entrante (D3 = 1), le port B est simple (D2
= 0), sortant (D1 = 0) et la partie inférieure du port C est entrante (D0 = 1).
- 2o ) On envoie 10100101b au port B (lignes 380 à 384) du 8255, c’est-à-dire que
le port A lira la valeur du clavier (PB7 = 1), qu’on active l’horloge du clavier (PB6 = 0), qu’il
faut renvoyer à NMI lorsqu’il y a une erreur sur une carte d’extension (PB5 = 1), qu’il faut
vérifier la parité de la mémoire vive (PB4 = 0), qu’il faut lire les bits 5 à 8 de l’interrupteur DIP
et les placer dans les bits 0 à 3 du port C (PB3 = 0), qu’il faut affecter le signal 2 du PIT 8253
à l’enregistreur de cassettes (PB1 = 0) et qu’il faut placer celui-ci à niveau haut (PB0 = 1).
- 3o ) On envoie 0000 0001b au port A (lignes 385 et 386) du 8255.