92756796 encender led

Post on 04-Aug-2015

77 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Que tal amigo, no se si llego tarde pero es muy facil, el puerto paralelo tiene 8 pines de salida (del 2 al 9) 4 pines de control (el 1, 14, 16 y 17), 5 de entrada(del 10 al 13 y el 15) y los demas son tierra. entonces lo que tu va a hacer es conectar las salidas de de datos a los leds antes pasando por una resistencia y el catodo a tierra (eam creo q es ovio jejeje) , tambien puedes usar la salida del control. y puedes chambiar esto con programas ya echos o aste el tuyo, solo que te recuerdo si vas a hacer el tuyo las salidas de control 0, 2 y 3 estan invertidas. te dejo una fotito para que veas como estan los pines.

A se me olvidava, tambien puedes llegar mas alla y controlar aparatos y lei q asta 8, ahora genios de la electronica y software, ami me marcaron un proyecto de semestre de echo solo tengo 2 semanas para terminarlo jejeje, trata de usar el puerto paralelo, entonces se me ocurrio usar un line decoder 4 to 16, entonces si saco mis cuentas si uso las salidas de datos y uso los cuatro primero para un line y los 4 restantes para otro line y los uso con comando en forma de plano cartesiano mmm si mis calculos no me fallan puede obtener 256 respuestas mmmm, logicamente puedo controlar 256 aparatos? se imaginan? teniendo una pc viejita y conectada a interted y con la magia del apache podre controlar toda mi casa por internet! y tambien desde el celular, saber que esta ensendido que no , dejenme buscar una cervilleta q mi mente vuela jajaja. voy a ponerlo en practica primero controlando mi cuarto y con activacion de la manija de la puerta electricamente jajajaja. los dejo analicenlo y corrijanme si toi mal.

Objetivos

Mostrar el armado de un circuito simple mediante el puerto paralelo para encender y apagar led´s de una maqueta (casa).

