Leer Puertos

Hola Mcbrain mi nobre es Andres Paulino de Rep. Dom mi pregunta es la siguientes me gustaría saber compo puedo leer el puerto de la impresora para saber si hay un cero o un uno lógico en el puerto y de pendiento de la condición hacer una instrucción esto me gustaría hacerlo en visual Basic
Se que con el Inpout32.dll se puede pero no se como usarlo si puedes ayudarme tal vez tenga algún modulo que hago lo que te pido
Gracias de Antemano
Andres
[email protected]

1 respuesta

Respuesta
1
Lo primero que tenés que hacer (luego de haber copiado la DLL en el directorio Windows\system y regístrala) es declarar las funciones en un módulo (VAS)
---------------------------------------------------------------------------
Public Declare Function Inp Lib "inpout32.dll" _
Alias "Inp32" (ByVal PortAddress As Integer) As Integer
Public Declare Sub Out Lib "inpout32.dll" _
Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer)
---------------------------------------------------------------------------
Lo que necesitas luego es definir la dirección del puerto, por ejemplo haciendo una variable privada dentro de tu forumulario:
---------------------------------------------------------------------------
Private PortAddress as Integer
---------------------------------------------------------------------------
Luego necesitas definir la dirección del puerto. Por lo general, si querés trabajar con el LPT1 es 378 (en hexadecimal). Por lo tanto, al iniciar el formulario (o en tu Sub Main) debés cargar dicho valor
---------------------------------------------------------------------------
PortAddress = &H378
---------------------------------------------------------------------------
Otra cosa que debés saber es que el puerto paralelo se divide en 3 "sub-puertos": Datos, Estado y Control.
El puerto de Datos está en la dirección Base (&H378)
El puerto de Estado está en la dirección Base + 1 (&H379)
El puerto de Control está en la dirección Base + 2 (&H380)
Por lo tanto, de acuerdo al "subpuerto" que quieras leer o escribir vas a tener que direccionar a un puerto distinto. Te recomiendo hacer lo siguiente, definí en tu formulario, (o en un módulo como más prefieras)
---------------------------------------------------------------------------
Private Const Base = 0
Private Const Estado = 1
Private Const Control = 2
---------------------------------------------------------------------------
Para luego, usando estas función/subrutina,
---------------------------------------------------------------------------
Private Function Leer (Puerto as Integer)
Leer = Inp (PortAddress + Puerto)
End Function
Private Sub Escribir (Valor as Byte, Puerto as Integer)
Out PortAddress + Puerto, Valor
End Sub
---------------------------------------------------------------------------
poder escribir o leer de la siguiente forma:
Text1.Text = Leer (Base) 'Lectura del puerto base
Text2.Text = Leer(Control) 'Lectura del puerto control
Text3.Text = Leer(Estado) 'Lectura del puerto estado
Escribir Base, 255 ' Setea todos los bits del puerto Base
Escribir Control, 0 ' Resetea todos los bits del puerto Control
Escribir Estado, 1 ' Setea el bit menos significativo y resetea todos el
'resto del puerto Estado
---------------------------------------------------------------------------
Los "subpuertos" están configurados de la siguiente forma (Pin Out). Me refiero, cada uno de los bits que se lean (o escriban) están relacionados con los siguientes pines:
BASE
2
3
4
5
6
7
8
9
Estado
Reservado
Reservado
-IRQ
15 ERROR
17 Seleccionado
12 Sin Papel
10 -Ack
11 Ocupado
Control
1 Strobe
14 Auto NL
16 Inicializa
13 Selecciona
IRQ via ACK
Bidireccional (0-> sale, 1->Entra)
SIN USO
SIN USO
Espero que todo esto te sirva para empezar. SUERTE!
Me olvidé de decirte algo. No sé si sabrás hacer enmascaramiento de bits (con AND y/o OR) pero lo vas a necesitar bastante. Por ejemplo si el puerto con el que estás trabajando dice 128 (10000000) y vos querés setear el 5 bit (comenzando de la derecha) no basta con escribir 16 (00010000) en el puerto ya que habrías reseteado el último bit. En ese caso lo que tenés que hacer es:
---------------------------------------------------------------------------
Dim Anterior as Byte
Dim Nuevo as Byte
Anterior = Leer(Datos)
Nuevo = (Anterior OR 16)
'Nuevo valdría 144 (10010000)
Escribir Datos, Nuevo
---------------------------------------------------------------------------
¿Se entiende la idea?

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas