Vous êtes sur la page 1sur 28

CHAPITRE 1:

Programmation des interfaces


d’Entrées/ Sorties PC

1
Damergi Emir - INSAT 2010
INTRODUCTION

Dans un ordinateur, Le microprocesseur est relié aux autres composants


(Mémoire, Interfaces d’Entrées/Sorties (Série, Parallèle, USB, etc..) par:
• Bus de contrôle unidirectionnel (μp : transportant les signaux de contrôle
(Read (Lecture) et Write (écriture) indiquant le type d’opération à effectuer.

• Bus d’adresses unidirectionnel (μ p  ): transportant l’adresse dont


le contenu doit être lu ou modifié.
• Bus de données bidirectionnel : transportant les données lues
(des composants vers le μ p) ou écrites (du μ p vers les composants).

Bus de contrôle

Bus d’adresses

Interface Interface Interface Interface


Microprocesseur Mémoire
série parallèle USB …..

Bus de données 2
Damergi Emir - INSAT 2010
INTRODUCTION (2): Les mémoires

CS
AN-1
Une mémoire est caractérisée par : AN-2
. Mémoire
• N lignes d’adresses: AN-1 AN-2 …..A0 .
A0
• M lignes de données DM-1DM-2……D0

• Des lignes de contrôle (Lecture ‘RD’ et écriture’ WR’).


• Une ligne de validation qui permet d’activer DM-1 DM-2……D0
ou désactiver la mémoire (notée CS :Chip select ou
CE: Chip Enable).

La mémoire contient 2N mots et occupe un espace de 2N adresses


• Commençant par l’adresse 0 …jusqu’à 2N-1.
• Chaque mot (donc adresse) représentant un registre de M bits
3
Damergi Emir - INSAT 2010
INTRODUCTION (3): Les mémoires

Une mémoire ayant:


- 3 lignes d’adresses : A2A1A0.
- 4 ligne de données : D3D2D1D0.

Adresse Contenu
A2 A1 A0 D3 D2 D1 D0
Cette mémoire contient: 1 1 1 (07) 1 1 0 1
1 1 0 (06) 1 0 0 1
A2
• 23 = 8 mots occupant 8 adresses : [0..7]. 1 0 1 (05) 0 1 0 0
A1
A0 1 0 0 (04) 1 1 0 0
• Chaque mot (adresse) ayant une taille 0 1 1 (03) 0 0 0 0
de 4 bits.
0 1 0 (02) 1 0 0 0
0 0 1 (01) 0 1 1 0
0 0 0 (00) 1 1 1 0

D3D2D1D0
4
Damergi Emir - INSAT 2010
INTRODUCTION (4): Les mémoires

Pour une lecture à partir de la mémoire du mot ayant l’adresse 06 = 110:


1) Le µp active le signal READ (lecture).
2) Le µp émet l’adresse du mot à lire .
3) La mémoire émet le contenu de l’adresse 06
(110) sur le bus de données vers le µp.
Adresse Contenu
Microprocesseur A2 A1 A0 D3 D2 D1 D0
1 RD 1 1 1 (07) 1 1 0 1
READ
1 1 0 (06) 1 00 00 11
WRITE WR
1 0 1 (05) 0 1 0 0

A2 1 A2 1 0 0 (04) 1 1 0 0

A1 0 1 1 (03) 0 0 0 0
A1 1
0 1 0 (02) 1 0 0 0
0 A0
A0 0 0 1 (01) 0 1 1 0
0 0 0 (00) 1 1 1 0
D3 D2 D1 D0
D3 D2 D1 D0
Bus de données
5
Damergi Emir - INSAT 2010
INTRODUCTION (5): Les mémoires

Pour une écriture de la donnée 1111dans la mémoire du mot ayant l’adresse 06 = 110:
1) Le µp active le signal WRITE (Écriture).
2) Le µp émet l’adresse du mot à modifier 110 = 06.
3) La µp émet la donnée (1111) à écrire dans
sur le bus de données vers la mémoire.
Adresse Contenu
Microprocesseur A2 A1 A0 D3 D2 D1 D0
RD 1 1 1 (07) 1 1 0 1
READ
1 1 0 (06) 1 0 0 1
WRITE
1 WR
1 0 1 (05) 0 1 0 0

