puerto paralelo y vb

14
Conexión del Puerto paralelo Por: Leonardo Hidrovo y Gissela Vera Estudiantes de Ingeniería en Sistemas de la UTEQ Las comunicaciones en paralelo se realizan mediante la transferencia simultánea de todos los bits que constituyen el dato (byte o palabra). Presentan la ventaja de que la transmisión puede ser más rápida. Sin embargo, las comunicaciones en paralelo no pueden ser implementadas para grandes distancias debido a que no es viable la conexión física de todas las líneas necesarias. Las comunicaciones en paralelo propiamente dichas no han sido normalizadas, lo que sí se reconoce es la norma Centronic, para la conexión del PC a la impresora, mediante el envío simultáneo de 8 bits de datos (un byte), además de un conjunto de líneas de protocolo (handshake o intercambio). La operación más frecuente en la que interviene el puerto paralelo del PC es en el envío de datos a la impresora. Los antiguos circuitos integrados que se incluían en las tarjetas de interface del puerto paralelo no permitían la recepción de datos, sólo estaban diseñados para el envío de información al exterior. Las versiones recientes de estas tarjetas de interface de puertos paralelo sí permiten la recepción de datos y dan la posibilidad, por ejemplo, de intercambiar información entre PC a través del puerto paralelo, siempre que se utilice el software adecuado. La norma Centronics hace referencia a las características de la conexión entre un interface de puerto paralelo y una impresora. Las líneas son latcheadas, esto es, mantienen siempre el último valor establecido en ellas mientras no se cambien expresamente y los niveles de tensión y de corriente coinciden con los niveles de la lógica TTL, cuyos valores típicos son: -Tensión de nivel alto: 5 V. -Tensión de nivel bajo: 0 v. -Intensidad de salida máxima: 2.6 mA. -Intensidad de entrada máxima: 24 mA. La norma Centronics establece el nombre y las características de 36 líneas eléctricas para la conexión entre el PC y la impresora. En realidad, para la transferencia de las señales de datos y de control a través de la tarjeta de interface paralelo sólo se requieren 18 líneas, las restantes son líneas de masa que se enrollan alrededor de los cables de señal para proporcionarles apantallamiento y protección contra interferencias. Por esto, las citadas tarjetas suelen incorporar un conector hembra DB-25, mientras que prácticamente todas las impresoras incorporan un conector hembra tipo Centronics macho de 36 pines, Los cables comerciales para la conexión paralelo entre el PC y la impresora tienen una longitud de 2 metros, aunque no es recomendable que tengan una longitud superior a 5 metros si se desea una conexión fiable y sin interferencias.

Upload: leu-hidrovo-contreras

Post on 28-Nov-2014

232 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Puerto Paralelo y Vb

Conexión del Puerto paralelo

Por: Leonardo Hidrovo y Gissela Vera Estudiantes de Ingeniería en Sistemas de la UTEQ

Las comunicaciones en paralelo se realizan mediante la transferencia simultánea de todos los bits que constituyen el dato (byte o palabra). Presentan la ventaja de que la transmisión puede ser más rápida. Sin embargo, las comunicaciones en paralelo no pueden ser implementadas para grandes distancias debido a que no es viable la conexión física de todas las líneas necesarias. Las comunicaciones en paralelo propiamente dichas no han sido normalizadas, lo que sí se reconoce es la norma Centronic, para la conexión del PC a la impresora, mediante el envío simultáneo de 8 bits de datos (un byte), además de un conjunto de líneas de protocolo (handshake o intercambio). La operación más frecuente en la que interviene el puerto paralelo del PC es en el envío de datos a la impresora. Los antiguos circuitos integrados que se incluían en las tarjetas de interface del puerto paralelo no permitían la recepción de datos, sólo estaban diseñados para el envío de información al exterior. Las versiones recientes de estas tarjetas de interface de puertos paralelo sí permiten la recepción de datos y dan la posibilidad, por ejemplo, de intercambiar información entre PC a través del puerto paralelo, siempre que se utilice el software adecuado. La norma Centronics hace referencia a las características de la conexión entre un interface de puerto paralelo y una impresora. Las líneas son latcheadas, esto es, mantienen siempre el último valor establecido en ellas mientras no se cambien expresamente y los niveles de tensión y de corriente coinciden con los niveles de la lógica TTL, cuyos valores típicos son:

-Tensión de nivel alto: 5 V. -Tensión de nivel bajo: 0 v. -Intensidad de salida máxima: 2.6 mA. -Intensidad de entrada máxima: 24 mA.

La norma Centronics establece el nombre y las características de 36 líneas eléctricas para la conexión entre el PC y la impresora. En realidad, para la transferencia de las señales de datos y de control a través de la tarjeta de interface paralelo sólo se requieren 18 líneas, las restantes son líneas de masa que se enrollan alrededor de los cables de señal para proporcionarles apantallamiento y protección contra interferencias. Por esto, las citadas tarjetas suelen incorporar un conector hembra DB-25, mientras que prácticamente todas las impresoras incorporan un conector hembra tipo Centronics macho de 36 pines, Los cables comerciales para la conexión paralelo entre el PC y la impresora tienen una longitud de 2 metros, aunque no es recomendable que tengan una longitud superior a 5 metros si se desea una conexión fiable y sin interferencias.

Page 2: Puerto Paralelo y Vb

Conectores del Puerto Paralelo (DB25). Aquí tienes una imagen de los conectores

Cada pin de los conectores tiene un número asignado por lo cual es muy importante que al

armar tus propios cables los identifiques correctamente

Este puerto dispone de tres registros de 8 bit cada uno (un byte).cada uno de estos registros se

denominan puertos o PORT., y cada uno de sus bits, representa un pin determinado del

puerto. Los pin que van del 18 al 25 (ambos inclusive): Son para masa, y sirven para conectar

las descargas de los circuitos.

Veamos ahora los tres registros

Puerto de datos (Pin 2 al 9): Es el PORT 378 en hexadecimal y es de solo escritura, por este

registro enviaremos los datos al exterior de la PC. No envíes señales eléctricas al ordenador

por estos pines. Puerto de estado (Pin 15, 13, 12, 10 y 11): Es el PORT 379 en hexadecimal y es

de solo lectura, por aquí enviaremos señales eléctricas al ordenador, de este registro solo se

utilizan los cinco bits de más peso, que son el bit 7, 6, 5, 4 y 3 teniendo en cuenta que el bit 7

funciona en modo invertido. Puerto de control (Pin 1, 14, 16 y 17): Es el correspondiente al

PORT 37A en hexadecimal y es de lectura/escritura, es decir, podremos enviar o recibir señales

eléctricas, según nuestras necesidades. De los 8 bits de este registro solo se utilizan los cuatro

de menor peso o sea el 0, 1, 2 y 3, con un pequeño detalle, los bits 0, 1, y 3 están invertidos

En esta imagen puedes ver los tres registros, sus bits y los pines asignados a cada uno de ellos.

La imagen corresponde a un conector DB-25 (Hembra).

Page 3: Puerto Paralelo y Vb

Para controlar el estado de los pines del puerto paralelo basta con escribir un número entero positivo de 8 bits en la dirección del mismo. El pin de datos 0, que físicamente está conectado al terminal 2 del conector, asume el peso 1. Este es el bit de menos peso en la palabra de datos de dicho puerto. Siguiendo la tabla de abajo observará que es muy simple manejar puntualmente cada uno de los pines.

Terminal 2 3 4 5 6 7 8 9

Bit 0 1 2 3 4 5 6 7

Peso 1 2 4 8 16 32 64 128

Por ejemplo, los datos 1, 2, 4, 8, 16, 32, 64 y 128, encenderían cada uno de los terminales D0 a D7. Si queremos activar el terminal D3 escribiríamos la siguiente instrucción en visual

out ( &H0x378, 8)

Instrucción (puerto, dato)

