usando el puerto paralelo de una pc

28
Usando el puerto paralelo de una PC Proyecto: Interfaz para el Puerto Paralelo Fecha: 3 de Setiembre de 2000 Introducción: El puerto paralelo de una PC es ideal para ser usado como herramienta de control de motores, relés, LED's, etc. El mismo posee un bus de datos de 8 bits (Pin 2 a 9) y muchas señales de control, algunas de salida y otras de entrada que también pueden ser usadas fácilmente. Las PC's generalmente poseen solo uno de estos puertos (LPT1) pero con muy poco dinero se le puede adicionar una tarjeta con un segundo puerto paralelo (LPT2). En reglas generales la dirección hexadecimal del puerto LPT1 es igual a 0x378 (888 en decimal) y 0x278 (632 en decimal) para el LPT2. Esto se puede verificar fácilmente en el setup de la PC o bien en el cartel que generalmente la PC muestra en el momento del booteo. Puede darse el caso que el LPT1 asuma la dirección 0x3BC (956 en decimal) y el LPT2 0x378, en ese caso habrá que tratar de corregir el setup y/o los jumper de las tarjetas en caso que sea posible. De lo contrario se puede modificar el software que veremos mas adelante para aceptar esas direcciones. Breve descripción del puerto paralelo: El puerto paralelo de un PC posee un conector de salida del tipo DB25 hembra cuyo diagrama y señales utilizadas podemos ver en la siguiente figura:

Upload: johanny-perez

Post on 24-Jul-2015

340 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Usando El Puerto Paralelo de Una PC

Usando el puerto paralelo de una PC

 

Proyecto: Interfaz para el Puerto Paralelo

Fecha: 3 de Setiembre de 2000

Introducción:

 El puerto paralelo de una PC es ideal para ser usado como herramienta de control de motores, relés, LED's, etc. El mismo posee un bus de datos de 8 bits (Pin 2 a 9) y muchas señales de control, algunas de salida y otras de entrada que también pueden ser usadas fácilmente.

Las PC's generalmente poseen solo uno de estos puertos (LPT1) pero con muy poco dinero se le puede adicionar una tarjeta con un segundo puerto paralelo (LPT2).

En reglas generales la dirección hexadecimal del puerto LPT1 es igual a 0x378 (888 en decimal) y 0x278 (632 en decimal) para el LPT2. Esto se puede verificar fácilmente en el setup de la PC o bien en el cartel que generalmente la PC muestra en el momento del booteo. Puede darse el caso que el LPT1 asuma la dirección 0x3BC (956 en decimal) y el LPT2 0x378, en ese caso habrá que tratar de corregir el setup y/o los jumper de las tarjetas en caso que sea posible. De lo contrario se puede modificar el software que veremos mas adelante para aceptar esas direcciones.

 

Breve descripción del puerto paralelo:

El puerto paralelo de un PC posee un conector de salida del tipo DB25 hembra cuyo diagrama y señales utilizadas podemos ver en la siguiente figura:

 

 

Si deseamos escribir un dato en el bus de salida de datos (pin 2 a 9) solo debemos escribir el byte correspondiente en la dirección hexadecimal 0X378 (888 en decimal) cuando trabajamos con el LPT1 y 0x278 (632 en decimal) cuando trabajamos con el LPT2. Los distintos pins (bits) de salida correspondientes al bus de datos no pueden ser escritos en forma independiente, por lo que siempre que se desee modificar uno se deberán escribir los ocho bits nuevamente.

Para leer el estado de los pins de entrada (10, 12, 13 y 15) se debe realizar una lectura a la dirección hexadecimal 0x379 (889 en decimal) si trabajamos con el LPT1 o bien leer la

Page 2: Usando El Puerto Paralelo de Una PC

dirección 0x279 (633 en decimal) si trabajamos con el LPT2. La lectura será devuelta en un byte en donde el bit 6 corresponde al pin 10, el bit 5 corresponde al pin 12, el bit 4 corresponde al pin 13 y el bit 3 corresponde al pin 15.

En la siguiente tabla se puede ver lo antedicho en una forma más gráfica:

Escritura: Salida de Datos

Escritura en dirección 0x378 (LPT1) o 0x278 (LPT2)

DATOBIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

DB25Pin 9 Pin 8 Pin 7 Pin 6 Pin 5 Pin 4 Pin 3 Pin2

CN5 TTL 7 TTL 6 TTL 5 TTL 4 TTL 3 TTL 2 TTL 1 TTL 0

