Logiciels    Wiki     Programmation     Electronique     Projets     Auteur 
Retour : Accueil > Programmation > Systeme

Programmation du port parallèle

Présentation

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.

Il existe différents types de liaison parallèle, définies dans le standard IEEE 1284 : 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 0D0
bit 1D1
bit 2D2
bit 3D3
bit 4D4
bit 5D5
bit 6D6
bit 7D7
Registre d'état
bit 3 Error
bit 4 Select
bit 5 Paper end
bit 6 Acknowledge
bit 7 Busy
Registre de contrôle
bit 0Strobe
bit 1Autofeed
bit 2Initialize
bit 3Select input
bit 4Autorisation d'interruption
bit 5direction 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.

Programmation

Il ne vous reste plus ensuite qu'à lire et écrire dans ces registres à ces adresses pour commander directement les lignes du port parallèle.
Ceci peut se faire de différentes manières.

Langage haut niveau

L'accès aux différents ports est pris en charges dans certains langages :

Langage Lecture sur un port Ecriture sur un port
Basic valeur = INP(adresse_port)
OUT(adresse_port),valeur
Turbo-Basic
QuickBasic
valeur = INP(adresse_port)
OUT adresse_port,valeur
C / Borland C++
valeur = INPORT(adresse_port)
valeur = INPORTb(adresse_port)
OUTPORT(adresse_port,valeur)
OUTPORTb(adresse_port,valeur)

Turbo-Pascal
Delphi 1
valeur := PORT[adresse_port]
PORT[adresse_port] := valeur


Cependant les dernières versions de Delphi et C++Builder ne disposent pas d'instructions dédiées, et on est alors obligé de recourir à l'assembleur.

Assembleur

Pas de panique ! Ce n'est pas si difficile que ça pour cette application, et je présenterai d'ailleurs sûrement un petit cours d'initiation à l'assembleur, mais en attendant voici les fonctions toutes faites dans les deux langages. Il suffit de copier ces fonctions dans votre code et de les utiliser comme n'importes quelle autre fonction :


Delphi :

Function lire_port(adresse_reg: Word): Byte;
Begin
  Asm
    mov DX,adresse_reg
    in AL,DX
    mov Result,AL
  End;
End;
  
Procedure ecrire_port(adresse_reg: Word; valeur: Byte);
Begin
  Asm
    mov DX,adresse_reg
    mov AL,valeur
    out DX, AL
  End;
End;


C++Builder :

unsigned char lire_port(unsigned short adresse_reg)
{
  asm
  {
    mov DX,adresse_reg
    in AL,DX
    mov Result,AL
  }
}

void ecrire_port(unsigned short adresse_reg, unsigned char valeur)
{
  asm
  {
    mov DX,adresse_reg
    mov AL,valeur
    out DX, AL
  }
}

Le mot clé 'asm' informe le compilateur que les instructions qui suivent sont en assembleur, l'instruction 'mov' sert à copier la deuxième valeur dans la première, 'DX' et 'AL' sont des registres système, 'in' copie la valeur du port d'adresse DX dans AL et 'out' copie la valeur de AL dans le port d'adresse DX.

Malheureusement depuis Windows XP, l'accès direct aux registres systèmes est interdit. Il est alors nécessaire d'utiliser une DLL.

Utiliser une DLL

Par exemple la DLL nommée DllPortIo devrait vous permettre d'accéder aux ports souhaités. Je n'ai pas encore testé personnellement cette solution, mais elle semble être reconnue et vous trouverez à partir de votre moteur de recherche favori toutes les informations nécessaires à son utilisation.

Conclusion

Vous êtes désormais prêt à utiliser le port parallèle sous Windows, que vous pourrez par exemple utiliser pour vos montages électroniques. Vous pouvez ainsi voir dans la partie Electronique des schémas d'interfaces pour le port parallèle.


Retour : Accueil > Programmation > Systeme > [haut]
 Logiciels    Wiki     Programmation     Electronique     Projets     Auteur 


Vie privée