A2 1 A2 1 0 0 (04) 1 1 0 0

A1 0 1 1 (03) 0 0 0 0
A1 1
0 1 0 (02) 1 0 0 0
0 A0
1 1 1 1 A0 0 0 1 (01) 0 1 1 0
0 0 0 (00) 1 1 1 0
D3 D2 D1 D0
D3 D2 D1 D0
Bus de données
6
Damergi Emir - INSAT 2010
Interfaces d’Entrées/Sorties (1)

Une interface E/S (Entrées/Sorties) est le moyen pour le microprocesseur de


communiquer avec le monde externe (Périphériques).
Relativement à un microprocesseur, une interface E/S est un circuit considéré comme
étant une mémoire dont le contenu peut être lu (READ) et modifié (WRITE):
• Ayant N lignes d’adresses.
• Ayant M lignes de données?
• contenant 2N registres (mots de M bits, avec M=8 généralement)).
• Occupant un espace de 2N adresses: 0..2N-1.

Microprocesseur
RD
READ Circuit d’interface
WR
E/S
WRITE
Registre 2N-1
AN-1
AN-1 ……..
. ..
Registre 1
.
A0
A0 Registre 0

DM DM-1… D0
DM-1 …………… D0 7
Bus de données Damergi Emir - INSAT 2010
Interfaces d’Entrées/Sorties (2) : Connexion externe

Vue de l’extérieur, une interface d’entrée/Sortie est un connecteur contenant un


certain nombre de pins (broches).
Chaque bit de l’un des registres du
circuit d’interface étant connecté à
un pin (broche) du connecteur.
Circuit d’interface
E/S

RD

b7 b6 b5 b4 b3 b2 b1 b0
WR
Registre i

AN-1
.. b7 b6 b5 b4 b3 b2 b1 b0

A0 Registre i-1

DM-1 …………… D0

Circuit d’interface
E/S (Interne) Interface E/S vu de l’extérieur 8
Damergi Emir - INSAT 2010
Interfaces d’Entrées/Sorties (3) : Sortie

Un registre de l’interface d’E/S peut être utilisé en SORTIE pour une communication du
µp vers l’extérieur  Écriture dans le registre
La valeur de chacun des bits de la donnée écrite dans le registre est transformée:
• en un niveau de tension(V+ = 5V) au niveau du pin si le bit = ‘1’.

• en un niveau de tension(V- = 0V) au niveau du pin si le bit = ‘0’.

Circuit d’interface
E/S 5V
μP
RD
READ
WR
WRITE
0V
AN-1 ‘1’
b b b b b b b b
‘0’
AN-1 .. 7 6 5 4 3 2 1 0

.
1 0 1 1 0 0 1 0 Registre E/S
. A0
A0

D7 D6… ..D0
D7 …. …………… D0 9
Bus de données Damergi Emir - INSAT 2010
Interfaces d’Entrées/Sorties (4) : Entrée

Un registre de l’interface d’E/S peut être utilisé en ENTREE (communication de l’extérieur vers le µp):
L’application d’un niveau de tension quelconque sur les pins du connecteur se traduit par:
• Apparition d’un ‘ 0 ’ au niveau du bit si on applique au pin une tension de 0V.
• Apparition d’un ‘ 1 ’ au niveau du bit si on applique au pin une tension de +5V.

 Le µp effectue une opération de Lecture depuis le registre

Circuit d’interface
E/S 0V
μP
RD
READ
WR
WRITE

AN-1 +5V
b b b b b b b b
AN-1 .. 7 6 5 4 3 2 1 0

. ‘0‘ ‘1‘
0 X X X X X X 1 .
A0 Registre E/S
A0

D7 D6… ..D0
D7 …. …………… D0
10
Bus de données Damergi Emir - INSAT 2010
Interfaces d’Entrées/Sorties (5) : Programmation en ‘C’

