Le 23-02-2012, il est 10:31
Nombres de visiteurs : 112598
Il y a 3 personne(s) connecté(s)
Votre IP Public : 38.107.179.243
Actualisée le : 18-02-2011
By : - Le Bars Yann - Lesconil
Valid HTML 4.01 Transitional CSS Valide !
   Programmation du port parallèle : Visual Basic 6
Ce programme en VB6 va vous permettre de controler le port parallèle de votre PC.
La DLL utilisée est "inpout32.dll".

Le port parallèle du PC est l'un des plus intéressants, par ses possibilités et sa simplicité de programmation.
En effet il ne nécessite aucun protocole de transmission (contrairement au port série), et les niveaux électriques de ses broches varient entre 0 et 5V ce qui le rend compatible directement avec les composants de technologies TTL.
 

Le source du code est largement commentée. Pour modifier vos adresses de registres (si pas port standard) modifiez le fichier "pilotauto.ini".
L'interface du port de contrôle (37A par défaut) est présente mais n'est pas programmée pour éviter de "cramer" le port.(ce port est accèssible en lecture et écriture)

Il existe différents types de liaison parallèle, définies dans le standard IEEE 1284 :

  • mode compatible (SPP, Standard Parallel Port) (unidirectionnel)

  • mode 4 bits, ou NIBBLE MODE (unidirectionnel)

  • mode 8 bits, ou BYTE MODE (bidirectionnel)

  • mode EPP (Enhanced Parallel Port, port parallèle étendu) (bidirectionnel)

  • mode ECP (Extended Capability Port, port à capacités étendues) (bidirecionnel)

Ceux-ci sont pour la plupart paramètrables dans le BIOS (setup).
Le mode EPP est présent sur la plupart des machines actuelles, et on le préférera si l'on désire avoir les 8 bits de données en entrée et sortie, ou on choisira le mode compatible SPP présent sur toutes les machines si on désire avoir les 8 bits de données seulement en sortie.

Outre ces 8 lignes de données, le port parallèle dispose également de 4 lignes de contrôle (sortie) et 5 lignes d'état (entrée).
 

Connecteurs

Voici la numérotation des broches des deux principaux connecteurs parallèles, SUB-D 25 broches du côté du PC et Centronics 36 broches du côté de l'imprimante :

 

connecteur SUBD25 mâle
 
connecteur Centronics mâle 

Et voici maintenant les brochages de ces connecteurs :

 

connecteur
SUB-D 25
connecteur
Centronics
Fonction Niveau de
repos
Direction Registre
1 1 Strobe 1 S contrôle
2 2 donnée D0 0 E/S donnée
3 3 donnée D1 0 E/S donnée
4 4 donnée D2 0 E/S donnée
5 5 donnée D3 0 E/S donnée
6 6 donnée D4 0 E/S donnée
7 7 donnée D5 0 E/S donnée
8 8 donnée D6 0 E/S donnée
9 9 donnée D7 0 E/S donnée
10 10 Acknowledge 1 E état
11 11 Busy 0 E état
12 12 Paper end 0 E état
13 13 Select 0 E état
14 14 Autofeed 1 S contrôle
15 32 Error 1 E état
16 31 Initialize 1 S contrôle
17 36 Select input 1 S contrôle
18-25 17, 33, 19-29 Ground
 

 

 

On retrouve bien 5 lignes en entrée, 4 en sortie, et les 8 lignes de données en entrée-sortie dans le cas d'un mode bidirectionnel.
 

Registres de commande

Ces lignes sont commandées directement par un bit, dans trois registres différents, comme précisé dans la dernière colonne, et dans le tableau suivant, et le niveau de repos correspond au niveau de la ligne lorsque le bit dans le registre est à 0, c'est à dire que si le niveau de repos est un le niveau de la ligne et le bit correspondant dans le registre sont inversés.

 