Usar el Turbo c++ u otro programa similar que sea capaz de encender y apagar led`s de una maqueta (casa).

Marco teórico

Para hablar encendido y apagado de led´s mediante el uso del programa del Turbo C++, hay que decir primero.

Turbo C

Turbo C era un entorno de desarrollo integrado y compilador desarrollado por Borland para programar en lenguaje C.

Su primera versión es de 1987, a la que siguieron las versiones 1.5 y 2.0, de 1989. Fue el compilador más popular para desarrollar en C en entornos MS-DOS. Se le considera el primer IDE para C disponible para dicha plataforma.

Fases de un programa en Turbo C

Las fases de un programa en Turbo C se pueden resumir en:

Edición

Compilación

Enlazado

Ejecución

La Edición de un programa consiste, simplemente, en editar el código fuente del programa, Turbo C incluye un editor para este efecto.

La Compilación del programa consiste en convertir el código fuente en código objeto.

El Enlazado consiste en enlazar el código objeto para obtener el código ejecutable.

Finalmente, la Ejecución consiste precisamente en ejecutar el programa.

El entorno de Turbo C

El entorno de Turbo C facilita la edición, compilación y el enlazado de los programas, ya que incluye un editor y herramientas para compilar y enlazar los programas, para configurar el entorno de Turbo C, primero hay que conocerlo, a continuación se explican las características más importantes del entorno...

El editor de Turbo C

El editor de Turbo C es una poderosa herramienta que nos facilita enormemente la edición de un programa, es como un editor de texto cualquiera, pero, para los que están acostumbrados a los editores que funcionan bajo Windows, tal vez se encuentren con una forma diferente de editar texto, por ejemplo, para seleccionar un bloque de texto, en el editor de Turbo C, se presiona la combinación de teclas CTRL+K+B al inicio del bloque que se desea seleccionar, y la combinación CTRL+K+K al final del mismo. Después, con ese bloque seleccionado, se pueden hacer diversas cosas, como:

CTRL+K+Y: Elimina el bloque.

CTRL+K+V: Mueve el bloque.

CTRL+K+C: Copia el bloque.

De cualquier forma, es conveniente que se familiaricen con el editor de Turbo C a medida que aprenden a programar, es decir, no es necesario aprendera usar el editor al 100%.

El Debugger de Turbo C

En ocasiones, un programa que está léxica y sintácticamente bien escrito, puede no dar los resultados correctos, estos resultados pueden deberse a errores comunes de programación, tales como errores lógicos, comúnmente llamados bugs, aunque existen otros tipos de errores, tales como errores en tiempo de ejecución (tema del que nos ocuparemos más adelante), el debugger de Turbo C nos ayudará a detectar y corregir dichos errores lógicos. Por ejemplo, si deseamos monitorear en todo momento el valor de una variable (watch) presionaremos la combinación CTRL+F7, y posteriormente, podremos ejecutar el programa línea por línea (F7) o función por función (F8).

Puerto paralelo.

Vamos a dar ciertos detalles sobre el puerto paralelo:

Un puerto paralelo es una interfaz entre una computadora y un periférico cuya principal característica es que los bits de datos viajan juntos enviando un byte completo o más a la vez. Es decir, se implementa un cable o una vía física para cada bit de datos formando un bus.

El cable paralelo es el conector físico entre el puerto paralelo y el periférico. En un puerto paralelo habrá una serie de bits de control en vías aparte queirán en ambos sentidos por caminos distintos.

En contraposición al puerto paralelo está el Puerto serie, que envía los datos bit a bit por el mismo hilo.

El sistema operativo gestiona las interfaces de puerto paralelo con los nombres LPT1, LPT2 y así sucesivamente, las direcciones base de los dos primeros puertos es:

LPT1 = 0×378.

LPT2 = 0×278

La estructura consta de tres registros: de control, de estado y de datos.

El registro de control es un bidireccional de 4 bits, con un bit de configuración que no tiene conexión al exterior, su dirección en el LPT1 es 0x37A.El registro de estado, se trata de un registro de entrada de información de 5 bits, su dirección en el LPT1 es 0×379.El registro de datos, se compone de 8 bits, es bidireccional. Su dirección en el LPT1 es 0×378.

Conector DB25.

La descripción de este conector se da a continuación:

El Dataport se usa como salida El Statusport se usa como entrada El Controlport se usa de las dos formas anteriores

Los LED´s.

LED es la abreviatura en lengua inglesa para Light Emitting Diode, que en su traducción al español correspondería a Diodo Emisor de Luz.

Un LED consiste en un dispositivo que en su interior contiene un material semiconductor que al aplicarle una pequeña corriente eléctrica produce luz. La luz emitida por este dispositivo es de un determinado color que no produce calor, por lo tanto, no se presenta aumento de temperatura como si ocurre con muchos de los dispositivos comunes emisores de luz.

El color que adquiera la luz emitida por este dispositivo dependerá de los materiales utilizados en la fabricación de este. En realidad dependerá del material semiconductor, que dará una luz que puede ir entre el ultravioleta y el infrarrojo, incluyendo en el medio toda la gama de colores visibles al ojo humano.

Materiales

5 leds de diferentes colores

1 Protoboard

Conector macho y hembra (1 metro o metro y medio)

5 resistencias de 1 [k?]

Cables de cobre de diferentes colores

Turbo C++

Maqueta de una casa.

Procedimiento

Es recomendable tener unos cuantos leds más y unas cuantas resistencias más, por si acaso.

Con esos antecedentes ahora vamos a explicar los detalles del circuito:

El Circuito

Donde dice "Pin puerto paralelo" puede ser cualquier Pin del 2 al 9. No olvidar hacer una conexión al pin 25 que es tierra

El circuito consiste en un led con una resistencia, la resistencia se usa para

limitar la intensidad y no pedir más de la que el puerto paralelo es capaz de dar (5 mA). Cuando se active el pin el led se encenderá.

En este proyecto lo que se quiere mostrar es como, con un simple circuito, se puede controlar mediante la computadora una fila de LEDs los que se van a encender en una secuencia que nosotros vamos a controlar con un pequeño programa escrito en el lenguaje de programación Turbo C++.

El circuito que se va armar será montado sobre una plaqueta, la cual conduce la corriente eléctrica, llamada "protoboard".

Como nuestro objetivo es controlar los diodos LEDs con la computadora, esto es encenderlos y apagarlos según como queramos. Los LEDs son diodos que tienen la capacidad de emitir luz cuando circula una corriente por ellos. Esta corriente debe ser del orden de los 10 mA (miliampers). Para limitar la corriente que pasa por los LEDs se usan las resistencias que se oponen al paso de ella.

Para controlar un circuito externo con la computadora se usará el puerto paralelo de ella, para conectar el puerto con el circuito se necesitará el cable paralelo o conector DB-25. 

El paso siguiente es soldar cable fino UTP a los pines internos del conector. Como los pines están numerados del número 1 al 25, solo usaremos los pines numerados del 2 al 9, también se tiene que soldar un cable al pin 25 (que es el pin de masa o tierra eléctrica) para tener una descarga a tierra común, para nuestro circuito y la computadora.

Una vez construido el cable se lo puede conectar al protoboard.

Solo se deben usar cinco entradas y cinco salidas, ya que son solo cinco LEDs los que controlamos.

Las cinco salidas están conectadas por medio de una resistencia limitadora de corriente a una LED cada una. Estas resistencias son de un valor de 1[k?] y permite que circule una corriente de 10 mA (miliampere) por cada diodo.

Las siguientes imágenes pueden ayudar a apreciar mejor la conexión del circuito:

1. Circuito armado en el protoboard para la prueba inicial.

*Nota: A fin de que todo funcione bien se recomienda primero solo armar en el circuito con un solo led a fin de que el programa no sea engorroso y fin de verificar el armado de los circuitos y de verificar que la estructura de control este bien hecho.

El siguiente paso es escribir las directivas y comandos en el programa:

Agradesco a suministros por haber colocado el otro post que me motivo a hacer este tutorial con imagenes y un poco mas "especifico" mucha suerte y espero lo hagan

Primero que todo aclaro que estoy no me lo invente YO, es tomado de varias funetes en internet para poder hacer este tutorial en español y tal vez un poco mas comprensivo al no muy conocedor.

ok lo primero en esete tutorial para que aprendan a y vean lo sencillo que es hacer una interface con el puerto paralelo vamso a cosntuir un circuito de muestra en un Protoboard (elemento muy utilizado por los ingenieros electronicos) ahora no es indispensable montarlo ahi pero pues esto ofrece mucha comodidad y seguridad al armar un circuito por primera vez.

Para aquellos (como yo al principio) que no conocen el puerto paralelo aqui agrego una imagen muy conocida que explica el pinout, osea la equivalencia de cada pin en el puerto paralelo y cual es su funcion. (imagen 1)Al manejar el puerto paralelo tenemos que hablar de lo que se llama LOGICA Binaria, la cual solo tiene dos estados que facilmente se interpretan como 1 y 0, en muchos casos se asocia con encendido y apagado.IMAGEN 1

 

El puerto paralelo esta compuesto por:# 8 Pines de Salida [D0 hasta D7]# 5 Pines de Status [S4 hasta S7 y S3]# 4 Pines de Control [C0 hasta C3]# 8 Pines de Tierra [18 hasta 25]

En este orden de ideas los Pines que tienen una linea superior en su nombre son pines

inversores, osea en pocas palabras ud indican encendido el pin niega la accion y queda con el estado contrario.En este caso solo usaremos los Pines de Salida osea desde el pin #2(D0) hasta el pin #9(D7)entonces inicialmente vamos a montar un circuito de prueba, no se preocupen que los materiales de este circuito se pueden usar para el de control; los materiales son:

1 cable de impresora (obiamente)8 Leds cualquier color, el que mas les guste8 resistencias de 220ohm a 1/4W (si, es una para cada led)1 ProtoboardCables o caimanes(si no consiguen de 1/4W que es muy raro no conseguir pueden ser de 1/2W solo que son mas grandes)

Ok primero tomamos el cable de impresora y le cortamos el conector que va conectado a la impresora (para reconocerlo es el que no tiene pines, y sobresale una parte rectangular azul) Ver imagen 

Luego desarmamos el conector del puerto pararelo, nos fijamos en el conector en el frente (mirando los pines por donde conecta) y observamos que hay unos numeros escritos. Cojemos papel y lapiz y anotamos el numero del pin y el color del cable que esta soldado al conector.Una vez tengamos la tabla con numero de pin y color del cable nos disponemos a construir este circuito en el protoboard

Una vez construido en mi caso el circuito se ve asi... Ver imagen 

Ya con el circuito montado podemos pensar en el programa para manejar el puerto.Actualmente el windows XP es ta pero tan seguro (JAJAJAJAJJAJA) que se les ocurrio cerrar el acceso directo a los puertos, asi que para eso toca buscar muy exaustivamente un programa que sirve justo para lo que necesitamos manejar unos relees para encender y apagar cosas, este programa viene con una solucion de timer para organizar eventos por medio del puerto paralelo.Aqui anexo la direccion de donde pueden bajar el programa.

http://electronickits.com/kit/comple...01Software.ZIP

instalenlo con toda tranquilidad y despues reinicien el pc.el programa se ve asi...

 

Como ven el programa es muy sencillo, se enciende el pin que se quier encendido y listo, no olviden que para que el prograam envie informacion al puerto el botono de Activate debe estar encendidoUna vez jueguen bastante con el programita y creen qu etodo quedo bien y funciona el montaje podemos pasar a la parte 2 control! JEJEJE

Mapa Conceptual

1. ¿Qué es un puerto?

2. Puerto Paralelo

3. Buscando Direcciones del Puerto Paralelo

5. Programando el Puerto Paralelo

6. Programando en Windows 2000/XP

8. Conector Puerto Paralelo

10. DATA Port

11. Leyendo STATUS Port

12. CONTROL port

13. Consejos Prácticos

14. Ejercicio I

15. Ejercicio II

16. Lectura Pto. Paralelo mediante interrupción ACK

17. Ejercicio

R e f e r e n c i a s

(1/17)   República del Saber Ensamblador: "Puerto Paralelo"

¿Qué es un puerto?

<< [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] >>   [Notas]  [Ref] [CSS]

Puerto: Es un conjunto de líneas (interfaz) que puede utilizar el CPU para intercambiar información con otros dispositivos [1]

Puerto Paralelo: Transmite más de un bit a la vez, e.g. 8-bits

Puerto Serie: Transmite un bit a la vez, e.g. RS-232

(1-Notas/17)   República del Saber Ensamblador: "Puerto Paralelo"

¿Qué es un puerto?

<< [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] >>   [Notas]  [Ref] [CSS]

Notas:

INICIO:

MOV AL,01MOV DX, 0378OUT DX,ALMOV CX,32

AMARILLO:DEC CXCMP CX,0JA AMARILLO

MOV AL,02MOV DX, 0378OUT DX,ALMOV CX,32

ROJO:DEC CXCMP CX,0JA ROJO

MOV AL,04MOV DX, 0378OUT DX,ALMOV CX,32

VERDE:DEC CXCMP CX,0JA VERDE

JMP INICIOAlumno(s): David Hinojos, Osbaldo Quezada, Hansi Herrera

hans1dav1d@hotmail.com,anonimo_109@hotmail.com,roccky12@hotmail.com----- 20/Oct/05 7:13pm -----

(2/17)   República del Saber Ensamblador: "Puerto Paralelo"

Puerto Paralelo

<< [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] >>  [Ref] [CSS]

Pto. Paralelo: Originalmente, el puerto paralelo de la PC, fué pensado para conectar impresoras, pero puede ser usado para manejar dispositivos en general

Las 12 salidas TTL (0-5v) usan latches internos y pueden programarse vía instrucciones IN/OUT del CPU

Las 5 entradas son "steady-state input points" y pueden programarse vía instrucciones IN del CPU

Las 3 direcciones del puerto (DATA, STATUS, CONTROL) inician comúnmente en la 378H (otras direcciones comunes son la 278H y 3BCH)

Una de las líneas de entrada es además una interrupción (que puede habilitarse vía programa) y ademas hay una línea tipo "power-on reset"

(3/17)   República del Saber Ensamblador: "Puerto Paralelo"

Buscando Direcciones del Puerto Paralelo

<< [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] >>  [Ref] [CSS]

Normalmente la PC tiene definidos tres puertos paralelo de impresión: LPT1, LPT2 y LPT3

LPT: En las localidades 0000:0408H a 0000:040DH de la PC se encuentran las direcciones de cada puerto [5]

EJEMPLO: Sean los siguientes valores de una PC hipotética

Tabla 1. LPT1 se localiza en 378H, LPT2 en 278H y LPT3 no está presente.

Dir. 408H 409H 40AH 40BH 40CH 40DH

Val. 78H 03H 78H 02H 00H 00H(4/17)   República del Saber Ensamblador: "Puerto

Paralelo"

Buscando Direcciones del Puerto Paralelo

<< [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] >>  [Ref] [CSS]

Puertos del Pto. Paralelo: Podemos localizar la dirección precisa de cada puerto paralelo en una PC de las siguientes formas:

Desde DEBUG: Mediante el comando d 0:408 40d

Desde Windows: Inicio / Configuración / Panel de Control / Sistema / Administrador de Dispositivos / Puertos (COM y LPT) / Puerto de Impresora / Recursos

(5/17)   República del Saber Ensamblador: "Puerto Paralelo"

Programando el Puerto Paralelo

<< [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] >>   [Notas]  [Ref] [CSS]

Control de Impresora: Se envían datos ó comandos seguidos de una señal strobe que ocasiona que la impresora lea el puerto y responda por las líneas de status cuando esté lista para recibir más información (not bussy) ó en su defecto, indica si hay algún error

Opciones para Controlar el Puerto Paralelo [4]:

Acceso Directo: Usando ensamblador o un lenguaje de programación, leyendo variables del sistema, manipulando bits y leyendo/escribiendo puertos

Via BIOS: La INT 17H del BIOS provée 3 servicios: inicializar, imprimir y status (sólo trabajan para LPT1)

Via DOS: La INT 21H servicio 05h escribe un caracter y el servicio 40h que trabaja con archivos

(5-Notas/17)   República del Saber Ensamblador: "Puerto Paralelo"

Programando el Puerto Paralelo

<< [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] >>   [Notas]  [Ref] [CSS]

Notas:

;port.asm controlar un led por medio del puerto

BITS 16ORG 0x0100SECTION .textNL 10,13PRINT 1 ; PRINT STRING$MOV AH, 9MOV DX, %1INT 21HFOCO 1MOV AL, %1MOV DX, 378HOUT DX, AL

PRINT msgFOCO 80HCALL GETCHPRINT VRDFOCO 100BCALL GETCHCALL AMARILLOINT 20H

GETCH ;ESPERA QUE PRESIONES UNA TECLA PARA EL CAMBIOPUSH DXPRINT msg2MOV AH, 10HINT 16HPOP DXRET

AMARILLO ; SIMULA EL CAMBIO DE COLOR EN EL SEMAFOROMOV CX, 10H ; REPETICIONESMOV AL, 80HCICLO:OUT DX, ALXOR AL, 81HPUSH CXCALL DELAYPOP CXLOOP CICLOPRINT AMRROJO:FOCO 1000BPRINT RJCALL DELAYCALL DELAYCALL DELAYCALL DELAYFOCO 0BPRINT BYERET

DELAYMOV CX, 10ffHD10:PUSH CXD20:LOOP D20POP CXLOOP D10RET

SECTION .data

msg db \'CONTROLANDO LOS LEDs CON EL PUERTO PARALELO\',NL,\'$\'msg2 db \'Prensa cualquier tecla para continuar\',NL,\'$\'VRD db \'CAMBIA A VERDE\',NL,\'$\'AMR db \'CAMBIO A AMARILLO\',NL,\'$\'RJ db \'CAMBIA A ROJO\',NL,\'$\'BYE db \'Alumnos:\',NL,\'Adriana Escamilla, Cynthia Trevizo, Rafael Rico$\'Alumno(s): Adriana Escamilla, Cynthia Trevizo, Rafael Rico dark.pato@gmail.com----- 20/Oct/05 7:29pm -----

(6/17)   República del Saber Ensamblador: "Puerto Paralelo"

Programando en Windows 2000/XP

<< [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] >>   [Notas]  [Ref] [CSS]

Problema: Los sistemas operativos Windows 2000 y XP no permiten que las aplicaciones accesen directamente el puerto paralero,i.e. instrucciones OUT, IN

Solución: Afortunadamente es posible bajar de Internet un driver que permite programar el puerto paralelo como sigue:

1. Consulte Driver, baje y descomprima el archivo ZIP

2. Copie el archivo userport.sys al directorio C:\WINDOWS\SYSTEM32\DRIVERS

3. Ejecute el programa userport.exe (acepte los defaults)

4. Ejecute sus programas de ensamblador

(6-Notas/17)   República del Saber Ensamblador: "Puerto Paralelo"

Programando en Windows 2000/XP

<< [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] >>   [Notas]  [Ref] [CSS]

Notas:

Que tal, muy buena la informacion ya la habia utilizado una ocacion y todo habia servido bien, pero segun parece el programa userport no funciona bajo XP SP2, hay alguna forma de solucionar este problema?, gracias.

Alumno(s): darrenup@gmail.com----- 20/Oct/2005 9:19pm -----

(7/17)   República del Saber Ensamblador: "Puerto Paralelo"

Puerto Paralelo

<< [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] >>  [Ref] [CSS]

El puerto paralelo de la IBM-PC original usa un conector de 25 terminales TTL [Fig. 1]: 12 salidas y 5 entradas digitales accedidas por 3 puertos I/O de 8-bits consecutivos [2]

El Puerto DATA (378H): tiene 8 terminales de salida (max 2.5 mA)

El puerto STATUS (379H): tiene 5 terminales de entrada (negadas)

El puerto CONTROL (37AH): tiene 4 terminales de salida (3 de ellas negadas)

Tierra: Las restantes 8 terminales están aterrizadas

(8/17)   República del Saber Ensamblador: "Puerto Paralelo"

Conector Puerto Paralelo

<< [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] >>  [Ref] [CSS]

Fig. 1. Diagrama del conector del puerto paralelo

Tabla 2. IBM-PC Parallel Printer Port DB-25 Socket Pin layout

Signal Name Register Bit DB-25 Pin I/O Direction

Strobe ¬C0 1 Output

Data Bit 0 D0 2 Output

Data Bit 1 D1 3 Output

Data Bit 2 D2 4 Output

Data Bit 3 D3 5 Output

Data Bit 4 D4 6 Output

Data Bit 5 D5 7 Output

Data Bit 6 D6 8 Output

Data Bit 7 D7 9 Output

Acknowledge S6 10 Input

Busy ¬S7 11 Input

Paper End S5 12 Input

Select In S4 13 Input

Auto Feed ¬C1 14 Output

Error S3 15 Input

Initialize C2 16 Output

Select ¬C3 17 Output

Ground - 18-25 -

(9/17)   República del Saber Ensamblador: "Puerto Paralelo"

Conector Puerto Paralelo

<< [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] >>  [Ref] [CSS]

Centronics (standard) - 36 pin connector layout

IBM-PC Centronics Parallel Printer Port Female Connector 36-Pin layout ______________________________________________________/ \\\\ 1 2 3 4 ... ... 16 17 18 / \\ / \\ 19 20 21 ... ... 34 35 36 / \\________________________________________________/

Direction is relative to printer. I: Host->Printer O: Printer->Host

pin dir function 1 I !STROBE 2 I DATA0 - Data bit 1 3 I DATA1 - Data bit 2 4 I DATA2 - Data bit 3 5 I DATA3 - Data bit 4 6 I DATA4 - Data bit 5 7 I DATA5 - Data bit 6 8 I DATA6 - Data bit 7 9 I DATA7 - Data bit 810 O !ACKNLG - Acknoledge: received data11 O BUSY12 O PE - Paper End13 O SLCT - Select14 I !AUTOLF - Auto Line Feed (XT)15 - n.c.16 - 0V17 - CHASSIS GND - shield18 - n.c.19 - GND... - ...30 - GND31 I !INIT - Initialize/Reset32 O !ERROR - (PE, OFF-LINE, other errors)33 - GND34 - n.c.35 - LOGIC1 - pull-up 3.3k ohm36 I !SLCTIN - Select input

(10/17)   República del Saber Ensamblador: "Puerto Paralelo"

DATA Port

<< [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] >>  [Ref] [CSS]

Escritura: Escribe 8-bits de salida que conservarán su estado indefinidamente o hasta la próxima escritura. La salida TTL (0-5v) no debe ser mayor de 2.6mA

y NO debe conectar ninguna de estas terminales a tierra!

MOV DX, 378HOUT DX, AL

Lectura: Si no hay carga (dispositivo) regresa el último dato escrito. Si hay carga regresa la operación OR del último valor escrito y el valor que envié el dispositivo externo (máx. 24mA)

MOV DX, 378HIN AL, DX

Tabla 3. DATA Port

Bit 7 6 5 4 3 2 1 0

Pin 9 8 7 6 5 4 3 2

Nota: El nivel high/1 va de 2.4-5v; El nivel low/0 va de 0-0.5v [6]

(11/17)   República del Saber Ensamblador: "Puerto Paralelo"

Leyendo STATUS Port

<< [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] >>  [Ref] [CSS]

379H: Regresa el contenido de los 5-bits de status

Tabla 4. STATUS Port

Bit 7 6 5 4 3 2 1 0

Pin 11 10 12 13 15 - - -

Tabla 5. Significado de cada Bit

Bit Name Descrip

Bit-2 ? IRQ status

Bit-3 ERROR Device Error

Bit-4 SLCT Device Select In

Bit-5 PE Device Out of Paper

Bit-6 ACK Printer Acknowledge

Bit-7 -BUSY Printer Busy

(12/17)   República del Saber Ensamblador: "Puerto Paralelo"

CONTROL port

<< [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] >>  [Ref] [CSS]

37AH: Reconoce como salidas los 5-bits menos significativos (algunos de ellos negados). La salida TTL (0.8-5v) no debe exceder los 7mA (estas salidas usan una resistencia interna de 4.7Ω)

37AH: Si no hay carga regresa el último dato escrito (5-bits). Si hay carga regresa la combinación OR de los 5-bits menos significativos del último dato escrito y el valor enviado por el dispositivo

Tabla 6. STATUS Port

Bit 7 6 5 4 ~3 2 ~1 ~0

Pin - - - IRQenable 17 16 14 1

Tabla 7. Significado de cada Bit

Bit-0 Strobe (data available=1)

Bit-1 Auto Feed (add linefeed=1)

Bit-2 Initialize (init printer=0)

Bit-3 Select Input (on-line=1)

Bit-4 Enable parallel port IRQ (active=1)

Tabla 8. Valores de lectura iniciales del puerto

Bit 7 6 5 4 ~3 2 ~1 ~0

Data - - - 0 1 0 1 1

(13/17)   República del Saber Ensamblador: "Puerto Paralelo"

Consejos Prácticos

<< [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] >>  [Ref] [CSS]

Consejos: para acoplar circuitos al Puerto Paralelo [7]

Aisla y aterriza correctamente tu circuito, e.g. optoacopladores

Experimenta primero en una computadora vieja, no uses tu laptop o una computadora con puerto paralelo integrado al motherboard

Usa de preferencia que tenga una extensión de un segundo puerto paralelo (LPT2)

No conectes o manipules tus circuitos mientras la computadora esta encendida

No aterrizes ni sobrecargues las salidas

No utilices altos voltajes CD o voltajes de CA a menos de que tengas correctamente aisladas dichas señales, e.g. optoacopladores

(14/17)   República del Saber Ensamblador: "Puerto Paralelo"

Ejercicio I

<< [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] >>  [Ref] [CSS]

1. Conecte el cable de impresora (Centronics 36-pin) a la computadora

2. Conecte el anodo de un "led" a la terminal-2 y el cátodo a la terminal-19 (tierra)

3. Inicie el programa "debug"

Busque la dirección del puerto de datos: d 0:408 40d Encienda el led escribiendo un "1" al bit-0 del puerto de datos: o 378 1 Apague el led escribiendo un "0" al bit-0 del puerto de datos: o 378 0

(15/17)   República del Saber Ensamblador: "Puerto Paralelo"

Ejercicio II

<< [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] >>  [Ref] [CSS]

; pto.asm: Conector Centronics leds en pin-2/pin-19 y pin-9/pin-30; Operación: Enciende pin-9, enter, enciende pin-2, enter, flasher

BITS 16ORG 0x0100SECTION .text

Main mov dx, 378h ; direccion de DATA-PORT mov al, 80h ; led-d7=on (pin-9) out dx, al call Getch mov al, 1 ; led-d0=on (pin-2) out dx, al call Getch call Flash xor al, al ; apagar leds out dx, al int 20h

Flash ; Prende/Apaga "cx" veces ambos leds mov cx, 14h ; repeticiones mov al, 80h ; experimentar con "81h"Fciclo: out dx, al xor al, 81h push cx call Delay pop cx loop Fciclo ret

Getch ; Espera tecla ENTER push dx ; save port-addr mov dx, Msj mov ah, 9 int 21h mov ah, 10h int 16h pop dx ; restore port-addr ret

Delay ; Retardo mov cx, 10ffhD10: push cxD20: loop D20 pop cx loop D10 ret

SECTION .data

Msj db 'Pulse enter para continuar',10,13,'$'

(16/17)   República del Saber Ensamblador: "Puerto Paralelo"

Lectura Pto. Paralelo mediante interrupción ACK

<< [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] >>  [Ref] [CSS]

; PPI.ASM: READ PARALLEL PORT WHEN THERE IS AN INTERRUPT; USE: Connect DATA7 (Pin 9) to ACK (Pin 10) on a male DB25 connector; REF: Craig Peacock, Interfacing the Standard Parallel Port, Feb 1998; www.senet.com.au/cpeacock ; Email - cpeacock@senet.com.au

BITS 16ORG 0x0100

IRQ EQU 0FH ; PARALLEL PORT'S INT THAT ACCEPTS IRQs

DATA EQU 378H ; DATA PORTSTAT EQU DATA+1 ; STATUSCTRL EQU DATA+2 ; CONTROL

PIC EQU 20H ; PIC ADDRESSPICMASK EQU (1 << 7) ; PIC'S MASK FOR IRQ 7

RETARDO EQU 7000H

%MACRO OUTP 2 ; OUTPUT PORT MOV DX, %1 ; PORT-ADDR MOV AL, %2 ; DATA OUT DX, AL%ENDMACRO

%MACRO CLRPORT 2 ; CLEAR PORT BITS MOV DX, %1 IN AL, DX AND AL, %2 OUT DX, AL%ENDMACRO

%MACRO SETPORT 2 ; SET PORT BITS MOV DX, %1 IN AL, DX OR AL, %2 OUT DX, AL%ENDMACRO

%MACRO WRITE 1 MOV AH, 0EH MOV AL, %1 MOV BX, 0002H INT 10H%ENDMACRO

%MACRO PRINT 1 MOV AH, 9 MOV DX, %1 INT 21H%ENDMACRO

SEGMENT .text

MAIN: JMP LOADER

INT15: ; NEW INT 0FH CLI ; DON'T DISTURB WRITE ':' ; SMILE FACE WRITE '-' WRITE ')' WRITE 7 ; BEEP OUTP PIC, 20H ; END-OF-INTERRUPT STI ; ACCEPT COMING IRQs IRET

LOADER: MOV AH, 35H ; READ OLD INT MOV AL, IRQ INT 21H

MOV [OLDINT+0],BX ; SAVE OLD INT MOV [OLDINT+2],ES

MOV AH, 25H ; SET NEW INT FOR PP'S IRQ MOV AL, IRQ MOV DX, INT15 ; DS:DX INT 21H

CLRPORT CTRL, 0DFH ; DATA-OUTPUT MODE CLRPORT PIC+1,0FFH-PICMASK ; UN-MASK PIC SETPORT CTRL, 10H ; ENABLE PARALLEL PORT IRQ

PRINT MSJ1 ; PRINT 'BEGIN'

; GENERATE A PULSE IN DATA PORT OUTP DATA, 0FFH ; OUT 1'S CALL DELAY OUTP DATA, 0 ; OUT 0'S CALL DELAY OUTP DATA, 0FFH ; OUT 1'S CALL DELAY

PRINT MSJ2 ; PRINT 'END'

CLRPORT CTRL, 0EFH ; DISABLE PP IRQ SETPORT PIC+1, PICMASK ; MASK PIC

MOV DX, [OLDINT+0]; RESET OLD INT DS:DX MOV AX, [OLDINT+2] MOV DS, AX MOV AH, 25H ; RESET INT 15 MOV AL, IRQ INT 21H

INT 20H ; EXIT

DELAY: MOV CX, RETARDOD1: PUSH CXD2: LOOP D2 POP CX LOOP D1 RET

SEGMENT .data

OLDINT DW 0,0 MSJ1 DB 'BEGIN..$' MSJ2 DB ' ..END$'

top related