CN4 No usar HP 6 HP 5 HP 4 HP 3 HP 2 HP 1 HP 0

 Lectura: Entrada de Datos

Lectura en dirección 0x379 (LPT1) o 0x279 (LPT2)

DATO BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

DB 25 No usar

Pin 10 Pin 12 Pin 13 Pin 15No

usarNo

usarNo usar

CN6 No usar

Input 3 Input 2 Input 1 Input 0No

usarNo

usarNo usar

  

Interfaz:

En la archivo  IPP01-CIRCUIT.PDF  podemos apreciar el circuito correspondiente a la interfaz para el puerto paralelo.

La interfaz nos provee 8 salidas TTL, 7 salidas de potencia (500ma) y cuatro entradas TTL. Es importante tener en cuenta que las salidas TTL entregan una tensión de 5v y solo se les puede exigir un mínimo de corriente, apenas suficiente para activar un transistor o bien un par de compuertas TTL.

Así mismo las entradas TTL deben ser alimentadas con una tensión máxima de 5v o de lo contrario el chip resultará dañado. Esta tensión se obtiene desde VDD a través del regulador U1 (7805).

Las 7 salidas de potencia no son mas que la amplificación mediante un array de transistores Darlington (ULN2003) de las salidas TTL 0 a 6 (la salida 7 no es usada). Este chip puede drenar una corriente máxima de 500ma, lo que es suficiente para activar un LED, un relé y hasta un motor DC de bajo consumo (tipo motor de grabador).

Page 3: Usando El Puerto Paralelo de Una PC

 La teoría de funcionamiento es muy simple, solo se usan unas compuertas del tipo Buffer (74HC245) para poder conectarnos con seguridad al puerto paralelo, y un array de transistores Darlington (ULN2003) para brindar una salida de mayor potencia.

Cabe aclarar que los dos integrados 74HC245 se alimentan del regulador de voltaje 7805, el cual se encarga de reducir la tensión de entrada (VDD) a 5v (Vcc). La tensión VDD debe estar comprendida entre 9 y 12v.

La tensión de entrada VHH alimenta directamente al ULN2003 para obtener mayor voltaje en caso de querer manejar un relé o bien un pequeño motor. La tensión VHH debe estar comprendida entre 3 y 15v. VHH podrá conectarse directamente a VDD (y de esa forma usar solo un fuente de alimentación) siempre que esto no provoque problemas de ruido.

En los siguientes diagramas se

pueden apreciar un ejemplo de

conexionado de un LED y un Relé a las salidas de

potencia. En forma análoga

podríamos conectar

también un pequeño motor DC.

 

 

 

Programa para manejo de la interfaz:

El siguiente es un programa hecho en Qbasic en donde se puede apreciar como se debe trabajar con el puerto paralelo y como se puede sacar provecho de la interfaz.

Para visualizarlo o bajarlo a la PC haga click aquí. También puede bajar el ejecutable (.exe) directamente si así lo desea haciendo click aquí.

El funcionamiento de este software es muy simple y básico. Primero le solicitará que elija el puerto a usar (LPT1 o LPT2). Luego puede elegir "Leer Port" para recuperar el estado de los pins de entrada (0 a 3) o bien "Escribir Port" para cambiar el estado de los pins de salida (0 a

Page 4: Usando El Puerto Paralelo de Una PC

7). Recuerde que si cambiamos el pin de salida 0 , también se altera el mismo pin en la salida de potencia (solo pins 0 a 6, el 7 no tiene salida de potencia).

Mediante el análisis de este programa Basic se puede intentar hacer programas mas elaborados en lenguajes más modernos.

Page 5: Usando El Puerto Paralelo de Una PC
Page 6: Usando El Puerto Paralelo de Una PC

Introducción

Hace años, IBM diseñó el puerto paralelo para manejar impresoras desde su gama de microcomputadores PC/XT/AT. Un conector estándar macho de 25 pines aparecía en la parte trasera del PC con el solo propósito de servir de interfaz con la impresora. El sistema operativo DOS cargado en dichos PC soporta hasta tres puertos paralelos asignados a los identificadores LPT1, LPT2 y LPT3, y cada puerto requiere tres direcciones consecutivas del espacio de E/S (entrada-salida) del procesador para seleccionar todas sus posibilidades.

Desde el punto de vista del hardware, el puerto consta de un conector hembra DB25 con doce salidas latch (poseen memoria/buffer intermedio) y cinco entradas, con ocho líneas de tierra.