La programmation des interfaces d’E/S en langage ‘C’:

• Pour l’accès en écriture à un registre d’E/S, on utilise l’instruction:

outport (adresse_registre, donnée);

• Pour l’accès en Lecture à un registre d’E/S, on utilise l’instruction:

Nom_var = inport (adresse_registre);

Nom_var étant une variable de type byte (8 bits) non signée:


unsigned byte Nom_var;

11
Damergi Emir - INSAT 2010
L’interface parallèle 8255 (1)

L’interface E/S parallèle « 8255 » est un circuit contenant 4 registre:


• 3 registres (ports) d’E/S de 8 bits:
 Port A (PA7 .. PA0).
 Port B (PB7 .. PB0).
 port C divisé en deux parties  Port Csup de 4 bits (PC7 .. PC4)
 port Cinf de 4 bits (PC3 .. PC0)
• Un registre de contrôle qui permet de configurer le mode de fonctionnement
(Entrée ou Sortie) de chacun des ports (PA, PB, PCinf et PCsup).

8255
Registre de contrôle
RD PC7 - PC4
WR
Communication
Communication
avec le PC3 - PC0
A1 PC sup PC inf Bidirectionnelle avec
microprocesseur
A0 Périphériques
externes
PB7 - PB0
Bus données PB
D7 - D0
PA7 - PA0
PA
12
Damergi Emir - INSAT 2010
L’interface parallèle 8255 (2)

 Ces 4 registres occupent 4 adresses dans l’ordre croissant suivant:


• Port A : Adresse de base.
• Port B: Adresse de base + 1.
• Port C: Adresse de base + 2.
• Registre de contrôle: Adresse de base + 3.

 Les différents bits du registre de contrôle permettent d’activer le circuit 8255 et


de déterminer la configuration des ports A, B, Csup et Cinf (Entrée ou Sortie).

D7 D6 D5 D4 D3 D2 D1 D0

Circuit 8255 0 0 0
1 = actif
0 = désactivé

Port A Port Cinf


1 = Entrée 1 = Entrée
0 = Sortie 0 = Sortie

Port Csup Port B


1 = Entrée 1 = Entrée
0 = Sortie 0 = Sortie 13
Damergi Emir - INSAT 2010
Application commande Leds (1)

Exemple1: Un PC dispose d’un circuit d’interface E/S parallèle ‘8255’ occupant les
adresses 300 à 303 Hexa et connecté à travers le port A à 8 Diodes Leds (voir figure).
Ces Leds s’allument quand on leur applique V=+5V et s’éteignent quand on leur applique V = 0V.
Sachant que les Ports B, Csup et Cinf doivent être configurés en Entrée:
 Écrire un programme en ‘C’ qui permet de faire clignoter continuellement les 8 Leds.

8255
PA7 Led7
.
μP RD PA6
.
READ PA5 .
WR .
PA4
WRITE .
PA3
.
A1 PA2 .
A1
.
PA1
A0
A0 .
PA0 Led0
D7 D6… ..D0
D7 …. …………… D0
Bus de données 14
Damergi Emir - INSAT 2010
Application commande Leds (2) : solution

Commençons par modéliser le 0: PA en sortie


Fonctionnement du système par pour commander
un diagramme: les Leds
1: PB, PCsup et PCinf en
1: 8255 actif Entrée (d’après ennoncé)

D7 D6 D5 D4 D3 D2 D1 D0
Configurer 1 0 0 0 1 0 1 1
l’interface 8255
8 B = 8B Hexa
Appliquer des ‘1’ à toutes
Les Leds pour les allumer.
PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0
Allumer les
Leds 1 1 1 1 1 1 1 1
= FF Hexa
F F

Appliquer des ‘0’ à toutes


Allumer les Les Leds pour les éteindre.
Leds PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0

0 0 0 0 0 0 1 0
0 0
= 00 Hexa
15
Damergi Emir - INSAT 2010
Application commande Leds (3) : solution

On détermine d’abord les adresses


