¿Cómo programar el Puerto Paralelo de la PC?

Salvador Macías Hernández

Última actualización Monday, 24 de September de 2007

 

 

Pines del Puerto Paralelo

 

     El adaptador del puerto paralelo de la PC es un conector DB25 hembra, como el que se muestra en la imágen de la izquierda. Generalmente está en la parte posterior de la PC. Tiene una forma como de trapezoide, lo que hace que sea imposible conectarlo incorrectamente, sin la ayuda de un martillo. La asignación de Pines es como se muestra en la imagen que se muestra a continuación. Hay que recordar que la mayoría de las aplicaciones que se le da a este puerto paralelo es para comunicar la PC con una impresora.




Pin Descripción Pin Descripción
1 Strobe 11 Busy
2 Data 0 12 Paper Empty
3 Data 1 13 Select
4 Data 2 14 Auto Feed
5 Data 3 15 Error
6 Data 4 16 Initialize Printer
7 Data 5 17 Select Input
8 Data 6 18 al 25
9 Data 7 Ground
10 ACK


 


Puertos del Adaptador de la Impresora

     Para que el microprocesador de la computadora pueda comunicarse satisfactoriamente con la impresora, hace uso de tres registros y/o puertos. Con los cuales podemos acceder a 8 bits bidireccionales (dependiendo de la tecnología del puerto paralelo de la computadora),  5 bits de entrada, y 4bits de salida. 

 

Data Port 378


Status Port 379


Control Port 37A

D7 Data 7
D7 Busy
D7
Reserved
D6 Data 6
D6 Ack
D6
Reserved
D5 Data 5
D5 PE
D5 Direction
D4 Data 4
D4 Select
D4 IRQ Eneable
D3 Data 3
D3 Err
D3 Select Input
D2 Data 2
D2 IRQ
D2 INIT
D1 Data 1
D1
Reserved
D1 AutoFeed
D0 Data 0
D0
Reserved
D0 Strobe

  * Si Direction =1 => Recibe Dato

  * Si Direction =0 => Saca Dato

 

Programación

     El puerto paralelo se puede programar en varias plataformas como: Basic, C++, C&, Visual Basic, etc.  Pero nosotros en este pequeño tutorial, vamos a programarlo utilizando lenguaje ensamblador. Que es el lenguaje propio de las máquinas. Puesto que vamos directamente a los nemónicos, lo que se conoce como lenguaje de bajo nivel. Con los lenguajes de bajo nivel tenemos muchisimas menos restricciones, de lo que tendríamos con  un lenguaje de alto nivel. Claro que como dice la segunda ley del control: "Nada es gratis en esta vida", y así como obtenemos muchas más posibilidades utilizando un lenguaje de bajo nivel, también se hace más complicada la programación.

 

     Antes de programar, vamos a hablar un poco sobre los sistemas operativos. Desde hace ya varias décadas, Microsoft ha tenido el monopolio de los sistemas operativos para PC. Los primeros sistemas operativos de microsoft eran en base texto (MS DOS), después el mismo Microsoft que vendía el MS DOS, creo un programa que era como un sistemita operativo en ambiente gráfico, que para poder funcionar utilizaba el MS DOS. A este programa se le llamó Windows. En lo personal, mi primer sistema operativo fue el MS DOS 3.3 y mi primer Windows fue la versión 2.0. En julio de 1993, Microsoft lanzó su primer Windows para trabajo en grupo. El Windows NT 3.1, el primer intento de llevar la cultura del trabajo en grupo a las pequeñas empresas. Y cabe mencionar que ese windows no tuvo mucho auge, por que en ese mismo año se lanzó el Windows 3.11 para trabajo en grupo. El cual tenía más funciones de red. El primer Windows que fue independiente del MS DOS fue el Windows 95. Este windows rompió de forma tajante la forma de trabajar en las computadoras. Puesto que todos los programas de la competencia estaban hechos para el MS DOS y Microsoft no liberó su código para que los demás desarrolladores de software pudieran adaptar a la perfección sus programas. Además en ese entonces, todas las computadoras de marca, venían con Windows y Office integrado. Y no había de otra opción. Hasta un año después que Lotus sacó su Smart Suite. Pero para ese entonces la gente se había acostumbrado al Office. En 1996 se empezó a popularizar el Windows NT. Que ya era un sistema operativo totalmente diseñado  para usarse en redes corporativas. En donde la seguridad de la información se volvió crítica. Y por tanto se enfocó la atención en controlar el acceso a cada puerto de la máquina. En ese entonces, teníamos dos tipos de sistemas operativos, los diseañados para grandes empresas con redes corporativas (Sistemas Operativos NT) y el sistema operativo diseñado para los usuarios domésticos o de pequeñas empresas, donde no existía riesgo de fuga de información. Por tanto no se cuidaba de la seguridad de los puertos. Y así tuvimos dos tipos de sistemas operativos en las máquinas de los usuarios hasta que salió Windows XP puesto que para este entonces, el internet ya es cosa de todos los días y está accesible en casi todos los hogares. Por tanto, tenemos dos tipos de sistemas operativos, los de Windows 95 y los NT. 

