Guía rápida para gestionar el puerto paralelo del PC

Anuncio
Guía rápida
para gestionar
el puerto paralelo del PC
___________________
Descarga desde:
http://eii.unex.es/profesores/jisuarez/descargas/ip/guia_rapida_pp.pdf
José Ignacio Suárez Marcelo
Universidad de Extremadura
Escuela de Ingenierías Industriales
Avda. Elvas, s/n 06006 – Badajoz
Guía rápida para gestionar el puerto paralelo del PC
Índice
1.
Introducción _________________________________________________________ 3
2.
Características mecánicas _______________________________________________ 3
3.
Características eléctricas ________________________________________________ 4
4.
Direccionamiento del puerto paralelo ______________________________________ 5
5.
Registros del puerto paralelo. ____________________________________________ 7
ANEXO I – Programa de prueba del puerto paralelo ___________________________ 10
José Ignacio Suárez Marcelo
2
Guía rápida para gestionar el puerto paralelo del PC
1. Introducción
El puerto paralelo de un ordenador personal puede ser empleado para
comunicaciones entre el ordenador personal (PC) y un periférico. Aunque tradicionalmente
se ha empleado como puerto unidireccional de salida, por ejemplo para gobernar una
impresora, lo cierto es que también puede ser empleado en modo bidireccional, con lo que
no sólo se pueden enviar datos, sino también recibirlos desde un periférico externo. En esta
guía se describe de forma breve la programación (a nivel de registros) y las características
más importantes del puerto paralelo, con el fin de que sirva como referencia para el
establecimiento de una comunicación bidireccional con un dispositivo periférico externo.
2. Características mecánicas
El puerto paralelo de un PC se identifica mediante un conector sub-D hembra de 25
pines (DB25) como el de la figura 1. Las señales que en él intervienen reciben nombres
relacionados con la comunicación con una impresora (protocolo Centronics), pero en
realidad pueden ser programadas con total libertad por el usuario. En la tabla 1 se
describen cada uno de los pines del conector DB25 y el sentido de las señales (salida
significa desde el PC al periférico y entrada desde el periférico al PC).
Figura 1 Vista frontal del conector sub-D hembra de 25 pines correspondiente al puerto paralelo
de un PC
José Ignacio Suárez Marcelo
3
Guía rápida para gestionar el puerto paralelo del PC
Tabla 1
Descripción de los pines del puerto paralelo de un PC
N° PIN SÍMBOLO SENTIDO
INVERTIDA
DESCRIPCIÓN
POR HW
1
STROBE
E/S
SÍ
Validación de datos
2-9
DB[0..7]
E/S
–
Bus de datos de 8 bits
10
ACK
E
–
Acknowledge (Aceptó último carácter, si ACK = 0)
11
BUSY
E
SÍ
Ocupada (impresora ocupada si BUSY = 0)
12
PE
E
–
Paper End (sin papel, si PE = 1)
13
SLCT
E
–
Impresora seleccionada (si SLCT = 1)
14
XT
E/S
SÍ
Autofeed (siguiente línea automatica, si XT = 0)
15
ERROR
E
–
Error (error, si ERROR = 0)
16
INIT
E/S
–
Inicializar impresora (si INIT = 0)
17
SLCT IN
E/S
SÍ
Seleccionar impresora (si SLCT IN = 0)
18 – 25
GND
–
–
Masa de señal
E/S ⇒ En negrita, el sentido por defecto, cuando el puerto paralelo está en modo unidireccional
Invertida por HW, significa que la señal es invertida por la electrónica de la tarjeta.
3. Características eléctricas
Las señales que forman el puerto paralelo normalmente son compatibles con
niveles TTL (de 0 a 5 V), pero suelen tener muy poca capacidad de corriente (entre 6 mA y
20 mA aproximadamente, variando de un fabricante a otro). Debido a ello, es habitual usar
un buffer de salida si el dispositivo periférico tiene unos requerimientos de corriente
mayores.
José Ignacio Suárez Marcelo
4
Guía rápida para gestionar el puerto paralelo del PC
4. Direccionamiento del puerto paralelo
El puerto paralelo, como todos los interfaces del PC, dispone de un rango de
direcciones de E/S asignado para el direccionamiento de sus registros internos. Y como es
habitual también se identifica mediante una dirección base a partir de la cual se
encuentran direccionados el resto de registros de la interfaz paralelo. La BIOS (Sistema
Básico de Entrada/Salida), al encender el PC, determina el número de puertos que tiene
instalados el ordenador y les asigna una etiqueta (LPT1, LPT2 o LPT3) así como una
dirección base a cada uno de ellos. El rango de direcciones más habituales se muestran en
la tabla 2.
Tabla 2
Direcciones más habituales asignadas por la BIOS a los puertos paralelos del PC
ETIQUETA DIR. BASE DIR. FINAL
LPT1
0×378
0×37F
LPT2
0×278
0×27F
LPT3
0×3BC
0×3BF
Las direcciones base de E/S mostradas en la tabla 2 no siempre se asignan en el
orden indicado, sino que pueden variar de un ordenador a otro. Para saber realmente la
dirección base del puerto paralelo que se va a utilizar se puede proceder de varias maneras.
Una de ellas, muy simple, es entrar en la BIOS y mirar los puertos detectados y las
direcciones asignadas. Si no se desea entrar en la BIOS, sólo hay que esperar (tras el
análisis de la memoria y detección de periféricos: teclado, discos, etc.) a que aparezca esta
información en la tabla previa al inicio del arranque del sistema operativo que esté
instalado. De todas formas, aún habiendo leído las direcciones asignadas por la BIOS,
puede ocurrir que el sistema operativo cambie dichas asignaciones según su conveniencia.
Si se quiere realizar una detección por software, hay que saber que las direcciones base de
José Ignacio Suárez Marcelo
5
Guía rápida para gestionar el puerto paralelo del PC
E/S, compuestas por dos bytes, son almacenadas por la BIOS en las direcciones de
memoria indicadas en la tabla 3.
Tabla 3
Direcciones de memoria donde la BIOS almacena las direcciones de E/S asignadas a los puertos
paralelo
DIR. DE MEMORIA PUERTO
0×0000:0408
LPT1
0×0000:040A
LPT2
0×0000:040C
LPT3
A continuación se muestra un programa en lenguaje C para detectar los puertos
paralelo con sus direcciones asignadas.
#include <stdio.h>
#include <dos.h>
void main(void)
{
unsigned int far
unsigned int
int a;
*direccion;
puerto;
//puntero a dirección de memoria (ver tabla 3).
//dirección E/S del puerto paralelo (tabla 2).
direccion = (unsigned int far *)0x00000408; //apunta a la 1a entrada de la tabla 3.
for (a = 0; a < 3; a++){
puerto = *direccion;
//lee 2 bytes de la dirección de memoria.
if (puerto == 0) printf(“No se encontró puerto en LPT%d \n”, a+1);
else printf (“La dirección de E/S asignada a LPT%d es %Xh\n”, a+1, puerto);
*direccion++;
}
//apunta a siguiente entrada de la tabla 3.
}
José Ignacio Suárez Marcelo
6
Guía rápida para gestionar el puerto paralelo del PC
5. Registros del puerto paralelo.
Los registros más importantes del puerto paralelo son tres y se encuentran a partir
de la dirección base (ver tabla 4).
Tabla 4
Registros asociados al puerto paralelo del PC
REGISTRO DIRECCION
NOMBRE
DREG
BASE + 0
Registro de Datos
SREG
BASE + 1
Registro de Estado
CREG
BASE + 2
Registro de Control
− REGISTRO DE DATOS (DREG): (dir. BASE + 0)
Es un registro de 8 bits, normalmente de sólo escritura, aunque en modo
bidireccional también es de lectura. Aquí es donde se escriben o leen las líneas del bus de
datos DB[0..7].
REGISTRO DE DATOS (DREG) – BASE + 0
B7
B6
B5
B4
B3
B2
B1
B0
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
José Ignacio Suárez Marcelo
7
Guía rápida para gestionar el puerto paralelo del PC
− REGISTRO DE ESTADO (SREG): (dir. BASE + 1)
Es un registro de 8 bits de sólo escritura donde se puede leer el estado de las líneas
de entrada del puerto paralelo.
REGISTRO DE ESTADO (SREG) – BASE + 1
B7
B6
B5
B4
B3
B2
B1
B0
BUSY#
ACK#
PE
SLCT
ERROR#
IRQ#
–
–
Bits 0 y 1: reservados
Bit 2 (IRQ#): activa a nivel bajo, indica (si IRQ# = 0) que se ha producido una
interrupción por recepción de la señal ACK.
Bit 3 (ERROR#): activa a nivel bajo, indica (si ERROR# = 0) que ha habido un error en la
impresora.
Bit 4 (SLCT): activa a nivel alto, indica (si SLCT = 1) que la impresora ha sido
seleccionada.
Bit 5 (PE): activa a nivel alto, indica (si PE = 1) que la impresora se ha quedado sin papel.
Bit 6 (ACK#): activa a nivel bajo, indica (si ACK# = 0) que la impresora ha recibido un
carácter válido y que está preparada para el siguiente.
Bit 7 (BUSY#): activa a nivel bajo, indica (si BUSY# = 0) que la impresora está ocupada.
José Ignacio Suárez Marcelo
8
Guía rápida para gestionar el puerto paralelo del PC
− REGISTRO DE CONTROL (CREG): (dir. BASE + 2)
Es un registro de 8 bits de lectura y escritura donde se puede establecer o leer el
estado de las líneas de salida del puerto paralelo.
REGISTRO DE CONTROL (CREG) – BASE + 2
B7
B6
B5
B4
B3
B2
B1
B0
–
–
DD
IRQ
SLCT IN#
INIT
XT#
STROBE#
Bit 0 (STROBE#): (validación de datos) invertida por hardware. Si STROBE# = 0 la línea
externa de STROBE (pin 1) se pone a nivel alto.
Bit 1 (XT#): (autofeed) invertida por hardware. Si XT# = 0 la línea externa XT (pin 14) se
pone a nivel alto.
Bit 2 (INIT): (inicializa impresora) . Si INIT = 1 la línea externa INIT (pin 16) se pone a
nivel alto.
Bit 3 (SLCT IN#): (selecciona impresora) invertida por hardware. Si SLCT IN# = 0 la
línea externa SLCT IN (pin 17) se pone a nivel alto.
Bit 4 (IRQ): (activación de interrupción). Si IRQ = 1 activa interrupción del puerto
paralelo (normalmente IRQ7).
Bit 5 (DD): (dirección de datos) bit de sólo escritura. Si DD = 0, bus de datos como salida.
Si DD = 1, bus de datos como entrada.
Bits 6 y 7: reservados.
José Ignacio Suárez Marcelo
9
Guía rápida para gestionar el puerto paralelo del PC
ANEXO I – Programa de prueba del puerto paralelo
//**********************************************************
//*
*
//*
Programa de Prueba del puerto paralelo
*
//*
*
//* Muestra el valor leido del PP al pulsar una tecla.
*
//* Para salir pulsar ESCAPE.
*
//*
*
//**********************************************************
#include <dos.h>
#include <conio.h>
#define
#define
#define
#define
BASE
RDATOS
RESTADO
RCONTROL
0x278
BASE+0
BASE+1
BASE+2
//Direccion Base del puerto paralelo
//Registro de Datos
//Registro de Estado
//Registro de Control
char
tecla;
unsigned short int dato;
void main()
{
outportb(RCONTROL,0x2E);
//Puerto como entrada
do{
if(kbhit()) {
tecla = getch();
dato = inportb(RDATOS);
printf("%d",dato);
}
//Muestra el valor leido por el puerto
} while (tecla!=27);
}
José Ignacio Suárez Marcelo
10
Descargar