Registre de données
bit 0 D0
bit 1 D1
bit 2 D2
bit 3 D3
bit 4 D4
bit 5 D5
bit 6 D6
bit 7 D7
Registre d'état
bit 3 Error
bit 4 Select
bit 5 Paper end
bit 6 Acknowledge
bit 7 Busy
Registre de contrôle
bit 0 Strobe
bit 1 Autofeed
bit 2 Initialize
bit 3 Select input
bit 4 Autorisation d'interruption
bit 5 direction données
(0 = sortie, 1 = entrée)

Le bit 5 n'est bien entendu adressable que sur les ports bidirectionnels.
Différentes adresses peuvent exister pour les registres selon le système, le tableau suivant en présente les différentes possibilités (0x signifie que les valeurs sont en hexadécimal) :

 

port de données 0x956 0x3BC 0x888 0x378 0x632 0x278
port d'état 0x957 0x3BD 0x889 0x379 0x633 0x279
port de contrôle 0x957 0x3BE 0x89A 0x37A 0x634 0x27A

Cependant sur les systèmes actuels le port LPT1 se situe toujours à l'adresse 0x378 et le port LPT2 à l'adresse 0x278, mais pour en être sûrs vous pouvez suivre dans Windows : Panneau de configuration >> Système >> Gestionnaire de périphérique >> Ports (COM et LPT) >> Port imprimante (LPTx) >> Ressources >> Plage d'entrée/sortie qui vous indiquera les ports utilisés, et également les requêtes d'interruptions (IRQ) si vous désirez les utiliser (bit 4 du registre de contrôle), qui sont généralement IRQ7 pour LPT1 et IRQ5 pour LPT2.

Lignes de données (378h)

À moins que vous ne possédiez une interface parallèle étendue, ce registre n'est accessible qu'en écriture. L'écriture d'un octet dans ce registre place immédiatement les lignes D0-D7 aux niveaux demandés sur la prise. Il est une croyance populaire qui dit que les données ne deviennent valables en sortie que si la ligne STROBE est à l'état bas, mais il n'en est rien. Il n'y a pas de logique interne de ce type dans les interfaces parallèles.

7 6 5 4 3 2 1 0
* . . . . . . .  D7
. * . . . . . .  D6
. . * . . . . .  D5
. . . * . . . .  D4
. . . . * . . .  D3
. . . . . * . .  D2
. . . . . . * .  D1
. . . . . . . *  D0

Etat de l'imprimante (379h)

Ce registre, accessible uniquement en lecture, est l'image de l'état des lignes ERROR, SELECT, PE, ACK et BUSY. Il faut cependant remarquer que le bit 7 du registre (correspondant à l'image de la ligne BUSY) est inversé par rapport à l'entrée. Un inverseur est en effet présent entre la prise et le registre. Attention donc à ne pas se tromper.

7 6 5 4 3 2 1 0
* . . . . . . .  /BUSY (logique inverse)
. * . . . . . .  /ACK
. . * . . . . .  PE
. . . * . . . .  SELECT
. . . . * . . .  /ERROR
. . . . . * * *  Indéfini

Commande de l'imprimante (37Ah)

Ce dernier registre est accessible à la fois en lecture et en écriture. Les 4 premiers bits sont l'image des lignes StrOBE, AUTOFEED, INIT et SELECT IN (attention ici aussi aux inverseurs placés entre la prise et le registre). Le bit 4 autorise ou non le déclenchement d'une interruption lorsque ACK passe à l'état bas (c'est à dire quand l'imprimante valide la réception d'un caractère).

Le bit BIT CtrL n'a de sens que pour les ports bidirectionnels (EPP, ECP). En mettant ce bit à 1, le port est accessible en écriture.

7 6 5 4 3 2 1 0
* * . . . . . .  Inutilisées
. . * . . . . .  BID CtrL
. . . * . . . .  IRQ ENABLE
. . . . * . . .  SELECT IN (logique inverse)
. . . . . * . .  /INIT
. . . . . . * .  AUTOFEED (logique inverse)
. . . . . . . *  /STROBE  (logique inverse)