Utilizando el famoso circuito periférico de intel 8255 como interfaz en el puerto paralelo dispondremos de 24 líneas que pueden ser programadas como entradas y salidas básicas o modos bidireccionales de transferencia de datos. Las características más importantes del circuito son las siguientes:
-
24 líneas de E/S programables
-
Compatible con niveles TTL.
-
Control Set/Reset sobre cualquier línea.
Si empleamos su versión en SMD se puede incluso alojar el circuito dentro del encapsulado del conector al puerto paralelo de 25 pines tipo DB. Este chip, básicamente tiene tres modos de funcionamiento: Modo 0, con entradas salidas básicas, Modo 1 ( Entradas salidas strobed ). En este modo permite hacer la transferencia de datos hacia o desde una puerta seleccionada, junto con las señales de control necesarias para conseguir una transferencia con "hadshaking". Y por último tenemos el Modo 2 ( Bus bidireccional strobed). Este tipo de configuración permite la transmisión de datos en los dos sentidos, como si de un bus clásico de datos se tratase. La transmisión se controla con las correspondientes señales de control para modo "handshaking". Este modo puede ser utilizado para conectar dispositivos de memorias, eprom, eeprom, flash, rom, etc. Yo utilizo este dispositivo para las pruebas iniciales de multitud de periféricos ( prácticamente todo lo que aguante TTL ) y disponer de una manera rápida y sencilla de programar, aprovechando la potencia matemática del PC. Después decido en qué hardware implementar el proyecto final.
Para más información acerca del 8255 pulsar aquí.

Fig. 1. Diagrama de bloques interno.
En la figura 2 podemos apreciar el esquema de conexión al PC. El puerto paralelo debe de ser activado en la bios del ordenador en modo bidireccional. Funciona perfectamente en modo EPP tanto en MS-DOS como todos los Windows. En caso de que no aparezca este modo de funcionamiento hay que probar los otros modos de funcionamiento que pueden aparecer según el tipo y la edad del bios como EPP, ECP o ECP/EPP. El modo SPP ( estándar paralel port ) no debe ser utilizado nunca pues es el modo más sencillo y no trabaja en modo bidireccional.
He utilizado un conector macho de 40 pines de disco duro para interconectar los perifericos a este interfaz. No es necesario el uso de este conector, podéis usar el que queráis, yo simplemente reciclo los que dispongo. Las numeraciones del conector en el esquema respetan la numeración estándar del mismo que aparece en la figura 4.

Fig. 4. Numeración de conexiones: estándar IDE.
Programación del dispositivo.
Programación en Turbo C++ 3.0 sobre MS-DOS para reciclar viejas placas base.
Para programar sobre entorno MS-DOS en turbo C 3.0 por ejemplo, se deben de incluir las siguientes sentencias en el fichero fuente. Hasta Windows 98 funcionan perfectamente los puertos, incluso si se abre una ventana de comandos dentro de windows. A partir del 98 se tiene que usar un controlador específico de puerto paralelo y programar sobre entorno windows con el Builder, Delphi, y visual basic. La mayoría de la gente piensa que programar en ms-dos está pasado de moda, sin embargo, muchas veces no se requiere una potencia muy elevada de máquina lo que hace posible reciclar muchas viejas placas base. Los ordenadores personales de hoy tienen una potencia de cálculo impresionante, el problema es que los sitemas operativos no se han optimizado y derrochan todos los recursos hardware. Para que nos hagamos una idea, la lanzadera espacial de la nasal utiliza procesadores pentium en sus sistemas.
#include <stdio.h>
#include <conio.h>
#include <dos.h>
#include <stdlib.h>
#define DATOS 0x378
#define ESTADO 0x379
#define CONTROL 0x37A
#define ECR 0x378+0x402
#define ModoBidireccional outp(0x378+0x402,128);
#define Lectura outp(CONTROL,inp(CONTROL) | 32);
#define Escritura outp(CONTROL,inp(CONTROL) & 223);
|
La cabecera corresponde a las librerías estándar de C. Define las constantes correspondientes al puerto paralelo del ordenador. La línea ECR es la dirección del puerto utilizada para conmutar entre modo salida y modo entrada para las ocho líneas físicas del conector db25, ( pin 2 al 9 ). La velocidad depende del ordenador. Se pueden alcanzar fácilmente 150 kb/s, más que suficiente para aplicaciones de media baja velocidad. En caso que se quieran otras velocidades mayores de transferencia deberemos reprogramar el puerto en el modo EPP y conseguiremos una tasa de transferencia de 2 Mb/s, pero esto es otra historia. El que desee recopilar más información deberá buscar información acerca del estándar IEEE1284 y el IEEE1284-1994.
Descargar Pia.cpp
Programación en entorno Windows. C++ Builder.
La programación en entorno windows se deberá realizar instalando los controladores Winio sobre C++ Builder o delphi. Estos controladores nos permiten el acceso al puerto paralelo y a la memoria. Todos los ficheros con nombre winio deberán estar almacenados en la carpeta de trabajo. Es necesario crear una librería llamada winio.lib para su funcionamiento en C++ Builder, pero para los que no se quieran complicar la vida, os dejo ya la librería creada dentro del fichero comprimido WinPia.zip.El fichero winio.chm explica detalladamente el proceso de instalación del controlador, de todas formas la aplicación debería funcionar correctamente al ejecutar el fichero project1.exe si la bios está configurada correctamente y los drivers bien instalados.
En cuanto a la velocidad, se han obtenido tasas de transferencia más bajas, que si se utiliza en modo ms-dos. Windows está prácticamente realizando trabajos en segundo plano y esto ralentiza la velocidad.

Fig. 5. Aspecto del programa WinPia.
El programa WinPia sirve para comprobar el correcto funcionamiento de la interfaz. El código fuente es libre, siempre que se utilice para fines didácticos. Podéis escribir y leer los puertos de la pia. Os recomiendo que programéis la pia con el código 128 que establece todas los puertos como salidas y comprobéis con un tester el valor correcto. Un valor de 255 en el puerto Pa por ejemplo, pondrá todas las salidas a nivel alto. En el datasheet del integrado viene como establecer este byte de control para manejar el dispositivo en todos sus modos posibles.
Descargar WinPia.zip