Des registres: - Port A: 300 H
- Port B: 301 H
- Port C: 302 H
- Reg Ctrl: 303 H

Le programme en ‘C’ serait:


// Configuration du 8255
outport (0x303, 0x8B); 8255
1
PA7 Led7
// Répéter continuellement .
While (1) μP RD 1
PA6
.
{ READ 1
PA5 .
WR .
1
PA4
.
// Allumer les Leds WRITE
outport (0x300, 0xFF); 1
PA3
.
A1
A1 1
PA2 .
.
// Éteindre les Leds A0
A0 1
PA1
.
outport (0x300, 0x00); 1
PA0 Led0
D7 D6… ..D0
}
D7 …. …………… D0
Remarque: 0x est utilisé en ‘C’ pour Bus de données
Indiquer les nombres hexadécimaux.
16
Damergi Emir - INSAT 2010
Application commande Leds (4) : solution

On détermine d’abord les adresses


Des registres: - Port A: 300 H
- Port B: 301 H
- Port C: 302 H
- Reg Ctrl: 303 H

Le programme en ‘C’ serait:


// Configuration du 8255
outport (0x303, 0x8B); 8255
PA7 1 Led7
// Répéter continuellement
μP RD PA6 1 .
While (1) .
{ READ PA5 1 .
WR
PA4 1 .
// Allumer les Leds WRITE .
outport (0x300, 0xFF);
PA3 1 .
A1 PA2 1 .
A1
.
// Éteindre les Leds A0 PA1 1 .
A0
outport (0x300, 0x00); PA0 1 Led0
D7 D6… ..D0
}
D7 …. …………… D0
Remarque: 0x est utilisé en ‘C’ pour Bus de données
Indiquer les nombres hexadécimaux.
17
Damergi Emir - INSAT 2010
Application commande Leds (5) : solution

On détermine d’abord les adresses


Des registres: - Port A: 300 H
- Port B: 301 H
- Port C: 302 H
- Reg Ctrl: 303 H

Le programme en ‘C’ serait:


// Configuration du 8255
outport (0x303, 0x8B); 8255
0
PA7 1 Led7
// Répéter continuellement
μP RD 0
PA6 1 .
While (1) .
{ READ 0
PA5 1 .
WR
0
PA4 1 .
// Allumer les Leds WRITE .
outport (0x300, 0xFF); 0
PA3 1 .
A1 1
A1 0
PA2 .
.
// Éteindre les Leds A0 0
PA1 1 .
A0
outport (0x300, 0x00); 0
PA0 1 Led0
D7 D6… ..D0
}
D7 …. …………… D0
Remarque: 0x est utilisé en ‘C’ pour Bus de données
Indiquer les nombres hexadécimaux.
18
Damergi Emir - INSAT 2010
Application commande Leds (6) : solution

On détermine d’abord les adresses


Des registres: - Port A: 300 H
- Port B: 301 H
- Port C: 302 H
- Reg Ctrl: 303 H

Le programme en ‘C’ serait:


// Configuration du 8255
outport (0x303, 0x8B); 8255
PA7 0 Led7
// Répéter continuellement
μP RD PA6 0 .
While (1) .
{ READ PA5 0 .
WR
PA4 0 .
// Allumer les Leds WRITE .
outport (0x300, 0xFF);
PA3 0 .
A1 PA2 0 .
A1
.
// Éteindre les Leds A0 PA1 0 .
A0
outport (0x300, 0x00); PA0 0 Led0
D7 D6… ..D0
}
D7 …. …………… D0
Remarque: 0x est utilisé en ‘C’ pour Bus de données
Indiquer les nombres hexadécimaux.
19
Damergi Emir - INSAT 2010
Application Afficheur ‘7’ segments (1)

Exemple2: Un PC dispose d’un circuit d’interface E/S parallèle ‘8255’ occupant les
adresses 30C à 30F Hexa et connecté à travers le port C à un afficheur 7 segments (voir figure).
Chacun des segments s’allume quand on lui applique +5V et s’éteint quand on leur applique 0V.
 De telle sorte à pouvoir afficher n’importe quel nombre entre 0 et 9.
