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]
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?