La Web del Programador: Comunidad de Programadores
 
    Pregunta:  16267 - MANEJO DE PUERTA PARALELA EN QBASIC
Autor:  Gustavo Hansen Fleming
Estoy haciendo un programa en qbasic para manejar la puerta paralela conectando un circuito externo (un circuito de alarma) y mi problema es con los pines de entrada.

Yo tengo una hoja donde sale que los pines de entrada son el 14, 15, 16 y 17. Y la rutina en qbasic que me enseñaron para hacer el ingreso de pulsos al computador es la siguiente.

A=Inp(889)

Con esta rutina solo entra pulsos por el pin 15 y no se como Habilitar los Faltantes y ademas quisiera saber si puedo programar con dos pulsos en forma simultanea.

Con los pulsos de salida no tengo problemas.

Gracias...

  Respuesta:  CESAR NAVA SOTO
Yo tambien realice un sistema empleando el puerto paralelo. A continuacion te muestra algo de la informacion que adquiri. Si quieres mas informacion mandame un e-mail.

La configuracion de los pines varia dependiendo de como tengas configurado en el Bios el puerto. Si lo tienes en modo SPP (el modo estandar). Los pines de entrada son del 10 al 17 (bits 0 al 7 respectivamente), y los pines de salida del 2 al 9.

Si lo tienes en modo EPP (el modo mejorado), los pines de salida tambien sirven de entrada (los pines del 2 al 9).

Yo recomiendo usar el modo SPP, para dejar libres los pines de salida. Pero hay que hacer un pequeño truco de conversion en este modo, ya que al leer los datos, los bits 1, 4 y 7 (pines 11, 14 y 17 respectivamente)se leen negadamente. La razon es porque estos pines estan asignados al puerto de control y al puerto de estado de la impresora.

A continuacion te muestro un fragmento de como quedaria el codigo:

Public Function Inp2(intPuerto As Integer) As String
Dim binEstado As String, binControl As String
Dim binDato(7) As String
binEstado = hex2bin(Hex(inp(intPuerto + 1))) 'El puerto de estado
binControl = hex2bin(Hex(inp(intPuerto + 2))) 'El puerto de control
binDato(0) = Mid(binEstado, 2, 1)
binDato(1) = Mid(binEstado, 1, 1)
binDato(2) = Mid(binEstado, 3, 1)
binDato(3) = Mid(binEstado, 4, 1)
binDato(4) = Mid(binControl, 7, 1)
binDato(5) = Mid(binEstado, 5, 1)
binDato(6) = Mid(binControl, 6, 1)
binDato(7) = Mid(binControl, 5, 1)
If binDato(1) = "0" Then
binDato(1) = "1"
Else
binDato(1) = "0"
End If
If binDato(4) = "0" Then
binDato(4) = "1"
Else
binDato(4) = "0"
End If
If binDato(7) = "0" Then
binDato(7) = "1"
Else
binDato(7) = "0"
End If
Inp2 = "&H" & bin2hex(binDato(7) & binDato(6) & binDato(5) & binDato(4) & binDato(3) & binDato(2) & binDato(1) & binDato(0))
End Function