Si queremos hacer que los terminales 4, 6, 8 y 9 del puerto paralelo se enciendan quedando los otros apagados debemos sumar los valores correspondientes a esos pines y enviar dicho resultado a la dirección del puerto. En este ejemplo el dato a enviar sería: 4 + 16 + 64 + 128 lo que equivale a 212 Para que todos los pines se enciendan tendremos que enviar el valor 255, mientras que para que todos se apaguen deberemos enviar el valor 0. La dirección del puerto LPT1 usualmente es 378, la del puerto LPT2 suele ser 278 y la del puerto LPT3 casi siempre es 3BC. Aunque esto depende de cómo esté configurado su hardware. Una forma de determinar la dirección del puerto es presionando la tecla Pause al comienzo de la carga del sistema operativo. Verá una tabla donde el BIOS reporta los parámetros básicos del equipo, incluyendo datos sobre los puertos.

CONTROL DEL PUERTO PARALELO

CONTROL EN APLICACIONES DE ELECTRÓNICA

1. Circuito de Control de LED

Este circuito permite controlar “encender” un LED el cual recibe corriente desde uno de los

pines de datos del puerto paralelo y también nos permite conocer si el LED está encendido

o apagado por medio de un pin de estado del LPT conectado al circuito.

Page 4: Puerto Paralelo y Vb

Materiales

1 diodo LED

1 resistencia de 220ohm

1 transistor de tipo NPN

Una plaqueta para armar el circuito

1 Conector Db25 Macho

Cable para interconexiones (Puede ser del de Red de 8 Hilos)

Un pequeño interruptor

Los materiales a incluirse son para un solo LED para mayor comprensión. Entendido esto

se puede utilizar los demás bits del puerto para controlar otros LEDS.

Diagrama del circuito

Importante: si se desea controlar más LEDS como en el caso de nuestro proyecto, solo tiene que añadirse un circuito para

cada salida del LPT.

Funcionamiento

El transistor que se encuentra en el diagrama es de tipo PNP el cual permite la conducción de

corriente del emisor E hacia el colector C siempre y cuando se establezca circuito entre el

emisor E que puede recibir corriente de los pines 2-9 y la base B la cual siempre estará

conectada a tierra del puerto paralelo que va desde el pin18 hasta el 25.

Mientras el circuito esté abierto (SWITCH sin presionar), E0 que puede ser cualquiera de los

pines de Estado del LPT se encuentra puesto a tierra. Cuando se cierra circuito (SWITCH

presionado) fluye corriente de D0 (cualquiera de los pines de datos) hacia el emisor del

transistor cerrando circuito mediante la base B y a su vez permite el paso de corriente del

emisor E al colector C que encenderá el LED y el E0 recibirá la señal eléctrica la cual leeremos

desde nuestro programa que determinará si el LED está encendido.

La R1 se encarga de limitar la corriente del puerto paralelo evitando que este se dañe.

B R1

C E

E0

D0

18-25

Fig. 1

Page 5: Puerto Paralelo y Vb

2. Circuito de Control de Luz de C.A. 110V Este circuito permite encender un bombillo de 110v C.A. y de bajo consumo para el cual utilizaremos un dispositivo capaz de accionar potencia a partir de señales débiles de corriente (optoacoplador) como en este caso es el puerto paralelo.

Materiales

1 bombillo de 110V

1 boquilla (para el bombillo)

Cable Nº 22 con su respectivo enchufe

1 resistencia de 220ohm

1 Moc 3010

1 Bornera

1 transistor de tipo NPN

Una plaqueta para armar el circuito

1 Conector Db25 Macho Cable para interconexiones (Puede ser del de Red de 8 Hilos)

Un pequeño interruptor

Diagrama del circuito

Importante: si se desea controlar más dispositivos como lámparas, cafeteras, etc., solo tiene que añadirse un circuito para

cada salida del LPT.

B R1

C E

E0

D0

MOC 3010

110v C.A.

Fig. 2

Page 6: Puerto Paralelo y Vb

Funcionamiento

En este circuito explicaremos el funcionamiento del optoacoplador (MOC 3010) y del sistema

