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

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 #include 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 entr

3 downloads 120 Views 131KB Size

Story Transcript

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



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



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



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



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 #include 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 #include #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

Get in touch

Social

© Copyright 2013 - 2024 MYDOKUMENT.COM - All rights reserved.