Vous êtes sur la page 1sur 9

Labo 4 : Communication par le port parallèle

1- Objectifs du laboratoire
Au terme de ce laboratoire, l’étudiant doit être capable de décrire les caractéristiques du port
parallèle d’un ordinateur et de programmer ce port en langage C sous Windows XP.

2- Local et matériel utilisé


 local 1-2
 deux PC (611 et 6XX) avec Windows XP et le compilateur DevC++ ;
 une carte d’extension du port parallèle permettant un accès facile aux lignes du
connecteur DB25, un câble parallèle, des LEDs
 une alimentation

3- Expériences

A. La carte d’extension du port parallèle


 Identifier les différentes lignes d’entrée et sortie du port parallèle sur la
carte d’extension qui vous a été fournie, et ce enfin de pouvoir l’utiliser
correctement. Dessiner ci-dessous un schéma de cette carte.

Les connecteurs en rouges sont inversés

Numéro de Sens des données


broches
1 Entrée/Sortie
2 -> 9 Entrée/Sortie
10 Entrée
11 Entrée
12 Entrée
13 Entrée
14 Entrée/Sortie
15 Entrée
16 Entrée/Sortie
17 Entrée/Sortie

Page 1 /9
B. Entrée/sortie via le registre des données du port LPT

 En vous inspirant du programme fourni en annexe, écrire (et tester) les


principales lignes d’un programme C qui permet de sortir, via le rigistre de
données du port LPT, un nombre out de 8 bits, par exemple les valeurs
successives d’un compteur.
Ce nombre sera affiché sur 4 LEDs.

Utilisation de 4 LED’s uniquement.

 Ecrire les principales lignes d’un programme C qui permet de lire, via le
registre de données du port LPT, un nombre de 8 bits provenant d’un
dipswitch. Le résultat de la lecture sera affiché à l’écran.

for (i=0; i<=20; i++)


{
x = (inp32)(portdata); // on lit le port de données
sleep(1000);
printf("port read %04X= %04d\n" ,portdata, x);
sleep(1000);
}

Page 2 /9
C. Entrée via le registre d’état du port LPT

 En vous inspirant du programme fourni en annexe, décrire les principales


lignes d’un programme C qui permet de lire, via le registre du port LPT, un
nombre de 5 bits provenant d’un dipswitch. Le résultat de la lecture sera
affiché à l’écran. Attention : l’entrée BUSY est inversée. Inspirez-vous du
programme fourni en annexe et qui se trouve sur C:\DATA

//Entrée à partir du port d'état (lignes 15 13 12 11 10)

for (i=0; i<=20; i++)