Sachant que les Ports , PA et PB doivent être configurés en Entrée:
 Écrire un programme en ‘C’ qui permet d’afficher ‘3’.

8255
PC7 a a
b
μP RD PC6

READ PC5 c f b
WR
PC4 d g
WRITE PC3 e e c
A1 PC2 f
A1
PC1
A0 g d h
A0
PC0
h
D7 D6… ..D0
D7 …. …………… D0
Bus de données 20
Damergi Emir - INSAT 2010
Application Afficheur ‘7’ segments (2) : solution

Commençons par modéliser le fonctionnement 1: PA en entrée 1: PB en entrée


du système par un diagramme: (énoncé) (énoncé)

1: 8255 actif

Configurer D7 D6 D5 D4 D3 D2 D1 D0
l’interface 8255
1 0 0 1 0 0 1 0
PC7
a a
9 2 = 92 Hexa
PC6 b
0: PCsup et PCinf en Sortie
PC5 c f b
 commander L’afficheur
PC4 d g
PC3 e e c Afficher ‘3’
 Allumer les
PC2 f d h Segments: Mettre à ‘1’ les segments
devant être allumés
PC1
g a, b, c, d et g
PC0
h
PC7 PC6 PC5 PC4 PC3 PC2 PC1 PC0
(a) (b) (c) (d) (e) (f) (g) (h)

1 1 1 1 0 0 1 0
F 2
= F2 Hexa
21
Damergi Emir - INSAT 2010
Application Afficheur ‘7’ segments (3) : solution

On détermine d’abord les adresses


Des registres (30C – 30F Hexa):
- Port A: 30C H
- Port B: 30D H
- Port C: 30E H
- Reg Ctrl: 30F H

Le programme en ‘C’ 8255


1
PC7 a a
serait:
RD 1
PC6 b
1
PC5 c f b
WR
// Configuration du 8255 1
PC4 d g

outport (0x30F, 0x92); 0


PC3 e e c
A1 0
PC2 f
// Allumer les Segments A0 1
PC1
g d h
// a, b, c, d et g. 0
PC0
h

outport (0x30E, 0xF2); D7 …. …………… D0

22
Damergi Emir - INSAT 2010
Application Afficheur ‘7’ segments (4) : solution

On détermine d’abord les adresses


Des registres (30C – 30F Hexa):
- Port A: 30C H
- Port B: 30D H
- Port C: 30E H
- Reg Ctrl: 30F H

Le programme en ‘C’ 8255


PC7 1a a
serait:
RD PC6 1b
PC5 1c f b
WR
// Configuration du 8255 PC4 1d g

outport (0x30F, 0x92);


PC3 0e e c
A1 PC2 0f
// Allumer les Segments A0 PC1 1g d h
// a, b, c, d et g. PC0
0h
outport (0x30E, 0xF2); D7 …. …………… D0

23
Damergi Emir - INSAT 2010
Application Boutons Poussoir + Leds (1)

Exemple3: Un PC dispose d’un circuit d’interface E/S parallèle ‘8255’ occupant les adresses
3F8 à 3FB Hexa et connecté à travers le port A à 2 Diodes Leds et à travers le port C à deux
boutons poussoir (voir figure). Sachant que les Ports non utilisés sont configurés en sortie:
 Écrire un programme en ‘C’ qui permet de Tester l’état des deux boutons poussoirs BP0
et BP1 et: - allumer la Led0 si le bouton BP0 est appuyé.
- allumer la Led1 si le bouton BP1 est appuyé.
- éteindre les 2 Leds sinon.

8255
PA7

μP RD …

READ PA1 Led1


WR Led0
PA0
WRITE
PC7
A1
A1 …

A0
A0 PC1
BP1 Un bouton poussoir génère
0V au repos et +5V quand
PC0
D7 D6… ..D0 BP0 il est appuyé
D7 …. …………… D0 24
Bus de données Damergi Emir - INSAT 2010
Application Boutons Poussoir + Leds (2): solution