de potencia ya que el resto del circuito tiene el mismo funcionamiento que el de la figura 1

Este es un dispositivo de 6 patas que está sirviendo como aislante entre la etapa de control

(PC) y la de potencia (Dispositivo de C.A., foco, televisión, cafeteras.).

El MOC, contiene en su interior un acoplamiento óptico entre un LED y un fotodiac, cuando

cerramos circuito, el bit1 del puerto paralelo, llega corriente al LED interno del MOC y fluye

corriente a través de este hasta La tierra del puerto Paralelo que va desde el pin18 hasta el 25.

Mientras el circuito esté cerrado el LED del MOC esta encendido (pero no se ve pues está

adentro), frente al LED del MOC, existe un fotodiac, que es un dispositivo típico de disparo,

actúa cuando entre sus 2 terminales hay cierto potencial llamado voltaje de disparo. Pero

este disparo no ocurre si el LED no le proporciona luz.

Por tanto mientras no haya pulso por parte del puerto LPT, el LED no enciende y el fotodiac

no se dispara, es decir no hay paso de corriente desde el pin 6 al pin 4 del MOC. Al haber

pulso, el LED enciende y el fotodiac está habilitado para hacer los disparos, que permitirá la

conducción del pin 6 al pin 4 del MOC que está conectado a 110v y a su vez encenderá el

bombillo.

El fotodiac del MOC se comporta como un aislante o interruptor abierto cuando el LED no

esté encendido y no hace llegar corriente a la carga por lo cual no enciende el bombillo.

Page 7: Puerto Paralelo y Vb

Software en visual basic.net

El programa es muy sencillo. Para poder controlar el puerto es necesario tener en la PC una

dll que gestiona toda la programación del puerto. Esta dll puede ser la io.dll y otra puede ser

la inpout32.dll en este caso usaremos la inpout32.dll que la copiamos a la carpeta del

sistema, es decir en Windows\system32.

Para usar esta librería añadimos un módulo a nuestro proyecto en el cual declaramos lo

siguiente:

Public Declare Function Inp Lib "inpout32.dll" Alias "Inp32" (ByVal PortAddress As Short) As Short

Public Declare Sub Out Lib "inpout32.dll" Alias "Out32" (ByVal PortAddress As Short, ByVal Value

As Short)

Public Declare Function ShellAbout Lib "shell32.dll" Alias "ShellAboutA" (ByVal hwnd As Integer,

ByVal szApp As String, ByVal szOtherStuff As String, ByVal hIcon As Integer) As Integer

PAGINA PRINCIPAL DEL PROGRAMA

En esta parte del programa contiene 3 opciones de menú. En Aplicaciones fig.4. tenemos

dos submenús en el cual podemos escoger lo siguiente:

Control de LEDS

Control de luces

Fig. 3

Fig. 4

Page 8: Puerto Paralelo y Vb

Control de LEDS

Código:

Dim aux() As Integer = {0, 0, 0, 0}

La variable global para este formulario es un vector auxiliar (AUX) de tipo entero que consta de 4 elementos (ya que en este caso usamos 4 LEDS) los cuales son inicializados a cero que significa que están todos apagados.

Private Sub tmrsensor_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs)

Handles tmrsensor.Tick

luces(Inp(&H379))

End Sub

Usamos un TIMER el cual en la propiedad INTERVAL le asignamos el mínimo valor 1 el cual nos servirá como sensor, porque será quien en cada instante (1 milésima de segundo) obtendrá la lectura del puerto con la istruccion Inp (&H379) y está lectura se la envía al procedimiento luces quien determinará si están encendidos o apagados cada uno de los LEDS.

Page 9: Puerto Paralelo y Vb

Sub luces(ByVal valor As Short)

If valor = 199 Then

pct1.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl1.Text = "OFF"

pct2.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl2.Text = "OFF"

pct3.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl3.Text = "OFF"

pct4.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl4.Text = "OFF"

ElseIf valor = 207 Then

pct1.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl1.Text = "OFF"

pct2.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl2.Text = "OFF"

