Está en la página 1de 3

Como manejar el puerto paralelo desde C#?

Bueno es una pregunta que ya me han hecho mucho y he decidido explicarlo en el blog.

Antes de meternos a explicar como hacerlo con C# tenemos que saber la configuracin del puerto paralelo para eso podemos ir a "Administrador de dispositivos" y directamente buscar dentro de las propiedades de nuestro LPT (Que por lo regular es LPT1) en la imagen de la izquierda pueden ver donde checar la configuracin del puerto. (Por razones de espacio no puedo poner la imagen ampliada, as que den un clik en la imagen para ver mejor).

Ahora que ya sabemos la direccin de nuestro puerto paralelo, podemo continuar con s el siguiente paso, que es saber la configuracin de los puertos del LPT1; tenemos 25 pines en el puerto paralelo, todos funcionan con seales TTL y a continuacin se muestra como estn configurados:
y

Puerto de salida (Puerto 888 hexadecimal 378) va del pin 2 hasta el 9, por este puerto podemos sacar la informacin que queramos mandar a un circuito desde el ordenador, para lo cual tenemos 8 bits, el de menor peso es el pin 2 y el de mayor peso es el 9 siendo as que podemos tener hasta 256 p osibles combinaciones. Puerto de salida (Puerto 889) son del pin 10 al 13 y 15 (como pueden darse cuenta son solo 5 pines), por este puerto podemos meter informacin a nuestra computadora proveniente del circuito, cabe sealar que los primeros tres bits d e menor peso no existen en este puerto pero son tomados en cuenta a la hora de tener un valor en la entrada. Por ejemplo, si metemos una entrada por el pin 15 (que es el de menor peso) nuestro programa (que explicare mas adelante) lo tomara como el valor 8 en el puerto 889. Puerto de E/S (Puerto 890) y son los pines 1, 14, 16 y 17 este puerto es especial para mandar datos tanto de entrada como de salida.

En l i n si i nt se muest el puert paralel con sus puertos de entradas y salidas.Ahora que nos queda claro la confi uraci n del puerto, podemos meternos a lo que les gusta, a programar en C , para esto primero tenemos que tener la li rera, la cual es: "inpout .dll", esta li rera tienen que colocarla en 2 direcciones, en System32 y en el lugar donde tendrn su programa .EXE compilado. Ahora si en nuestro proyecto podemos crear la clase: using System; using System.Runtime.InteropServices; namespace WindowsApplication1 { class PortAccess { // lama al metodo Output de la li rera dll. [DllImport "inpout32.dll", EntryPoint = "Out32" ] public static extern void Output int adress, int value); // lama al metodo Input de la librera dll [DllImport "inpout32.dll", EntryPoint = "Inp32")] public static extern int Input int adress); } } Ok ahora tenemos los dos mtodos que nos interesan, para meter y sacar informaci n por nuestro puerto. El metodo 'Output' maneja dos variables enteras iniciales, la cual es adress y value; 'adress' es la direcci n de nuestro puerto de salida (especificada en la imagen del puerto paralelo arriba), que en nuestro caso es el 888 (decimal), debido a que tenemos 8 bits en nuestro puerto de salida es posible manejar cada pin de nuestros ocho bits de la siguiente manera:

por ejemplo, si queremos una salida en el pin 2 y 3 (b'00000011' <-- en binario as), pues exacto seria el valor 3 en decimal. Bueno no quiero extenderme mucho ahora pasamos al puerto de entrada. La entrada es un poco ms complicada, ya que solo tenemos 5 pines con los cuales manejamos valores de 8 bits, como es posible esto? bueno no se asusten la explicaci n es que no hay pines para los 3 bits de menor peso, pero bueno hay que verlo grficamente para entenderlo:

Con el dibujo anterior ya nos damos una idea de lo que el programa puede leer de estos pin, pero hay que tener cuidado ya que el pin 11 esta 'negado', esto quiere decir que por ejemplo si nosotros metemos un 1 l gico por este pin el programa lo leera como 0 l gico y viceversa, de tal forma que si nosotros metemos la siguiente entrada: b'10001' el programa nos leer un 8 decimal, que equivale al b'00001000' en binario. Con esto ya podemos manejar el puerto paralelo, ejemplo la siguiente instrucci n: PortAccess.Output(888, 1); // Saca un 1 l gico por el pin 2 para verlo mejor b'00000001' PortAccess.Output(888,255), // Pone todas la salida a 1 l gico, b'11111111' Es cuesti n de jugar con los nmeros binarios y decimales para obtener la salida deseada. El puerto de entrada es ms fcil ya que solo lee, los datos que hay en la entrada ejemplo: int a; //creamos una variable entera a = PortAccess.Input(889); // Ponemos el valor de la entrada en la variable 'a' System.Console.WriteLine("La entrada del puerto es: " + a); //muestra el valor de la entrada Con estos ejemplos termina el mini tutorial (la verdad no quera extenderme tanto pero tenia que explicar todo lo anterior para llegar a estos ejemplos).