Commençons par modéliser le


0: PA en sortie
Fonctionnement du système par pour commander 1: PCinf en Entrée pour lire
un diagramme: 1: 8255 actif les Leds L’état des boutons poussoir

D7 D6 D5 D4 D3 D2 D1 D0

Configurer 1 0 0 0 0 0 0 1
l’interface 8255 8 1 = 81 Hexa
0: PCsup et PB en Sortie (énoncé)

Lire Etat BPs


 Lire Port C
BP1 BP0
PC7 PC6 PC5 PC4 PC3 PC2 PC1 PC0
Appui BP0 Sinon Appui BP0 0 1 = 01 Hexa
Appui BP1 1 0 = 02 hexa
Appui BP1

Led1 Led0
Allumer Allumer Éteindre PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0
Led 0 Led 1 Leds Allumer Led0 0 1 = 01 H
Allumer Led1 1 0 = 02 H
Éteindre Leds 0 0 = 00 H
25
Damergi Emir - INSAT 2010
Application Boutons Poussoir + Leds (2): solution

On peut remplacer le diagramme par un autre en fonction des valeurs trouvées.


En plus, les adresses sont (Port A: 3F8 H, Port B: 3F9 H, Port C: 3FA H et Reg Ctrl: 3FB H).

Le programme en ‘C’:
// Déclaration d’une variable
Reg_ctrl (3FBh)  81h
Unsigned byte etat_bouton;

// Configuration du 8255

Lire Port C outport (0x3FB, 0x81);


(3FAh)
// Lire État des Boutons Poussoir (Port C)
etat_bouton = inport (0x3FA);
Port C = 01 h Sinon

// Test et traitement
Port C = 02 h
switch (etat_bouton)
{
case 0x01: outport (0x3F8, 0x01);
Port A (3F8h) Port A (3F8h) Port A (3F8h) case 0x02: outport (0x3F8, 0x02);
= 01 h = 02 h = 00 h default : outport (0x3F8, 0x01);
}
26
Damergi Emir - INSAT 2010
Application Boutons Poussoir + Leds (3): Solution

Dans la solution proposée, on a testé juste les


Lire Port C
(3FAh)
valeurs 01 et 02 H en supposant que les autres
Valeurs sont à 0.

Port C = 01 h Sinon

Port C = 02 h
Ceci n’est pas vrai car les autres entrées du port C
Port A (3F8h) Port A (3F8h) Port A (3F8h) peuvent prendre des valeurs aléatoires inconnues
= 01 h = 02 h = 00 h

PC7

PC6

PC5 ?
PC4

PC3

PC2

PC1 BP1
PC0
BP0

27
Damergi Emir - INSAT 2010
Application Boutons Poussoir + Leds (4): Solution corrigée

La solution est de forcer les valeurs des bits non utilisés à ‘0’
 On parle d’opération de masquage

Il s’agit d’effectuer une opération de ET logique entre la donnée à tester


et une variable binaire dont la valeur est déterminée comme suit:
- 0 pour chaque bit occupant la même position d’un bit à masquer.
- 1 pour les autres bits Le programme en ‘C’:
// Déclaration d’une variable
Unsigned byte etat_bouton;
Dans notre exemple, on s’intéresse aux bits b1
// Configuration du 8255
et b0 et on veut masquer les autres bits b7..b2 outport (0x3FB, 0x81);

// Lire État des Boutons Poussoir (Port C)


etat_bouton: à tester etat_bouton = inport (0x3FA);

etat_bouton = etat_bouton AND 0x03;


donnée b7 b6 b5 b4 b3 b2 b1 b0
// Test et traitement
AND Bits à masquer Bits à switch (etat_bouton)
garder {
case 0x01: outport (0x3F8, 0x01);
variable 0 0 0 0 0 0 1 1 = 03h case 0x02: outport (0x3F8, 0x02);
default : outport (0x3F8, 0x01);
Résultat 0 0 0 0 0 0 b1 b0 }

28
Damergi Emir - INSAT 2010

Vous aimerez peut-être aussi