pct3.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl3.Text = "OFF"

pct4.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl4.Text = "ON"

ElseIf valor = 71 Then

pct1.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl1.Text = "OFF"

pct2.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl2.Text = "OFF"

pct3.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl3.Text = "ON"

pct4.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl4.Text = "OFF"

ElseIf valor = 79 Then

pct1.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl1.Text = "OFF"

pct2.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl2.Text = "OFF"

pct3.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl3.Text = "ON"

pct4.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl4.Text = "ON"

ElseIf valor = 231 Then

pct1.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl1.Text = "OFF"

pct2.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl2.Text = "ON"

pct3.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl3.Text = "OFF"

pct4.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl4.Text = "OFF"

ElseIf valor = 239 Then

pct1.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl1.Text = "OFF"

pct2.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl2.Text = "ON"

pct3.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl3.Text = "OFF"

pct4.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl4.Text = "ON"

ElseIf valor = 103 Then

pct1.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl1.Text = "OFF"

pct2.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl2.Text = "ON"

pct3.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl3.Text = "ON"

pct4.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl4.Text = "OFF"

ElseIf valor = 111 Then

pct1.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl1.Text = "OFF"

pct2.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl2.Text = "ON"

pct3.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl3.Text = "ON"

pct4.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl4.Text = "ON"

ElseIf valor = 215 Then

pct1.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl1.Text = "ON"

pct2.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl2.Text = "OFF"

pct3.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl3.Text = "OFF"

pct4.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl4.Text = "OFF"

ElseIf valor = 223 Then

pct1.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl1.Text = "ON"

pct2.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl2.Text = "OFF"

pct3.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl3.Text = "OFF"

pct4.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl4.Text = "ON"

ElseIf valor = 87 Then

pct1.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl1.Text = "ON"

pct2.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl2.Text = "OFF"

pct3.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl3.Text = "ON"

pct4.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl4.Text = "OFF"

ElseIf valor = 95 Then

pct1.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl1.Text = "ON"

pct2.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl2.Text = "OFF"

pct3.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl3.Text = "ON"

pct4.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl4.Text = "ON"

ElseIf valor = 247 Then

pct1.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl1.Text = "ON"

pct2.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl2.Text = "ON"

pct3.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl3.Text = "OFF"

pct4.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl4.Text = "OFF"

ElseIf valor = 255 Then

pct1.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl1.Text = "ON"

pct2.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl2.Text = "ON"

pct3.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl3.Text = "OFF"

pct4.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl4.Text = "ON"

ElseIf valor = 119 Then

pct1.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl1.Text = "ON"

pct2.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl2.Text = "ON"

pct3.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl3.Text = "ON"

pct4.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl4.Text = "OFF"

ElseIf valor = 127 Then

pct1.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl1.Text = "ON"

pct2.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl2.Text = "ON"

pct3.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl3.Text = "ON"

pct4.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl4.Text = "ON"

End If

End Sub

Page 10: Puerto Paralelo y Vb

Este procedimiento nos permite mostrar en la interfaz del programa cuales de los LEDS están encendidos o apagados según la lectura del puerto que llega como parámetro y sirve para cambiar las imágenes de las luces y el texto que se encuentra debajo de los botones. ON=encendido,OFF=apagado. Las condiciones con sus valores se las han elaborado mediante pruebas de lectura.

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles

MyBase.Load

Out(&H378, 0)

tmrsensor.Enabled = True

End Sub

Cuando carga el formulario apagamos todos los LEDS con la instrucción Out(&H378, 0) y habilitamos el TIMER “sensor”.

Private Sub Btn1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles

btn1.Click

If lbl1.Text <> "ON" Then

aux(0) = 1

Else

aux(0) = 0

End If

enciende()

End Sub

