Port parallèle

A son origine, le port parallèle était conçu pour recevoir une imprimante. Aujourd'hui, ce port peut recevoir des périphériques variés. Ainsi, il est possible d'y connecter une imprimante, un scanner, un disque dur externe, etc... Le port parallèle se présente sous la forme d'un connecteur DB25 femelle. Il est aujourd'hui présent sur la totalité des ordinateurs. Le port parallèle, a subi plusieurs changements et améliorations qui sont décrits ci-dessous.


Mode SPP

Il s'agit du mode de base. SPP signifie "Standard Parallel Port", ou port standard parallèle. Il a été conçu pour envoyer des données vers une imprimante, il était donc en mode unidirectionnel. Ce mode possède aussi la capacité de communiquer dans les deux sens (bidirectionnel), mais il atteint une faible vitesse de transmission. Celle-ci est théoriquement de 150 Ko/sec.


Mode EPP

Le mode EPP à été créé en 1991 par les entreprises Zenith, Xircom et Intel. EPP signifie « Enhanced Parallel Port ». Conçu pour être utilisé en mode bidirectionnel, il permet l'échange de données avec des périphériques variés. Son débit théorique est de 2 Mo/sec. Ce débit représente une hausse de vitesse considérable en comparaison avec le mode SPP. En effet, le mode EPP est environ 13 fois plus rapide.


Mode ECP