Desde el punto de vista del software, el puerto paralelo consta de tres registros (datos, estado y control) de 8 bits cada uno, que ocupan tres direcciones de E/S (I/O) consecutivas de la arquitectura x86.

La función normal del puerto consiste en transferir datos a una impresora mediante 8 líneas de salida de datos, usando las señales restantes como control de flujo. Sin embrago, puede ser usado como un puerto E/S de propósito general por cualquier dispositivo o aplicación que se ajuste a sus posibilidades de entrada/salida.

 

Descripción del conector físico

La conexión del puerto paralelo al mundo exterior se realiza mediante un conector hembra DB25. Observando el conector de frente y con la parte que tiene mayor número de pines hacia arriba, se numera de derecha a izquierda y de arriba a abajo, del 1 al 13 (arriba) y del 14 al 25 (abajo).

Page 7: Usando El Puerto Paralelo de Una PC

En este conector:

8 líneas (pines) son para salida de datos (bits de DATOS). Sus valores son únicamente modificables a través de software, y van del pin 2 (dato 0, D0) al pin 9 (dato 7, D7).

5 líneas son de entrada de datos (bits de ESTADO), únicamente modificables a través del hardware externo. Estos pines son: 11, 10, 12, 13 y 15, del más al menos significativo.

4 líneas son de control (bits de CONTROL), numerados del más significativo al menos: 17, 16, 14 y 1. Habitualmente son salidas, aunque se pueden utilizar también como entradas y, por tanto, se pueden modificar tanto por software como por hardware.

las líneas de la 18 a la 25 son la tierra.

En la siguiente tabla se detallan la nomenclatura y descripción de cada línea. La columna "Centronics pin" se refiere a las líneas del conector tipo Centronics usado en las impresoras. La columna E/S se refiere al dato visto desde el lado del PC.

DB25pin

Centronicspin

Tipo(E/S)

Señal Descripción

1 1 S StrobeSi está bajo más de 0.5 µs, habilita a la impresora para que reciba los datos enviados.

2 2 S D0 Bit 0 de datos, bit menos significativo (LSB)

3 3 S D1 Bit 1 de datos

4 4 S D2 Bit 2 de datos

5 5 S D3 Bit 3 de datos

6 6 S D4 Bit 4 de datos

7 7 S D5 Bit 5 de datos

8 8 S D6 Bit 6 de datos

9 9 S D7 Bit 7 de datos, bit más significativo (MSB)

10 10 E AckUn pulso bajo de ~11µs indica que se han recibido datos en la impresora y que la misma está preparada para recibir más datos.

Page 8: Usando El Puerto Paralelo de Una PC

11 11 E Busy En alto indica que la impresora está ocupada.

12 12 E PaperEnd En alto indica que no hay papel.

13 13 E SelectIn En alto para impresora seleccionada.

14 14 S AutoFeedSi está bajo, el papel se mueve una línea tras la impresión.

15 32 E ErrorEn bajo indica error (no hay papel, está fuera de línea, error no det.).

16 31 S InitSi se envía un pulso en bajo > 50 µs la impresora se reinicia.

17 36 S SelectEn bajo selecciona impresora (en gral. no se usa, ya que SelectIn se fija a alto).

18-25 19-30,33   GND Masa retorno del par trenzado.

18-25 16     Masa lógica

18-25 17     Masa chasis

El nombre de cada señal corresponde a la misión que cumple cada línea con relación a la impresora, el periférico para el que fue diseñado el puerto paralelo. Las señales activas a nivel bajo aparecen con la barra de negación (por ejemplo, Strobe). Cuando se indica alto o bajo se refiere a la tensión en el pin del conector. Alto equivale a ~5V en TTL y bajo a ~0V en TTL.

 Acceso al puerto

El puerto paralelo se identifica por su dirección de E/S (entrada/salida, I/O) base y se reconoce en sistemas MS-DOS por el número LPT (lp en Unix/Linux). Cuando arranca la máquina, la BIOS (Basic Input Output System) chequea direcciones específicas de E/S en busca de puertos paralelos y construye una tabla de las direcciones halladas en la posición de memoria 40h:8h (o 0h:0408h) (véase direccionamiento segmentado).

Esta tabla contiene hasta tres palabras de 16 bits, cada palabra con el byte bajo primero seguido por el byte alto. Cada palabra es la dirección de E/S base del puerto paralelo (que denominaremos LPT_BASE en lo sucesivo). La primera corresponde a LPT1, la segunda a LPT2 y la tercera a LPT3. Hay que agregar que, en MS-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 base estándar para los puertos paralelos son:

