EL PUERTO PARALELO 

       En el conector DB-25,que es la conexión del puerto paralelo encontramos 25 pines, de ellos 8 son para salida de datos (bits de DATOS), estos son únicamente modificables a través de software, y van del pin 2 (Dato 0) al pin 9 (dato 1). 
       Otros 5 pines son de entradas de datos (bit de ESTADO), únicamente modificables a través del hardware externo, estos pines son 11,10,12,13,15 del mas al menos significativo (EL ORDEN SI IMPORTA), a la hora de obtener datos por estos registros tengamos en cuenta que obtendremos 8 bit y que los 3 menos significativos (en binario los 3 de la derecha)los pone el sistema, pues están reservados. Que el pin 15,es inverso, y por lo tanto da un valor negado, contrario al que reciba. 
4 pines mas, los de control (bits de CONTROL) numerados del más significativo al menos, 17, 16,14,1, Que son bidireccionales y que por tanto se pueden modificar tanto por software como por hardware. Observemos que los pies 17,14 y 1 son inversos, con lógica negativa, y que al igual que en el caso anterior dan el resultado contrario al que reciben 
por últimos tenemos los pines del 18 al 25, que son la masa. En nuestros circuitos utilizamos normalmente el 25, pero su utilización es indiferente. 

        La dirección del Puerto Paralelo la podemos localizar en la posición $40: $008 de memoria y el resultado será, recogido en una variable será la dirección del bus de DATOS, tenemos 3 resultados comunes: 
 
3bc (Hex.)
Si disponemos de una tarjeta de vídeo monocroma MDA con el Puerto paralelo incorporado, estas tarjetas se utilizaban antes.
378 (Hex.)
Actualmente él mas utilizado.
278 (Hex.)
En caso de disponer de un segundo puerto.

        La BIOS se encarga al poner en marcha nuestro PC de detectar los puertos de impresora, lo hará siguiendo la tabla de arriba, y ordenándolos de mayor a menor, así pues en caso de disponer de los 3 puertos, la dirección 3bc seria marcada como LPT1, la 378 como LPT2 y la 278 como LPT3. 
        Una vez obtenida la dirección del bus de datos, sumaremos a esta dirección +1 para obtener el bus de ESTADO, y +2 para obtener el bus de CONTROL. 

 

 
 
 
SORGO I.D.
I/O PORT
I/O PORT
I/O PORT
DATA
3BC 
378
278
STATE
3BD
379
279
CONTROL
3BE
37A
27A

        La tensión (V) de salida es de 5v c.c. y 0,5 mA . Estas características nos permite utilizar la tecnología TTL para proyectos externos pensados para este puerto. 
 

    -Esquema para el Bus de DATOS 

Salida de Bus de Datos

     - SALIDAS.PAS program
Program Salidas ; 
    Uses crt ; 
     Var 
       Salida,DatoSalida: Integer; 
    Begin 
      Salida:=MenW [$040:$008] ;{get the parallel port position} 
           For DatoSalida:= 0 to 255 do Begin 
                Port [Salida]:= DatoSalida; {send data to port} 
                Delay (1000); 
          End; 
      Port [Salida]:=0; {release data } 
      Repeat Until Keypresset; 
End. 

 
 
 

    -Esquema para el Bus de ESTADO 

Entradas del Bus de Estado

       - ENTRADAS.PAS program
Program Entradas ; 
  Uses crt ; 
  Var 
     Salida,Entrada,DatoEntrada: Integer; 
   Begin 
      Salida:=MenW [$040:$008] ;
      Entrada:=Salida +1 ;{get de STATE bus position } 
         Repeat 
             DatoEntrada:= Port [Entrada]; {get data } 
             Write (DatoEntrada); 
        Until Keypresset; 
End. 
 

     -Esquemas Bus de CONTROL 

Salidas del Bus de Control

       - ControlS.pas program
Program ControlS ; 
  Uses crt ; 
  Var 
      Salida,Control,DatoSalidaControl: Integer; 
  Begin 
     Salida:=MenW [$040:$008] ; 
     Control:=Salida +2;{get the Control bus direction } 
          For DatoSalidaControl:= 0 to 255 do Begin 
            Port [Control]:= DatoSalidaControl; {send data} 
            Delay (1000);
          End; 
    Port [Control]:=0;   Repeat Until Keypresset; 
End. 
 

       - ControlE.pas program

Entradas del Bus de Control
  Program ControlE ; 
   Uses crt ; 
   Var 
      Salida,Control,DatoEntradaControl: Integer; 
  Begin 
       Salida:=MenW [$040:$008] ; 
       Control:=Salida +2 ;
           Repeat 
              DatoEntradaControl:= Port [Control]; {get data} 
              Write (DatoEntradaControl);{Remenber inverted bits} 
          Until Keypresset; 
End. 
 
por Necro_
www.sorgonet.com