ECP signifie « Extended Capacity Port », ou port à capacité étendue. Créé par Hewlett Packard et Microsoft, il possède les mêmes caractéristique que le mode EPP, mais présente quelques fonctions supplémentaires, décrites ci-dessous: 1. Gestion des périphériques "Plug and Play"
2. Identification des périphériques dès le démarrage de l'ordinateur
3. Support DMA
4. Peut comprimer les données selon la compression RLE (compression des répétitions d'octets au niveau matériel).
5. Taux de compression pouvant atteindre 64:1, utile avec des périphériques comme les imprimantes ou les scanners, dont une grande partie des données transmises sont constituées de longues chaînes répétitives.
6. Adressage des périphériques par numéro de canal, utilisé lors de l'utilisation de périphériques accomplissant plusieurs fonctions (par exemple fax/modem/imprimante). Cela permet de distinguer séparément les diverses fonctions du périphérique.


Broches

Le tableau ci-dessous décrit en détail le rôle de toutes les broches utilisées dans le port parallèle. Il y a 8 bits de transmission des données, et les broches restantes remplissent diverses autres fonctions, toutes décrites ci-dessous.





PinFonctionE/SDescription
1-StrobeSortieIndique au périphérique que des données sont présentes sur les lignes 0 à 7.
2D0 / Bit de donnée 0SortieTransmet le bit de donné 0
3D1 / Bit de donnée 1SortieTransmet le bit de donné 1
4D2 / Bit de donnée 2SortieTransmet le bit de donné 2
5D3 / Bit de donnée 3SortieTransmet le bit de donné 3
6D4 / Bit de donnée 4SortieTransmet le bit de donné 4
7D5 / Bit de donnée 5SortieTransmet le bit de donné 5
8D6 / Bit de donnée 6SortieTransmet le bit de donné 6
9D7 / Bit de donnée 7SortieTransmet le bit de donné 7
10ACK / Accusé de réceptionEntréeLe périphérique indique à l'ordinateur que les données ont bien été reçues.
11Busy / OccupéEntréeLe périphérique indique à l'ordinateur qu'il est occupé (buffer de réception complet).
12PE / Papier manquantEntréePE (Paper error) indique que l'imprimante ne dispose plus de papier.
13Select / SélectionEntréeIndique si l'imprimante est en ligne (on line) ou hors ligne (off line).
14Autofeed / saut de ligneSortieL'imprimante effectue un saut de ligne à chaque caractère "return" reçu.
15Error / ErreurEntréeIndique à l'ordinateur que le périphérique à détecté une erreur.
16Init / InitialisationSortieL'ordinateur peut effectuer l'initialisation de l'imprimante par cette ligne.
17Select in / sélection d'entréeSortieL'ordinateur peut mettre l'imprimante hors ligne par ce signal.
18Masse / Retour du bit 0EntréeMasse de l'ordinateur (bit 0)
19Masse / Retour du bit 1EntréeMasse de l'ordinateur (bit 1)
20Masse / Retour du bit 2EntréeMasse de l'ordinateur (bit 2)
21Masse / Retour du bit 3EntréeMasse de l'ordinateur (bit 3)
22Masse / Retour du bit 4EntréeMasse de l'ordinateur (bit 4)
23Masse / Retour du bit 5EntréeMasse de l'ordinateur (bit 5)
24Masse / Retour du bit 6EntréeMasse de l'ordinateur (bit 6)
25Masse / Retour du bit 7EntréeMasse de l'ordinateur (bit 7)



Programmation du port

A présent, nous allons examiner comment écrire sur le port parallèle et y lire des données. Cela est très utile pour tester un circuit électronique utilisant le port parallèle.
ATTENTION!! Soyez extrêmement prudent lors de manipulations électroniques avec le port parallèle. Celui-ci peut être détruit suite à une connexion erronée sur un circuit électronique. De plus, les exemples ci-dessous ne peuvent être effectués qu'avec un ordinateur équipé de Windows 95 ou 98. La sécurité des systèmes d'exploitation plus récents ne permet pas d'effectuer un tel programme sans écrire un pilote préalablement.
Ci-dessous, nous vous donnons les instructions nécessaires à la programmation d'un port parallèle. Ces lignes vous indiquent comment envoyer et recevoir une valeur sur ce port.

En assembleur:

Ecriture:
MOV DX, 378h
MOV AX, valeur désirée
OUT DX, AX

Lecture:
MOV DX, 379h
IN DX
MOV valeur, AX

En C :

Ecriture : _outp(0x378, valeur à envoyer);
Lecture : valeur=_inp(0x379)

Retourne la valeur dans la variable "valeur"
Ces instructions nécessitent le fichier d’en-tête « conio.h ».


Exemple de programme C utilisant le port parallèle

Pour envoyer des informations à notre guise avec le port parallèle, il est nécessaire de fabriquer un programme pour écrire sur le port. Dans notre exemple, ce programme est écrit en langage C. Sachez cependant qu'il peut être écrit dans un grand nombre de langages de programmation différents.
Les fichiers d'en-têtes nécessaires sont d'abord déclarés. En commentaire, vous apercevez les fonctions pour lesquels ces fichiers sont déclarés. Ce programme est constitué d'une fonction chargée de ralentir le signal du port parallèle, afin que ce même signal ne soit pas excessivement rapide pour le circuit. Les variables nécessaires sont ensuite déclarées. Le programme demande à l'utilisateur d'entrer une valeur limite, c'est à dire une valeur jusqu'à laquelle le compteur devra compter à la vitesse déterminée par la fonction "wait". Avant de commencer le comptage, le compteur est mis à 0 à l'aide des trois premières instructions nommées "_outp", et qui interviennent avant la boucle de comptage. Le chiffre placé à l'intérieur de la parenthèse précédé par le préfixe "0x" indique l'adresse du port sur lequel l'information doit être écrite. Le préfixe "0x" indique que cette adresse est écrite en notation hexadécimale. La valeur qui suit l'adresse du port indique le chiffre décimal à envoyer au port. En résumé, la syntaxe de l'instruction "_outp" est indiquée ci-dessous.

_outp(adresse_du_port, valeur à envoyer);

Chaque fois que la boucle est activée, nous ajoutons la valeur 1 au compteur. Le compteur est donc incrémenté jusqu'à la valeur limite. L'appel de la fonction "wait" permet un temps d'attente entre chaque incrémentation. Enfin, l'instruction "return 0;" indique que la fonction principale ne revoie pas de valeur entière.

#include <conio.h> // Fichier d'en-tête pour l'instruction "_outp"

#include <stdio.h> // Fichier d'en-tête pour E/S standards

#include <time.h> // Fichier d'en-tête pour les instruction "clock_t" et "endwait"

 

   void wait ( int seconds ) //Fonction "Wait" (attente)

{

clock_t endwait;

endwait = clock () + seconds * 1 ;

while (clock () < endwait) { }

}

 

int main ( ) // Fonction principale

{

int i; // Variable de boucle

               int valeur; // Variable saisie au clavier

 

printf("Entrez une valeur limite: ");

               scanf ("%d", &valeur) ;  // Saisie de la variable "valeur"

 

 

                // Mise à 0 du compteur

               _outp (0x378, 00) ;

               _outp (0x378, 00) ;

 

 

                / / Comptage

for (i=0; i<valeur+1; i++)

{

_outp (0x378, 00);

_outp (0x378, 01);

    wait (1000); // Appel de fonction

}

 

return 0;

}




Accès au port avec DEBUG

Pour utiliser Debug, il convient d'ouvrir une fenêtre Dos. Pour cela, il suffit d'ouvrir le menu "Démarrer", puis "Exécuter" dans Windows. Tapez ensuite le mot clé "command". Cela à pour effet d'ouvrir la fenêtre Dos désirée. Il suffit de taper ensuite le mot clé "debug", qui lancera l'utilitaire concerné. La commande d'accès au port est presque semblable à l'instruction utilisée dans le programme C. La syntaxe est la suivante.

-o adresse hexadécimale du port Valeur à envoyer


Accès au port avec Debug

La capture d'écran ci-dessous montre un exemple clair, en affectant la valeur 5 au port parallèle. L'adresse hexadécimale de ce même port est 378.