03BCh 0378h 0278h

chequeadas en este orden.

La siguiente tabla muestra, como ejemplo, la memoria en un PC con dos puertos paralelo instalados en las direcciones hexadecimales 378 y 278.

 

Identificador DOS

DirecciónByte bajo

Byte alto

Hexadecimal Decimal

LPT1 0000:0408/9 78 03 378 888

Page 9: Usando El Puerto Paralelo de Una PC

LPT2 0000:040A/B 78 02 278 632

LPT3 (no instalado)

0000:040C/D 00 00 0 0

Registros

El puerto paralelo estándar (SPP) consta, como se mencionó antes, de tres registros de 8 bits localizados en direcciones adyacentes del espacio de E/S del PC. Los registros se definen relativos a la dirección de E/S base (LPT_BASE) y son:

LPT_BASE + 0: registro de DATOS LPT_BASE + 1: registro de ESTADO LPT_BASE + 2: registro de CONTROL

 

REGISTROS

Nombre habitualDATOS ESTADO CONTROL

DIRECCIÓNE/S

Puerto 378h 379h 37Ah LPT1

Puerto 278h 279h 27Ah LPT2

Puerto 3BCh 3BDh 3BEh MDA con p. paralelo

Se hará referencia a cada bit de los registros como una inicial que identifica el registro seguido de un número que identifica el número de bit, siendo 0 el LSB (bit menos significativo) y 7 el MSB (bit más significativo). Por ejemplo, D0 es el bit 0 del reg. de datos, S7 es el bit 7 del reg. de estado y C2 es el bit 2 del reg. de control.

Se indican con una barra de negación los bits que utilizan lógica negativa. En lógica positiva un 1 lógico equivale a alto (~5 V TTL) y un 0 lógico a bajo (~0 V TTL). En lógica negativa 1 equivale a bajo (~0 V) y 0 equivale a alto (~5 V).

Es preciso no confundir la lógica que sigue el puerto con la lógica que mantiene la impresora. Por ejemplo, la impresora pone a alto Busy (pin 11) para indicar que está ocupada. Pero en realidad, al leer el registro de estado, Busy la interpretamos como 0 (puesto que el pin 11 se corresponde con S7). Es decir, es como si fuera activa en bajo (Busy).

 Registro de datos (D)

Page 10: Usando El Puerto Paralelo de Una PC

El registro de estado se halla en LPT_BASE. Se puede leer y escribir. Escribir un dato en el registro causa que dicho dato aparezca en los pines 2 a 9 del conector del puerto. Al leer el registro, se lee el último dato escrito (NO lee el estado de los pines; para ello hay que usar un puerto bidireccional).

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 (modo source) es de 2,6 mA máximo y pueden absorber (modo sink) un máximo de 24 mA. n 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.

El registro de estado está en LPT_BASE+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.

 

 La línea Busy tiene, generalmente, una resistencia de pull-up interna. El estándar es que sean entradas tipo LS TTL.

El registro de control se encuentra en LPT_BASE+2. Es de lectura/escritura.

Page 11: Usando El Puerto Paralelo de Una PC

Los cuatro bits inferiores son salidas. La lectura devuelve lo último que se escribió a dichos bits. Son TTL a colector abierto con resistencias de pull-up de 4.7 k, por lo que un dispositivo externo puede forzar el estado de los pines sin dañar el driver. Esto permite utilizar estas cuatro líneas como entradas. Para ello, se ponen en alto las cuatro salidas (escribiendo 0100b, es decir, 4h, en LPT_BASE+2) lo que hace que las salidas "floten". Ahora, un dispositivo externo puede forzar a bajo alguna de las salidas con lo que, leyendo el puerto, sabemos si esto sucedió o no.

Es posible realizar esta técnica en salidas totem-pole (como D0-D7) pero no se recomienda su uso porque habría que tener un conocimiento preciso de la corriente, ya que se puede sobrecargar los transistores de salida y dañar el driver (especialmente en puertos integrados LSI).

Bit de puerto bidireccional (compatible PS/2)