Cuando hacemos click en el botón, en este caso el del primer LED verificamos si esta encendido o apagado mediante el texto en el LABEL. Si no está encendido el AUX en la posición 0 será igual a 1 que es el peso correspondiente al primer PIN de datos del LPT, caso contrario el aux en la respectiva posición tomará el valor de 0. Después llamamos al procedimiento enciende el cual se encargará de encender el LED correspondiente. Este código se repite para cada uno de los botones de correspondiente a cada LED. Lo único que cambia es el índice del aux y el peso que se asigna, así por ejemplo: sí es el segundo botón el índice del aux será 1 y el peso correspondiente al segundo PIN de dato que es 2. Si es el botón 3 el índice del aux será 2 con su respectivo peso y así sucesivamente con el resto.

Private Sub btne_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles

btne.Click

Dim i As Integer

For i = 0 To UBound(aux)

aux(i) = 2 ^ i

Next

enciende()

End Sub

Este procedimiento es para encender todos los LEDS del circuito. Para esto utilizamos un ciclo repetitivo como es el FOR el cual recorre el aux y le asigna el peso correspondiente. Usamos la expresión 2 ^ i para el peso de cada uno de los elementos del vector y luego llamamos al procedimiento enciende. Esto se realiza cuando damos click en el botón encender todos del formulario.

Private Sub btna_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles

btna.Click

Dim i As Integer

For i = 0 To UBound(aux)

aux(i) = 0

Next

enciende()

End Sub

Page 11: Puerto Paralelo y Vb

Este código corresponde al evento click del botón apagar todos el cual asiga a todos los elementos del vector aux el valor de 0.

Private Sub enciende()

Dim dato As Integer = 0

Dim i As Integer

For i = 0 To UBound(aux)

dato = dato + aux(i)

Next

Out(&H378, dato)

End Sub

Este procedimiento es el que se encarga de encender los LEDS, para esto recorre el vector aux y sumamos el peso de cada uno de los elementos cuya suma se asigna a la variable dato. Después del ciclo dato contiene la suma de todos los pesos de los elementos del vector el cual se enviará como parámetro a la instrucción Out(&H378, dato) para encender los LEDS.

Código completo del control de LEDS

Public Class leds

Dim aux() As Integer = {0, 0, 0, 0}

Private Sub tmrsensor_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles

tmrsensor.Tick

luces(Inp(&H379))

End Sub

Sub luces(ByVal valor As Short)

If valor = 199 Then

pct1.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl1.Text = "OFF"

pct2.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl2.Text = "OFF"

pct3.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl3.Text = "OFF"

pct4.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl4.Text = "OFF"

ElseIf valor = 207 Then

pct1.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl1.Text = "OFF"

pct2.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl2.Text = "OFF"

pct3.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl3.Text = "OFF"

pct4.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl4.Text = "ON"

ElseIf valor = 71 Then

pct1.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl1.Text = "OFF"

pct2.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl2.Text = "OFF"

pct3.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl3.Text = "ON"

pct4.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl4.Text = "OFF"

ElseIf valor = 79 Then

pct1.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl1.Text = "OFF"

pct2.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl2.Text = "OFF"

pct3.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl3.Text = "ON"

pct4.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl4.Text = "ON"

ElseIf valor = 231 Then

pct1.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl1.Text = "OFF"

pct2.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl2.Text = "ON"

pct3.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl3.Text = "OFF"

pct4.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl4.Text = "OFF"

ElseIf valor = 239 Then

pct1.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl1.Text = "OFF"

pct2.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl2.Text = "ON"

pct3.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl3.Text = "OFF"

pct4.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl4.Text = "ON"

ElseIf valor = 103 Then

pct1.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl1.Text = "OFF"

pct2.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl2.Text = "ON"

pct3.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl3.Text = "ON"

pct4.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl4.Text = "OFF"

ElseIf valor = 111 Then

pct1.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl1.Text = "OFF"

pct2.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl2.Text = "ON"

pct3.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl3.Text = "ON"

pct4.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl4.Text = "ON"

ElseIf valor = 215 Then

pct1.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl1.Text = "ON"

pct2.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl2.Text = "OFF"

pct3.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl3.Text = "OFF"

pct4.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl4.Text = "OFF"

Page 12: Puerto Paralelo y Vb

