Autres liens concernant ce sujet:
  • Bus d'extension
  • Port série

  • Port USB
  • Interface SCSI
  • Accueil Forum Imprimer Contact

    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 a é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éristiques 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.





    ContactFonctionE/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ête nécessaires sont d'abord déclarés. En commentaire, vous apercevez les fonctions pour lesquelles ces fichiers sont déclarés. Ce programme est constitué d'une fonction chargée de ralentir le signal du port parallèle, afin qu'il 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 de Shell. Pour cela, il suffit d'ouvrir le menu "Démarrer", puis "Exécuter" dans Windows. Tapez ensuite le mot clé "command". Cela a pour effet d'ouvrir la fenêtre de shell 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.




    Ce manuel est gratuit mais n'est pas libre de droits.
    © J.BAUMANN