El bit C5, está disponible sólo si se trata de un puerto bidireccional; en los puertos comunes no se utiliza, al igual que los bits C6 y C7. Si C5=1, el buffer de los datos de salida se pone en alta impedancia, "desconectando" dicho buffer de los pines 2 a 9 del conector del puerto (D0 a D7). Si se escribe al registro de datos, se escribe al buffer pero no a la salida. Esto permite que al leer el puerto, se lea el estado de las entradas y no lo que hay en buffer. Cuando C5=0 el puerto retorna al modo salida, su estado por defecto. 

En las computadoras IBM PS/2, para habilitar el puerto paralelo bidireccional, además de lo antes descrito, se debe poner a 1 el bit 7 del registro del puerto 102h (opciones de configuración).

En computadoras que no tengan puerto paralelo bidireccional compatible PS/2 hay que modificar uno o más bits de algún puerto específico correspondiente al chipset de la placa. A veces se habilita por el Setup o por jumper en la placa del puerto.

Bit de interrupción

En trabajos normales de impresión ni el BIOS ni el DOS hacen uso de la interrupción. El hecho de poseer una línea de interrupción que está conectada directamente al PIC (Programmable Interrupt Controller), lo hace muy útil para experimentación en data-loggers por ejemplo. El bit de interrupción está conectado al control de un buffer de tres estados. Cuando C4=1, se activa el buffer y su entrada, S6, se conecta a la línea IRQ (en general es IRQ7 o IRQ5). La lectura del bit, nos devuelve el estado del mismo (es decir si el buffer está en alta impedancia o no).

Se producirá una interrupción, cuando haya un flanco descendente en el pin correspondiente a S6. A continuación, se describen los pasos para poder utilizar interrupciones.

 Finalmente, se muestra una tabla que reúne las características hardware y software del puerto paralelo.

Page 12: Usando El Puerto Paralelo de Una PC

DB25pin

Centronicspin

Registro bitTipo(E/S)

Activo Señal Descripción

1 1 C0Control

0S bajo Strobe

Si está bajo más de 0.5 µs, habilita a la impresora para que reciba los datos enviados.

2 2 DO Dato 0 S alto D0Bit 0 de datos, bit menos significativo (LSB)

3 3 D1 Dato 1 S alto D1 Bit 1 de datos

4 4 D2 Dato 2 S alto D2 Bit 2 de datos

5 5 D3 Dato 3 S alto D3 Bit 3 de datos

6 6 D4 Dato 4 S alto D4 Bit 4 de datos

7 7 D5 Dato 5 S alto D5 Bit 5 de datos

8 8 D6 Dato 6 S alto D6 Bit 6 de datos

9 9 D7 Dato 7 S alto D7Bit 7 de datos, bit más significativo (MSB)

10 10S6

IRQEstado

6E alto Ack

Un pulso bajo de ~11µs indica que se han recibido datos en la impresora y que la misma está preparada para recibir más datos.

11 11 S7Estado

7E bajo Busy

En alto indica que la impresora está ocupada.

12 12 S5Estado

5E alto PaperEnd

En alto indica que no hay papel.

13 13 S4Estado

4E alto SelectIn

En alto para impresora seleccionada.

14 14 C1Control

1S bajo AutoFeed

Si está bajo, el papel se mueve una línea tras la impresión.

15 32 S3Estado

3E alto Error

En bajo indica error (no hay papel, está fuera de línea, error no det.).

16 31 C2Control

2S alto Init

Si se envía un pulso en bajo > 50 µs la impresora se reinicia.

17 36 C3Control

3S bajo Select

En bajo selecciona impresora (en gral. no se usa, ya que SelectIn se fija a alto).

18-25 19-30,33         GNDMasa retorno del par trenzado.

18-25 16           Masa lógica

18-25 17           Masa chasis

 

Page 13: Usando El Puerto Paralelo de Una PC

Miscelánea 

El handshaking ("apretón de manos" o protocolo) es un conjunto de reglas que ambos extremos de un sistema de comunicación tienen que seguir para que la comunicación sea correcta. El puerto paralelo, usado con una impresora, transmite datos y transmite/recibe las señales de protocolo. Las principales son Strobe, Ack y Busy. La secuencia a seguir para enviar datos sería:

1. Colocar el byte a enviar en el registro de datos. 2. Verificar que la impresora no esté ocupada (Busy = bajo, S7 = 1).

3. Indicarle a la impresora que acepte los datos (Strobe = bajo , C0 = 1, pulso >5us).

4. En ese instante la impresora indica que está ocupada recibiendo los datos (Busy = alto, S7 = 0).

