Programación Del Puerto Paralelo
Enviado por Axochil • 4 de Diciembre de 2014 • 1.408 Palabras (6 Páginas) • 245 Visitas
El puerto paralelo se identifica por su dirección de I/O base y se identifica ante sistemas DOS por el número LPT. Cuando arranca la máquina, la BIOS chequea direcciones específicas de I/O en busca de puertos paralelos y construye una tabla de las direcciones halladas en la posición de memoria 40h:8h (o 0h:0408h). Esta tabla contiene hasta tres palabras de 16 bits. Cada palabra es la dirección de I/O base del puerto paralelo. La primera palabra corresponde a LPT1, la segunda a LPT2 y la tercera a LPT3. Hay que agregar que en DOS tenemos el dispositivo PRN que es un alias a uno de los dispositivos LPT (generalmente es LPT1, pero se puede cambiar con la orden MODE) Las direcciones estándar para los puertos paralelos son 03BCh,0378h y 0278h (chequeadas en este orden).
Desde el punto de vista del software, el puerto paralelo son tres registros de 8 bits cada uno, ocupando tres direcciones de I/O consecutivas de la arquitectura x86.
Acceso Directo al Puerto
El puerto, como se mencionó antes, consiste de tres registros de 8 bits ubicados en direcciones adyacentes del espacio de I/O de la PC. Los registros se definen relativos a la dirección de I/O base (variable IOBase) y son:
IOBase+0 : registro de datos
IOBase+1 : registro de estado
IOBase+2 : registro de control
• Registro de Datos (D)
Se puede leer y escribir. La forma de leer y escribir puertos con lenguajes de programación estándares se puede ver en la sección Acceso a los puertos. Escribiendo un dato al registro, causa que el mismo aparezca en los pines 2 a 9 del conector del puerto. Leyendo el registro, se lee el último dato escrito (NO lee el estado de los pines; para ello hay que usar un puerto bidireccional).
Nro.Bit 7 6 5 4 3 2 1 0 Descripción
x . . . . . . . D7 (pin 9), 1=Alto, 0=Bajo
. x . . . . . . D6 (pin 8), 1=Alto, 0=Bajo
. . x . . . . . D5 (pin 7), 1=Alto, 0=Bajo
. . . x . . . . D4 (pin 6), 1=Alto, 0=Bajo
. . . . x . . . D3 (pin 5), 1=Alto, 0=Bajo
. . . . . x . . D2 (pin 4), 1=Alto, 0=Bajo
. . . . . . x . D1 (pin 3), 1=Alto, 0=Bajo
. . . . . . . x D0 (pin 2), 1=Alto, 0=Bajo
Cuando se indica Alto o Bajo se refiere a la tensión de salida (~5V para el 1 físico y ~0V para el 0 físico, respectivamente). Esto es porque la lógica puede ser positiva (un 1 lógico equivale a Alto o 5V) o negada (un 0 lógico equivale a Bajo o 0V). Con respecto a esto debemos decir que para negar algo le anteponemos el carácter / (representando la barra que se coloca encima). El estándar es que las salidas sean LS TTL (low schottky TTL), aunque las hay que son de tipo OC (colector abierto). La corriente que pueden entregar (source) es de 2,6 mA máximo y pueden absorber (sink) un máximo de 24 mA. En el puerto original de IBM hay condensadores de 2,2 nF a masa. Las tensiones para el nivel bajo son entre 0 y 0,8V y el nivel alto entre 2,4V y 5V.
• Registro de Estado (S)
El registro de estado está en IOBase+1. Es de sólo lectura (las escrituras serán ignoradas). La lectura da el estado de los cinco pines de entrada al momento de la lectura. En la tabla siguiente los nombres de los pines se dejaron en inglés porque es como generalmente se identifican.
Nro.Bit 7 6 5 4 3 2 1 0 Descripción
x . . . . . . . S7 : Busy (pin 11), 0=Alto, 1=Bajo
. x . . . . . . S6 : Ack (pin 10), 1=Alto, 0=Bajo
. . x . . . . . S5 : No paper (pin 12), 1=Alto, 0=Bajo
. . . x . . . . S4 : Selected (pin 13), 1=Alto, 0=Bajo
. . . . x . . . S3 : Error (pin 15), 1=Alto, 0=Bajo
. . . . . x x x Sin definir
La línea Busy tiene, generalmente, una resistencia de pull-up interna. El estándar es que sean entradas tipo LS TTL.
• Registro de Control (C)
El registro de control se encuentra en IOBase+2. Es de lectura/escritura.
Nro.Bit 7 6 5 4 3
...