Está en la página 1de 6

ACCESO A LOS PUERTOS.

Para el control de estas líneas utilizamos tres puertos que están


direccionados según la siguiente tabla:

Dirección Dirección
Puerto
LPT1 LPT2
Datos 378H 278H
Estado 379H 279H
Control 37AH 27AH

Con estas dos tablas podemos modificar o leer cualquiera de las líneas del
puerto paralelo mediante el uso de las instrucciones de acceso a puerto, para
C++ estas son outportb e inportb, para Delphi no hay, por lo que tendrás que
usar los dos procedimientos siguientes:

// Envia el valor almacenado en num a puerto.


Procedure EnviaByte(puerto:word;num:Byte);
begin
asm
Mov DX,puerto
Mov AL,num
Out DX,AL
end;
end;

// Lee el valor actual de puerto.


Function RecibeByte(puerto:word):Byte;
begin
asm
Mov DX,puerto
IN Al,DX
Mov @Result,Al
end;
end;

EJEMPLO.

Formas de conectar el puerto paralelo a diversos dispositivos de una forma


muy sencilla.

Para trabajar con el puerto paralelo, lo primero que tienes que hacer, es
comprobar que la configuración de la BIOS este modo SPP ( salvo que tengas
algún dispositivo, que no sea una impresora, conectado al puerto paralelo que
haya variado la configuración por defecto, el puerto estará en modo SPP)

Primero necesitamos un cable centronics, preferiblemente con la carcasa


desmontable ( como la de la foto ) para saber cada cable a que pin esta
conectado, si no dispones de carcasa desmontable, puedes cortarle el conector
y con el tester ir midiendo la continuidad para saber cada cable a que pin
corresponde o comprar un conector centronics para enchufarlo al cable y
disponer así del acceso a los pines.

Como ejemplo de control con el puerto paralelo haremos un circuito muy


simple que nos permitirá estudiar, tanto las funciones de entrada, como de
salida. En las siguientes imágenes se puede ver los esquemas del circuito de
entrada y del de salida y una foto del circuito en el que están integrados los dos
esquemas .

Como se aprecia en el esquema, el circuito utiliza una línea de salida ( D0 )


para encender/ apagar el diodo LED y utiliza una de las líneas de entrada
( Busy ) para leer el estado de un pulsador ( en el esquema también se utiliza la
línea de salida D1 para poder alimentar la resistencia de pull-up del pulsador,
esto lo hacemos para no tener que utilizar una fuente externa de 5v solo para
alimentar dicha resistencia). Vamos a estudiar el esquema de control de la
línea de salida y el de control de la línea de entrada por separado.

Control de una línea de salida: Primero tenemos que determinar que línea
del puerto paralelo vamos a utilizar. Como la señal es de salida, buscamos en
la tabla superioruna línea que sea de este tipo ( lo mejor es utilizar las líneas
del bus mientras tengamos ), por ejemplo, utilizamos la línea D0 que
corresponde al pin 2 del conector D-25. Cogemos esta línea y la conectamos a
un diodo LED ( los LED tienen polaridad, si no lo pones en la posición correcta
no se encenderá ) y este, a través de una resistencia para limitar la intensidad
de 330 oh, lo conectaremos a GND que es el pin 18 del conector D-25 ( GND
son de la línea 18 a la 25. Cojo la 18 por azar ).

Una vez el circuito esta montado conectamos el cable al puerto paralelo y


encendemos el PC.
Mirando la tabla superior sabemos que D0 es el bit 0 del registro de Datos
cuya dirección, según usemos lpt1 o lpt2, esta en la tabla de puertos. Si
utilizamos lpt1, solo hace falta hacer outportb(0x378,1) o EnviaByte($378,1)
para encender el Led y outportb(0x378,0) o EnviaByte($378,0) para apagarlo
desde un compilador de C, o Delphi.

De la misma forma que hemos controlado este led podríamos controlar, por
ejemplo, un micro relé, un transistor, un optoacoplador o cualquier tipo de
dispositivo que se pueda controlar mediante una señal digital de tipo TTL con
una corriente de salida máxima de 20mA (este dato no es muy fiable aunque,
en principio, la mayoría de los puertos paralelos pueden suministrar esta
corriente por cada línea ).

Detección del estado de una línea de entrada: Primero, como en el caso de


la línea de salida, determinaremos que línea utilizaremos como señal de
entrada, por lo que miraremos la tabla superior y buscaremos una línea que
sea de este tipo, por ejemplo Busy (esta línea tiene la peculiaridad de que esta
internamente invertida por hardware, es decir, si conectamos 5v en esta señal
leeremos un 0 en vez de un 1 y si conectamos la línea a GND leeremos un 1
en vez de un 0. En todas las demás líneas, esto no ocurre y 5v se lee como 1 y
0v se lee como 0).

Una vez el circuito esta montado conectamos el cable al puerto paralelo y


encendemos el PC.

Mirando la tabla superior sabemos que Busy es el bit 7 del registro de