5. Finalmente, la impresora envía un pulso de aceptación indicando que se recibieron los datos y que se puede volver al paso 1 (Ack = bajo, S6 = 0, pulso de entre 5 s y 15 s según impresora).

Las otras señales sirven para verificar el estado de la impresora (Error, PaperEnd), para reiniciarla (Init) y para configurarla (AutoFeed, Select).

En los nuevos puertos, estas señales adquieren otra función, a veces parecida y otras totalmente distintas.

  Interrupciones con el puerto paralelo

En primer lugar, se debe habilitar el buffer que conecta la línea ACK con la línea IRQ. Esto lo hacemos poniendo a 1 el bit 4 del registro de control (LPT_BASE+2). Luego se debe preparar una ISR (Interrupt Service Routine) que atienda la interrupción recordando enviar la señal EOI (20h) al registro de control del PIC (puerto 20h) al salir de la rutina. La interrupción software corresponde a la número 0Dh para IRQ5 y 0Fh para IRQ7. Finalmente se habilita con 0 la interrupción IRQ5 (o IRQ7) escribiendo al bit 5 (o 7) del registro de interrupciones del PIC (puerto 21h).

Para desinstalar la ISR, se deshabilita la IRQ5 (o IRQ7) escribiendo un 1 al bit 5 (o 7) del registro de interrupciones del PIC (puerto 21h). Luego se hace que C4=0.

 Velocidad

Un puerto paralelo ISA normal toma un ciclo-ISA para leer o escribir. En un sistema cuya velocidad de bus sea 1,3 Mhz, se puede decir que la lectura se puede hacer cada 1 s (idealmente, ya que siempre existen otras instrucciones software, etc; En la práctica pueden ser desde 1.2 s a 2 s). Algunos puertos soportan un modo "turbo" que elimina los 3 estados de espera de la CPU, con lo que la velocidad de lectura/escritura del puerto se duplica (2,7 MHz).

Page 14: Usando El Puerto Paralelo de Una PC

Envio y lectura de datos del puerto

Envío de datos al puerto

El puerto paralelo puede ser usado como una comunicación directa con el PC, de este modo es posible desarrollar aplicaciones en tiempo-real que necesiten un rápido tiempo de respuesta.

El acceso se realiza escribiendo un byte (8 bits) en registro determinado. Este byte debe referirse a cada uno de los bits del registro. Esto significa que se debe definir el byte a escribir en sistema binario.

Por ejemplo si queremos escribir en el registro de datos el bit D0 y el bit D2 entonces el byte es:

 

0 0 0 0 0 1 0 1 = 5  En decimal

D7 D6 D5 D4 D3 D2 D1 D0 Registro de datos

 

Luego, se debe escribir 5 en el registro de datos (dirección base):

Notas:

dir_base y dir_estado es de tipo word, y dato es de tipo byte.

En Turbo Pascal

Port[dir_base]:=5;

En C

Outportb(dir_base, 5);

En ensamblador

mov dx, dir_base {Direccionar en dx la dirección base}

mov al, 5 {Colocar en ² al ² el número 5}

out dx, al {Enviar al puerto}

 

Lectura de datos del puerto

Page 15: Usando El Puerto Paralelo de Una PC

La lectura de datos se realiza accesando un byte del registro determinado. Al hacer la lectura se debe convertir el byte a binario para determinar él o los bits que interesen. Note que sólo se debe leer el registro de estado, o sea, la dirección base+1.

En Turbo Pascal

Var dato: byte;

dato:=Port[dir_estado];

En C

unsigned int dato;

dato=inportb(dir_estado);

En ensamblador

mov dx, dir_estado {Direccionar dx con el registro de estado del puerto}

in al, dx {Leer del puerto. En el registro ² al ² está el dato leído}

 

Por ejemplo, si el dato leído es igual a 96, significa que los bits S5 y S6 están activos(tienen un nivel alto, un 1).

0 1 1 0 0 0 0 0 = 96  En decimal

S7 S6 S5 S4 S3 S2 S1 S0 Registro de estado

 

Enmascaramiento

Tanto en el envío como recepción de datos binarios, se realizan operaciones a nivel de bits. Estas operaciones permiten aislar uno más bits. Este proceso se denomina enmascaramiento.

Por ejemplo, para saber si determinado bit que se ha leído del registro de estado está en un nivel alto (1 lógico) se puede hacer la operación "Y" lógica (AND) de la lectura con un valor que resulta de elevar 2 a la posición que ocupa ese bit en el byte, y luego realizar la comparación.