ElseIf valor = 223 Then

pct1.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl1.Text = "ON"

pct2.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl2.Text = "OFF"

pct3.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl3.Text = "OFF"

pct4.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl4.Text = "ON"

ElseIf valor = 87 Then

pct1.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl1.Text = "ON"

pct2.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl2.Text = "OFF"

pct3.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl3.Text = "ON"

pct4.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl4.Text = "OFF"

ElseIf valor = 95 Then

pct1.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl1.Text = "ON"

pct2.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl2.Text = "OFF"

pct3.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl3.Text = "ON"

pct4.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl4.Text = "ON"

ElseIf valor = 247 Then

pct1.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl1.Text = "ON"

pct2.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl2.Text = "ON"

pct3.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl3.Text = "OFF"

pct4.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl4.Text = "OFF"

ElseIf valor = 255 Then

pct1.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl1.Text = "ON"

pct2.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl2.Text = "ON"

pct3.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl3.Text = "OFF"

pct4.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl4.Text = "ON"

ElseIf valor = 119 Then

pct1.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl1.Text = "ON"

pct2.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl2.Text = "ON"

pct3.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl3.Text = "ON"

pct4.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl4.Text = "OFF"

ElseIf valor = 127 Then

pct1.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl1.Text = "ON"

pct2.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl2.Text = "ON"

pct3.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl3.Text = "ON"

pct4.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl4.Text = "ON"

End If

End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles

MyBase.Load

Out(&H378, 0)

tmrsensor.Enabled = True

End Sub

Private Sub Btn1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles

btn1.Click

If lbl1.Text <> "ON" Then

aux(0) = 1

Else

aux(0) = 0

End If

enciende()

End Sub

Private Sub Btn2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles

btn2.Click

If lbl2.Text <> "ON" Then

aux(1) = 2

Else

aux(1) = 0

End If

enciende()

End Sub

Private Sub Btn3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles

btn3.Click

If lbl3.Text <> "ON" Then

aux(2) = 4

Else

aux(2) = 0

End If

enciende()

End Sub

Private Sub Btn4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles

btn4.Click

If lbl4.Text <> "ON" Then

aux(3) = 8

Else

aux(3) = 0

End If

enciende()

End Sub

Private Sub btne_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles

btne.Click

Dim i As Integer

For i = 0 To UBound(aux)

aux(i) = 2 ^ i

Next

Page 13: Puerto Paralelo y Vb

enciende()

End Sub

Private Sub btna_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles

btna.Click

Dim i As Integer

For i = 0 To UBound(aux)

aux(i) = 0

Next

enciende()

End Sub

Private Sub enciende()

Dim dato As Integer = 0

Dim i As Integer

For i = 0 To UBound(aux)

dato = dato + aux(i)

Next

Out(&H378, dato)

End Sub

End Class

Control de Luces de 110V C.A.

En este caso a no explicaremos el código de este formulario debido a que es casi idéntico al

anterior y el lector sabrá interpretarlo.

Page 14: Puerto Paralelo y Vb

Código completo del control de Luces

Public Class control_de_luces

Dim AUX As Integer = 0

Private Sub btn1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles

btn1.Click

If lbl1.Text <> "ON" Then

AUX = 1

Else

AUX = 0

End If

enciende()

End Sub

Private Sub enciende()

Out(&H378, AUX)

End Sub

Private Sub control_de_luces_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)

Handles MyBase.Load

Out(&H378, 0)

sensor.Enabled = True

End Sub

Sub luces(ByVal valor As Short)

If valor = 127 Then

LBL.Visible = True

ElseIf valor = 223 Then

PCT.Image = Image.FromFile(Application.StartupPath & "\0.png") : lbl1.Text = "OFF"

LBL.Visible = False

ElseIf valor = 95 Then

PCT.Image = Image.FromFile(Application.StartupPath & "\1.png") : lbl1.Text = "ON"

LBL.Visible = False

End If

End Sub

Private Sub SENSOR_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles

SENSOR.Tick

luces(Inp(&H379))

End Sub

End Class