Estados cuya dirección, según usemos lpt1 o lpt2, esta en la tabla de puertos.
Si utilizamos lpt1, solo hace falta crear una variable de tipo byte, por
ejemplo, DatoEntrada y asignarle el valor del puerto mediante las funciones
inportb(0x379) o RecibeByte($379) desde un compilador de C, o delphi. El
estado del pulsador lo determinara el estado del bit 7 de la
variable DatoEntrada.

Programa de control: Como hemos visto para controlar las líneas


utilizaremos un compilar de en un lenguaje de alto nivel (C++, VB, Delphi,
etc..), lo mejor para que sea compatible con todas las versiones del windows
( ver drivers del puerto paralelo ), es utilizar un driver que nos permita el acceso
a los puertos aunque estemos utilizando XP, NT o 2000, para ello
descargaremos e instalaremos el driver WinIO ( ver sección drivers del puerto
paralelo ) y copiaremos los ficheros WinIO.sys, WinIO.dll y WinIO.dvx ( ficheros
del directorio "Release" ) en el mismo directorio que nuestro exe. En nuestro
programa tenemos que incluir las siguientes funciones:

• Nada mas iniciarse el programa, este ha de hacer una llamada a la


función InitializeWinIO. Esta inicializará las librerías y permitirá al
programa acceder libremente a los puertos.
• Justo antes de finalizar el programa tiene que hacer una llamada
a ShutdownWinIO, que liberara las librerías y recursos asociados.
Solo con la inserción de estas dos llamas en nuestro programa podremos
hacer llamadas a las funciones de acceso a puerto libremente.

Ejemplo de control del puerto paralelo en delphi

Aislamiento del PC: Para evitar que un fallo en el diseño de nuestro circuito
pueda estropearnos el ordenador es muy importante aislar las líneas del puerto
paralelo. La forma más inmediata de realizar esto es mediante el uso de un
buffer de tipo 74LS244, pero si queremos un aislamiento mayor, aunque
perdamos algo de prestaciones en velocidad de conmutación, utilizaremos
optoacopladores. En la imagen siguiente hay un esquema de como quedaría
un circuito optoacoplado para una línea de salida y otro para una línea de
entrada.

DRIVERS DEL PUERTO PARALELO PARA WINDOWS NT, XP Y 2000.

Si trabajas en windows 95/98 no encontrarás ningún problema en acceder a


los puertos, pero si estas bajo window NT, XP o 2000 necesitarás un driver que
habilite el acceso a puertos, Para solucionar este inconveniente te doy dos
opciones:

• Si es una aplicación ya hecha, tienes la página www.beyondlogic.org en


internet, en donde, además de encontrar información sobre esta
problemática, podrás encontrar en la barra azul del menú, la opción
"Device drivers" y dentro el driver Porttalk versión 2.2 en el fichero
porttalk22.zip. Este driver permite, mediante el programa allowio.exe
( que funciona en MS-DOS) y un fichero *.bat, que tu aplicación acceda
a los puertos como si estuviera en windows 95/98.
• En la pagina www.internals.com encontrarás el driver WinIO2.2, que te
permite acceder a los puertos desde nuevas aplicaciones basadas en
Delphi, Visual C++ o Visual Basic.Algunos de los ejemplos que tienes en
estas paginas utilizan este driver.

Opción 2

UserPort es un controlador de modo kernel para Windows NT/2000/XP que


proporciona el modo de usuario el acceso a programas de I / O Ports. Esto
hace que sea posible acceder al hardware directamente desde un ejecutable
normal de la misma manera como en Windows 95/98/ME. Este controlador no
funciona en Windows 95/98/ME y no hay realmente ninguna necesidad de
funcionar de todos modos porque los puertos I / O siempre se conceden a los
programas de modo de usuario en estos sistemas operativos.

El conductor puede ser utilizado para los fines siguientes:

*Para ejecutar el software en Windows NT/2000/XP que normalmente sólo se


ejecuta en Windows 95/98/ME.
*Para acceder fácilmente a hardware como el puerto paralelo y otros puertos
E/S.

Conclusiones

En la investigación se pudo notar que hablando de estos temas al menos en


interned no hay demasiada información ahora seria cuestión de checar en
algunos libros, pero tomando los ejemplos investigados notamos que para el
manejo de los puertos al menos en cuanto es de puerto paralelos se necesitan
configurar para que de una forma te permita enviar datos e mi caso particular
es my fácil utilizar USERPOTR ya que en alguna ocasión lo use y activando
los puertos ya solo se realiza el programa en el lenguaje de nuestro agrado
para mandar datos a algún dispositivo.

Bibliografía

http://www.mcbtec.com/puerto_paralelo_pc.htm

http://hem.passagen.se/tomasf/UserPort/
TECNOLÓGICO DE ESTUDIOS SUPERIORES DE
ECATEPEC

ALUMNO:
FOSADO GALICIA GUSTAVO

PROFESOR:
DAVID GASPAR GARCÍA

MATERIA:
INTERFACES

TAREA:

“PROGRAMAS PARA EL MANEJO DE PUERTOS”

GRUPO:
5652

FECHA:
25/10/2010

También podría gustarte