Si el bit que se desea conocer es el bit 5, entonces la operación es:

Masc:=2^5=32

(Byte_leido AND masc)

En el caso que el bit 5 esté en un nivel alto:

Byte_leido

Page 16: Usando El Puerto Paralelo de Una PC

0 1 1 0 0 0 0 0 96

S7 S6 S5 S4 S3 S2 S1 S0 Posición

AND

0 0 1 0 0 0 0 0 Máscara = 32

Resulta

0 0 1 0 0 0 0 0 32= máscara

 

En el caso que el bit 5 no esté en un nivel alto:

Byte_leido

0 1 0 1 0 0 0 0 80

S7 S6 S5 S4 S3 S2 S1 S0 Posición

AND

0 0 1 0 0 0 0 0 Máscara = 32

Resulta

0 0 0 0 0 0 0 0 0 <> máscara

 

Si el bit 5 es 1, entonces el resultado es 16, o igual a masc.

Haciendo la comparación:

Si (Byte_leido AND masc) = masc entonces

Inicio

/* las acciones a realizar cuando el 4to bit es 1 */

Page 17: Usando El Puerto Paralelo de Una PC

Fin

Si el bit 5 es 0, entonces el resultado siempre es 0, lo cual es diferente a masc.

En caso que se desee realizar el enmascaramiento de más de un bit, se realiza la suma los valores.

Ej. Máscara para el bit 5 y el 7

Masc= 2^5+2^7=160

Expansión a 8 entradas digitales para el puerto paralelo

 

Como ya es sabido, el puerto paralelo estándar sólo tiene 4 entradas digitales. Algunas aplicaciones pueden necesitar más de las 4 entradas. En este caso es posible expandir las entradas mediante un sencillo circuito basado en un componente electrónico como el buffer 74LS157 para alimentar los datos en forma de dos nibbles (medio byte, 4 bits) mediante las entradas del registro de estado (4 o 5 líneas) hacia el puerto paralelo. Se puede usar el registro de datos o el registro de control para seleccionar el nibble.

Descripción del buffer 74LS157

Fig. El buffer 74LS157

 

Referencias

Entradas Salidas

I0a Entrada 0a Qa Salida Qa

Page 18: Usando El Puerto Paralelo de Una PC

I0b Entrada 0b Qb Salida Qb

I0c Entrada 0c Qc Salida Qc

I0d Entrada 0d Qd Salida Qd

I1a Entrada 1a

I1b Entrada 1b

I1c Entrada 1c

I1d Entrada 1d

Alimentación y operación

S Selección de nibble. (Bajo selecciona I0. Alto selecciona I1)

-Enable Habilitación del componente (mantener señal en bajo)

Vcc 5 voltios

Gnd Tierra

La fuente de 5 voltios para alimentar este circuito se puede obtener directamente de la fuente de poder del PC, o del puerto de juegos (ver fuente de alimentación).

Modo de operación

Con el 74LS157 la selección se realiza a través del registro de control o de datos. En la figura que está a continuación se muestra en caso de que la selección sea a través del registro de control.

Page 19: Usando El Puerto Paralelo de Una PC

Fig. Conexión sugerida del 74LS157

 

Programación

El siguiente algoritmo permite leer los ocho bits de la entrada del 74LS157

/* Inicio */

/* Selección del primer nibble */

Colocar 0 en el bit C3- para seleccionar el nibble N1

Leer el registro de estado en una variable, por ejemplo d_leido

Realizar la operación d_leido XOR con 128, para corregir el signo de S7-

Este resultado operar con AND 240, para descargar bits no deseados

Desplazar a la derecha 4 bits para colocarlo en el nibble de abajo

Almacenar el resultado de un lado

/* Selección del segundo nibble */

colocar 1 en el bit C3-, para seleccionar el nibble N2

Leer el registro de estado en una variable, por ejemplo d_leido

Realizar la operación d_leido XOR con 128, para corregir el signo de S7-

Este resultado operar con AND 240, para descargar bits no deseados

Realizar la operación OR del resultado con el nibble almacenado previamente

En el resultado final están los 8 bits leídos.

Funcionamiento

Explicación del funcionamiento mediante el BIOS y el MS-DOS

IBM especificó direcciones base para el puerto paralelo estándar (dentro del espacio de direccionamiento de Entrada/Salida del 80x86). El adaptador de impresora podría usar la dirección base 3BCh, o más tarde 378h o 278h.