Sistemas Operativos Win95 Sistemas Operativos NT
Windows 95 Windows NT Workstation 3.5
Windows 98 Windows NT Workstation 4.0
Windows 98 Second Edition Windows 2000 Professional
Windows Millennium Edition (Windows Me) Windows XP
  Windows XP Professional
  Windows XP Home Edition
  Windows XP 64-bit Edition
  Windows XP Media Center Edition

 

      Bueno y ahora que ya sabemos que existen dos clases de Sitemas Operativos vamos a decirles que para que puedan utilizar el puerto paralelo a su antojo, y por los métodos que vamos a describir aquí, necesitan tener un sistema operativo tipo Win95, o bien van a tener que bajar el driver UserPort, para poder acceder a los puertos.

 

      Lo primero que vamos a hacer es, entrar a Debug, para ello hay que entrar al MS DOS o simbolo del sistema: Inicio \ Programas \ Accesorios \ MSDOS

     Y aparecerá una ventana con el prompt del DOS:

      Ahora hay que ejecutar Debug. El prompt de debug es un guion, lo que quiere decir que necesitamos darle un comando a ejecutar. El comando para leer un puerto es "i" y a continuación se escribe la dirección del puerto. Por ejemplo: para saber el valor del puerto paralelo hay que escribir "i 378" y a continuación, Debug nos devolverá el valor del puerto. El comando para sacar un dato por un puerto es el comado "o" y requiere de la dirección del puerto y del valor a mandar. Por ejemplo: para poner en el puerto paralelo un 0Ah habría que escribir "o 378 0A". Para salir de debug hay que poner el comando "q" de Quit. Y para regresar a windows hay que teclear en el prompt del DOS "Exit". 

RESULTADO OBTENIDO

Data 7 Data 6 Data 5 Data 4 Data 3 Data 2 Data 1 Data 0
Pin 9 Pin 8 Pin 7 Pin 6 Pin 5 Pin 4 Pin 3 Pin 2
0 0 0 0 1 0 1 0

     Entonces para el ejemplo de la pantalla anterior, la primera instrucción (i 378) fue leer el puerto paralelo. Y el valor que tenía en ese entonces fue FF (11111111), enseguida se le instruyó para que mandase el valor de 0A al mismo puerto (o 378 0A), y finalmente verificamos que sí lo haya mandado, leyendo el valor del puerto (i 378) y ahora el valor que tienen es el de 0A. Para salir al MS DOS le pusimos una Q y para regresar a windows le pusimos Exit. Y entonces si medimos el voltaje de los pines del 2 al 9 del puerto paralelo vamos a ver que tendrémos un byte con el valor 0A así como se muestra en la tabla anterior.

Primer Experimento

     Vamos a conectar unos LED's a la salida del puerto paralelo, para aprender de una manera más sencilla, las ventajas del puerto paralelo. Lo primero que vamos a hacer, es comprar o elaborar una extensión de dicho puerto. Para así poder programar y observar los cambios al mismo tiempo.  Y también vamos a comprar un conector 

DB25 Macho, con agujas para soldar y sin cubierta. Así como se muestra en la figura. Van a cortar 18 cablecitos de aproximadamente 10 cm de largo. Se va a soldar del pin 18 al 25 entre sí y van a sacar un cablecito, a este cablecito, deben de pintarlo de color negro. Puesto que nos va a indicar que es la tierra de la interfase. Después van a soldar los 17 cablecitos restantes. Verifiquen que ningún cablecito está haciendo contacto con otro. Verifiquen que no exista ningún corto circuito. Y por último hay que recubrir la zona de soldadura con silicón. Para que en un futuro, los alambres no se muevan y se vayan a quebrar.






             

 

 Luego hay que conectarle un BUFFER para no exigirle mucha corriente a la computadora, recomiendo que se use el 74LS245. Tengan mucho cuidado en como conecectarlo y en especificar bien la dirección (de A B; o de A B). Y a ese mismo vamos a conectarle las entradas de un display de siete segmentos. Recuerda conectarle una bateria de 5 volts o bien tres pilas AA de 1.5v en serie (4.5 en total) para alimentar el integrado. Procura no usar un eliminador de baterías, puesto que tendrá ruido y algunos dan más voltaje del que deberían (sin carga), y no vayas a quemar tu circuito, o peor aún, tu puerto paralelo.

Pincha en la imágen para verla más grande

Si conectas el display de siete segmentos de la siguente manera:

Buffer A8 A7 A6 A5 A4 A3 A2 A1
Display 7 Seg. a b c d e f g p

 

Podrías desplegar tus iniciales en el display como en el ejemplo siguiente:

Letra a b c d e f g p Hex Comando
S 1 0 1 1 0 1 1 0 B6 Out 378 B6
M 1 1 0 0 1 1 0 0 CC Out 378 CC
M 1 1 1 0 0 1 0 0 E4 Out 378 E4
H 0 1 1 0 1 1 1 0 6E Out 378 6E

El resultado esperado sería el siguiente:

 

 

 

Bibliografía

[1] Thom Hogan; The Programer's PC SourceBook; 7.086 Printer Adapter I/O Port Usage, pág 7-75. Microsoft Press [2] Thom Hogan; The Programer's PC SourceBook; 7.086 Printer Adapter I/O Port Usage, pág 7-75. Microsoft Press

[3] Lakeview Research home; Parallel Port Central; http://www.lvr.com/parport.htm#Programming

[4] Microsoft; Windows Desktop Products History; http://www.microsoft.com/windows/

WinHistoryDesktop.mspx

[5] Víctor R. González; El Puerto Paralelo del PC; http://www.cpr2valladolid.com/tecno

/cyr_01/control/puerto_paralelo.htm

[6] PC-ABC'S PLUS!; Parallel Port; http://www.pcabcs.com/realtour/parallel_port.htm

[7] Alberto Pacheco; Puerto Paralelo; http://pantera.itchihuahua.edu.mx/apacheco

/expo/view.php?f=asm_31#page6