PROGRAMACIÓN DEL PUERTO PARALELO

Anuncio
PROGRAMACIÓN DEL PUERTO PARALELO
El puerto paralelo de una PC es ideal para ser usado como herramienta
de control de motores, 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
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.
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 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.
Option Explicit
Public Out_TTL As Byte
Public In_Port As Integer
Public Out_Port As Integer
'contiene el BYTE a sacar por el puerto
'contine la dirección de lectura del LPT
'contiene la direcc.para escribir al LPT
Private Sub Form_Load()
'procedimiento inicial
'Configura la COMBOLIST cmbLptSelect
cmbLptSelect.AddItem "0x378"
cmbLptSelect.AddItem "0x278"
cmbLptSelect.AddItem "0x3BC"
'Establece LPT1 como default
cmbLptSelect.ListIndex = 0
SetLPTAddress
'estable direccion base del LTP
Port_Reset
'reseteo salidas TTL
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As
Integer)
Cancel = 1
'evita que se salga mediante la 'X'
End Sub
Private Sub Form_Unload(Cancel As Integer) 'si sale del programa
Port_Reset
'entonces reseteo salidas TTL
End
End Sub
Private Sub cmdSalir_Click() 'si presiono SALIR, reseteo
Port_Reset
'las salidas TTL y salgo del programa
End
End Sub
Private Sub Port_Reset()
PortOut Out_Port, 0
End Sub
'procedimiento para resetear salidas TTL
Private Sub cmbLptSelect_Click()
SetLPTAddress
'llamo rutina para determinarar la direccion
'base del nuevo LPT elegido
End Sub
Private Sub cmdHelpOnLpt_Click()
frmHelpOnLpt.Show
End Sub
Private Sub SetLPTAddress() 'establece la direccion correpondiente
'al puerto seleccionado
Select Case cmbLptSelect.ListIndex
Case Is = 0
Out_Port = &H378
Case Is = 1
Out_Port = &H278
Case Is = 2
Out_Port = &H3BC
End Select
In_Port = Out_Port + 1
End Sub
Private Sub Chkttl0_Click()
'invierto estado de TTL0
If chkTTL0.Value = 1 Then
SetPortBit Out_Port, 0
chkTTL0.Caption = "Salida TTL0 = 1 - ALTO"
Else
ClrPortBit Out_Port, 0
chkTTL0.Caption = "Salida TTL0 = 0 - BAJO"
End If
End Sub
Private Sub Chkttl1_Click()
'invierto estado de TTL1
If chkTTL1.Value = 1 Then
SetPortBit Out_Port, 1
chkTTL1.Caption = "Salida TTL1 = 1 - ALTO"
Else
ClrPortBit Out_Port, 1
chkTTL1.Caption = "Salida TTL1 = 0 - BAJO"
End If
End Sub
Private Sub Chkttl2_Click()
'invierto estado de TTL2
If chkTTL2.Value = 1 Then
SetPortBit Out_Port, 2
chkTTL2.Caption = "Salida TTL2 = 1 - ALTO"
Else
ClrPortBit Out_Port, 2
chkTTL2.Caption = "Salida TTL2 = 0 - BAJO"
End If
End Sub
Private Sub Chkttl3_Click()
'invierto estado de TTL3
If chkTTL3.Value = 1 Then
SetPortBit Out_Port, 3
chkTTL3.Caption = "Salida TTL3 = 1 - ALTO"
Else
ClrPortBit Out_Port, 3
chkTTL3.Caption = "Salida TTL3 = 0 - BAJO"
End If
End Sub
Private Sub Chkttl4_Click()
'invierto estado de TTL4
If chkTTL4.Value = 1 Then
SetPortBit Out_Port, 4
chkTTL4.Caption = "Salida TTL4 = 1 - ALTO"
Else
ClrPortBit Out_Port, 4
chkTTL4.Caption = "Salida TTL4 = 0 - BAJO"
End If
End Sub
Private Sub Chkttl5_Click()
'invierto estado de TTL5
If chkTTL5.Value = 1 Then
SetPortBit Out_Port, 5
chkTTL5.Caption = "Salida TTL5 = 1 - ALTO"
Else
ClrPortBit Out_Port, 5
chkTTL5.Caption = "Salida TTL5 = 0 - BAJO"
End If
End Sub
Private Sub Chkttl6_Click()
'invierto estado de TTL6
If chkTTL6.Value = 1 Then
SetPortBit Out_Port, 6
chkTTL6.Caption = "Salida TTL6 = 1 - ALTO"
Else
ClrPortBit Out_Port, 6
chkTTL6.Caption = "Salida TTL6 = 0 - BAJO"
End If
End Sub
Private Sub Chkttl7_Click()
'invierto estado de TTL7
If chkTTL7.Value = 1 Then
SetPortBit Out_Port, 7
chkTTL7.Caption = "Salida TTL7 = 1 - ALTO"
Else
ClrPortBit Out_Port, 7
chkTTL7.Caption = "Salida TTL7 = 0 - BAJO"
End If
End Sub
Private Sub Timer1_Timer()
'timer de 50ms para refrescar en
Dim Lectura As Byte
'pantalla el estado de las
Dim Estado(3) As Byte
'entradas INPUT 0 a 3
Dim Estado_Str(3) As String
Dim Bucle As Byte
Lectura = PortIn(In_Port)
'leo el puerto de entrada
'filtro solo los bit's que necesito conocer
Estado(0) = Lectura And &H8
'= 00001000 en Binario
Estado(1) = Lectura And &H10
'= 00010000 en Binario
Estado(2) = Lectura And &H20
'= 00100000 en Binario
Estado(3) = Lectura And &H40
'= 01000000 en Binario
For Bucle = 0 To 3
If Estado(Bucle) <> 0 Then
Estado_Str(Bucle) = "1 - ALTO"
Else
Estado_Str(Bucle) = "0 - BAJO"
End If
Next Bucle
lblInput0.Caption = "INPUT 0 = " & Estado_Str(0)
lblInput1.Caption = "INPUT 1 = " & Estado_Str(1)
lblInput2.Caption = "INPUT 2 = " & Estado_Str(2)
lblInput3.Caption = "INPUT 3 = " & Estado_Str(3)
End Sub
Descargar