El BIOS (Basic Input Output System) de IBM crea en el momento de arranque o POST (Power On Seft Test) una tabla en el espacio de la memoria principal (RAM) para 4 direcciones base de puerto paralelo de impresora, estos se almacenan como 4 bytes empezando con la dirección de memoria 408h.

Page 20: Usando El Puerto Paralelo de Una PC

Durante el arranque, el BIOS comprueba si hay puertos paralelos en las direcciones base 3BCh, 378h, y 278h, en ese orden, y almacena la dirección base de cualesquiera que hayan sido encontrados en posiciones consecutivas de la tabla. Las posiciones que no son usadas pueden estar en 0, o como algunos BIOS lo hacen, le colocan la dirección del primer puerto encontrado.

Algunos programas pueden ignorar esta tabla, pero esta es usada por lo menos por el propio BIOS (mediante la INT 17 de E/S de impresora) y por el MS-DOS.

El BIOS detecta estos puertos escribiendo AAh al registro de datos (en la dirección de E/S Base + 0), y luego si en el registro de datos se lee AAh. Significa que hay un puerto.

Normalmente la asignación de direcciones es como sigue: 

Dirección Nombre Ubicación

3BCh LPT1 Adaptador de impresión primario

378h LPT2 Adaptador de impresión secundario

 

Las referencias a cada registro del puerto se realizan de la siguiente forma:

o Base (datos)=base+0o Estado=base+1o Control=base+2

Por ejemplo, si encontramos que la dirección base es 378h, entonces las direcciones del registro de datos, estado y control serán:

o Base (datos)=378ho Estado=379ho Control=37Ah

Cada una de ellas permite accesar a los siguientes bits (descritos en la tabla general):

o Base (datos)=D0, D1, D2, D3, D4, D5, D6, D7 o Estado=S3, S4, S5, S6, S7 o Control=C0, C1, C2, C3

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

Page 21: Usando El Puerto Paralelo de Una PC

El Conversor Analógico Digital ADC0804CN y el puerto Paralelo

 

Si se desea capturar señales analógicas en el orden de los 0 a 5 voltios, es posible utilizar el conversor Analógico / Digital ADC0804CN

Para ello se propone el esquema eléctrico de un conversor analógico-digital básico como el de la siguiente figura:

 

  Esquema del interfaz de control de entradas analógicas mediante p. paralelo

Dicho circuito se alimenta a +5v y convierte señales analógicas en el intervalo entre 0 y 5v. Como núcleo se utiliza el circuito integrado ADC0804CN, un conversor A/D de 8 bit, barato y habitualmente disponible. Por defecto, el intervalo de entrada está entre 0 y +5V pero, usando una referencia externa y/o elevando la señal Vin- respecto a GND, se puede conseguir un amplio intervalo de niveles de entrada. Trabaja con una frecuencia máxima de 8 kHz, de modo que se puede utilizar incluso con señales de audio de baja calidad.

 A efectos de prueba, la señal analógica a convertir proviene del potenciómetro R2; variando éste se modifica la señal entre 0 y 5 voltios. Dicha señal se introduce en el conversor ADC0804. Una vez convertida, el valor digital es presentado en las líneas D0 a D7 y deberá ser leído a través del puerto paralelo según el protocolo explicado a continuación.

Page 22: Usando El Puerto Paralelo de Una PC

Para el correcto funcionamiento de la conversión se debe respetar un protocolo entre el PC y el conversor.

 Básicamente es el siguiente:

Petición de comienzo de conversión: el PC debe enviar esta petición al ADC. Para ello se activa la señal CS (a nivel bajo) y, dentro del período de activación, se activa la señal WR durante un mínimo de 100 ns. El conversor activará la línea INTR (la señal es activa a nivel bajo) para indicar que ha terminado la conversión (ver figura siguiente). A partir de ese momento el PC puede leer el dato.

Diagrama de tiempos para el inicio de la conversión

Proceso de lectura: se selecciona el conversor a través de la línea CS y se envía un pulso negativo por la línea RD. Tras unos 200 ns (tACC: tiempo de acceso) el dato está disponible para lectura y se desactiva la señal de lectura.

  

Page 23: Usando El Puerto Paralelo de Una PC

Diagrama de tiempos para la lectura del dato

Los ciclos anteriores se repetirán tantas veces como datos se quieran capturar.

Con objeto de simplificar la circuitería y, puesto que se cuenta con un solo ADC, se puede mantener permanentemente la señal CS a nivel bajo conectándola directamente a tierra