{
x = (inp32)(portetat)& 8; // on lit le port d'état ; le "&" sert a masquer la partie que l'on
veut(soit l'afficher). attention aux lignes inversées
sleep(600);
printf("port read %04X= %04d\n" ,portetat, x);
sleep(600);
}

C. Entrée / sortie via le registre de contrôle du port LPT


 Ecrire les principales lignes d’un programme C qui permet de vérifier le
fonctionnement du port de contrôle en entrée puis en sortie. Attention : 3
lignes sur 4 sont inversées.

//Entrée à partir du port dez contrôle (lignes 1 14 16 17)


for (i=0; i<=20; i++)
{
x = (inp32)(portctrl); // on lit le port de contrôle // attention aux lignes inversées
sleep(1000);
printf("port read %04X= %04d\n" ,portctrl, x&1);
sleep(2000);
}

Page 3 /9
//Sortie sur le port de contrôle (lignes 1 14 16 17)

for (i=0; i<=15; i++)


{
(oup32)(portctrl,i); // on écrit dans le port de contrôle //attention aux lignes inversées
sleep(1000);
printf("port write to 0x%X, datum=0x%2X\n" ,portctrl, i);
}

D. Application : Contrôle d’un afficheur

L’idée est de commander un afficheur 7-segments via le registre de données. En


fonction d’un code à 2 bits provenant d’un dipswitch relié au registre d’état, on effectue 4
fonctions différentes. Voici l’exemple :

Afficheurs 7-segments remplacé par un affichage à


l’écran dans l’exécution du programme C
Entrée Etat de l’affichage
00 « On a reçu 00 »
01 « On a reçu 01 »
10 « On a reçu 10 »
11 « On a reçu 11 »

Après avoir testé le fonctionnement de l’afficheur, écrire ci-dessous les principales lignes du
programme C qui a permis de tester ce circuit.

for (i=0;i<=50;i++)
{
int a,b;
a = (inp32)(portetat)& 8;
b = (inp32)(portetat)& 32;
// A est le bit de poids le plus faible
if ((a == 0) && (b == 0))
{
printf("On a recu 00\n");
system("pause");
}
if ((a == 0) && (b == 32))
{
printf("On a recu 01\n");
system("pause");
}
if ((a == 8) && (b == 0))
{
printf("On a recu 10\n");
system("pause");
}

Page 4 /9
if ((a == 8) && (b == 32))
{
printf("On a recu 11\n");
system("pause");
}
}

4- Le port parallèle (LPT) de l’ordinateur

A. Le port parallèle (LPT) de l’ordinateur

 Le port parallèle peut fonctionner selon différent modes. Décrire les


principales caractéristiques de chaque mode du port parallèle, notamment
le débit maximum permis.
Le mode SPP :

Le "Standard Parallel Port" est le protocole de base permettant l'envoi de données


vers une imprimante.
Le SPP est devenu capable d'envoyer et de recevoir. Il peut donc être bi-
directionnel. On le retrouve alors sous des appellations "Bi-directionnal mode" ou
simplement "SPP".
La vitesse de transmission maximale que l'on peut espérer obtenir avec un tel port
est de l'ordre de 150ko/s.

Le mode EPP (Enhanced Parallel Port) :

Il permet d'atteindre un débit de 2 Moctets/s, soit un débit environ treize fois


supérieur au SPP.
Le protocole EPP est lui explicitement bi-directionnel.

Le mode ECP (Extended Capacity Port) :

Le plus récent est l' (ECP). Il dérive du port EPP et en possède les mêmes
caractéristiques, avec des possibilités supplémentaires :
-Il est "Plug and Play" (branchez et utilisez).
-Il permet au périphérique de s'auto-identifier auprès de la machine dès le
démarrage. Ainsi l'imprimante peut s'auto configurer lors du lancement du système
d'exploitation (à condition que ce dernier et le BIOS soient eux aussi compatibles
Plug and Play).
-Il permet le Direct Memory Adress ( DMA ). Il est ainsi possible d'envoyer ou de
recevoir des données sans avoir besoin du processeur.
-Il comprime les données, selon une compression RLE (Run Length Encoding -
compression des répétitions d'octets) au niveau matériel.

http://209.85.129.104/search?q=cache:cIpWJLvXBoUJ:www.sitedejoe.com/Fichier/SPP-
EPP-ECP.doc+%2Bmode%2Bport%2BLPT&hl=fr&gl=be&ct=clnk&cd=1&lr=lang_fr

Page 5 /9
 Vérifier, en lançant le BIOS, dans quel mode le port parallèle est configuré.
En mode ECP.

 A l’aide du gestionnaire de périphériques de Windows, identifier les plages


d’adresses attribuées à ce port.
Adresses du port LPT : 0378- 037F 0778 - 077F en hexadécimal
0888- 0895 1912 – 1919 en décimal

Plusieurs adresses sont attribuées à chaque port séries. A quoi correspondent ces
adresses ?
A chacune des broches du périphérique.

B. Le registre de données du port parallèle

 Quelle est l’adresse du registre de données du port LPT ? 0x378


 A quelle broche du connecteur DB25 correspond chaque bit de ce registre ?
Dessiner un schéma montrant cette correspondance.

Les connecteurs verts correspondent aux connecteurs d’entrées / sorties du registre de


données. (Broches 2 à 9)

 En mode ECP et EPP, le registre de données est bidirectionnel. Comment


faites-vous dans ce cas pour programmer ce registre en :
entrée ? inp32(adresse du registre de données)
sortie ? oup32(adresse du registre de données, valeur)

 Quelle est l’instruction C qui permet d’envoyer le nombre n=65 (=’A’ =


1000001) à l’extérieur de l’ordinateur via le registre de données du port LPT ?

(oup32)(portdata,65) ;
Avec portdata valant 0x378.

 Quelle est l’instruction C qui permet de programmer le registre de données en


entrée ?

(oup32)(portctrl,32);
Avec portctrl valant 0x37A.

Page 6 /9
 Une fois que le registre de données a été programmé en entrée, quelle est alors
l’instruction C qui permet de lire le contenu de ce registre et de le placer dans
la variable data ?

int data ;
data = (inp32)(portdata);
Avec portdata valant 0x378.

C. Le registre d’état du port parallèle

 Le registre d’état du port LPT est-il unidirectionnel ou bidirectionnel ?

Ce registre est unidirectionnel.

 Quelle est l’adresse du registre d’état du port LPT ?

Ce port est disponible à l’adresse 0x37A.

 A quelle broche du connecteur DB25 correspond chaque bit de ce registre ?

7 6 5 4 3 2 1 0

x x x x 17 16 14 1

 Quelle est l’instruction C qui permet de lire le contenu du registre d’état du


port LPT et de placer ce contenu dans la variable etat_imprimante ?

int etat_imprimante ;
etat_imprimante = (inp32)(portetat);

Quelle est l’instruction C qui lit le contenu du registre d’état et ne garde que les 5
bits significatifs (correspondants aux lignes Error, Select, PE, ACK, Busy) de ce
registre ?

(inp32)(portetat+3);

Page 7 /9
 Et si on veut garder seulement le bit Busy ?

(inp32)(portetat)& 128;

 Lorsque l’ordinateur lit le registre d’état, il inverse le contenu de la ligne Busy.


Comment faites-vous par programmation pour restituer la bonne valeur ?
On peut la récupérer en utilisant les masques pour ne récupérer que la valeur
voulue et l’inverser avec une opération logique telle que le XOR.

D. Le registre de contrôle du port parallèle

 Le registre du port LPT est-il unidirectionnel ou bidirectionnel ?

Ce registre est bidirectionnel.

 Quelle est l’adresse du registre de contrôle du port LPT ?

L’adresse de ce registre est 0x379.

 A quelle broche du connecteur DB25 correspond chaque bit de ce registre ?

7 6 5 4 3 2 1 0

11 10 12 13 15 x x x

 Quelle est l’instruction C qui permet d’envoyer à l’extérieur de l’ordinateur le


nombre val = 11 = 1011 via le registre de contrôle du port LPT ?

(oup32)(portctrl,11);
Avec portctrl valant 0x37A.

 Quelle est l’instruction C qui permet de lire le contenu du registre de contrôle


et de placer le contenu dans la variable entree ?

int entree ;
entree = (inp32)(portctrl);
Avec portctrl valant 0x37A.

Page 8 /9
 Quelle est l’instruction C qui lit le contenu du registre de contrôle et ne garde
que les 4 bits significatifs (correspondant aux lignes Strobe, Auto Feed, Init,
Slct in) de ce registre ?

(inp32)(portctrl) & 16;


Avec portctrl valant 0x37A.

 Et si on veut garder seulement le bit Init ?

(inp32)(portctrl) & 4;

 Lorsque l’ordinateur lit le registre de contrôle, il inverse 3 lignes sur 4.


Comment faites-vous par programmation pour restituer la bonne valeur ?

On peut la restituer en utilisant une opération logique telle que le XOR sur les bits
inversés afin de les inverser.

Page 9 /9

Vous aimerez peut-être aussi