{"id":198,"date":"2013-11-05T21:40:21","date_gmt":"2013-11-06T02:40:21","guid":{"rendered":"http:\/\/proyectosfie.com\/renovado\/?page_id=198"},"modified":"2013-11-05T22:02:56","modified_gmt":"2013-11-06T03:02:56","slug":"tutorial-uso-puerto-paralelo","status":"publish","type":"page","link":"https:\/\/proyectosfie.com\/renovado\/electronica\/puertos\/puerto-paralelo\/tutorial-uso-puerto-paralelo\/","title":{"rendered":"Tutorial uso Puerto Paralelo"},"content":{"rendered":"<p align=\"center\"><b>Comenzando con el Puerto Paralelo<\/b><\/p>\n<p align=\"center\"><b>Uso, Aplicaci\u00f3n y Simulaci\u00f3n<\/b><\/p>\n<p><b>Descripci\u00f3n:<\/b><\/p>\n<p><span style=\"font-size: small;\">Bueno, este es el primer tutorial que escribo de c\u00f3mo usar el Puerto Paralelo. En casi todas las Pc\u2019s que conozco hay un solo puerto y tiene como Registro Base 378H (As\u00ed q por ahora lo tomar\u00e9 como un Standard). Para poder acceder al Puerto, se usar\u00eda f\u00e1cilmente en C o en Asm Inxx(Port) y Outxx(Port,Dato). Pero actualmente los sistemas operativos son\u00a0<b>mezquinos<\/b>\u00a0as\u00ed que para poder acceder a ellos debemos hacerlo mediante Drivers. (ver\u00a0<a href=\"http:\/\/proyectosfie.webcindario.com\/puertos.htm\">Aqu\u00ed<\/a>)<\/span><\/p>\n<p><span style=\"font-size: small;\">Pero para no preocuparnos por eso. Yo voy a usar la DLL InpOut32.Dll que<\/span><\/p>\n<p><span style=\"font-size: small;\">mediante 2 rutinas Inp32 y Out32, Resuelve el problema.<\/span><\/p>\n<p><span style=\"font-size: small;\">Adem\u00e1s aqu\u00ed voy a usar 3 tipos de codificaci\u00f3n: Assembler, C++ y Visual Basic.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><b>TERMINOLOGIA:<\/b><\/p>\n<p align=\"left\"><span style=\"font-size: small;\">A lo largo de este tutorial, voy a ser uso de ciertos t\u00e9rminos que considero que seria muy bueno que se conocieran antes.<\/span><\/p>\n<p><span style=\"font-size: small;\">Bit \u20181\u2019\u00a0\u00a0 : Significa que la salida de esta puerta es 5V.<\/span><\/p>\n<p><span style=\"font-size: small;\">Bit \u20180\u2019\u00a0 : Significa que la salida es 0v.<\/span><\/p>\n<p><span style=\"font-size: small;\">Bit \u2018X\u2019\u00a0 : Significa que no importa el valor de este bit, puede ser \u20181\u2019 o \u20180\u2019<\/span><\/p>\n<p><span style=\"font-size: small;\">Bit \u2018~X\u2019\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 : Significa que este dato es negado.<\/span><\/p>\n<p><span style=\"font-size: small;\">Registro: Arreglos de 8 Bits, que sirven para la configuraci\u00f3n del Puerto Paralelo<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><b>Un Poco de Teor\u00eda.<\/b><\/p>\n<p><b>Algo de Logica: And, Or, Xor:<\/b><\/p>\n<p><span style=\"font-size: small;\">Para comenzar, Estas operaciones son muy importantes, ya que nos permiten el<\/span><\/p>\n<p><span style=\"font-size: small;\">manejo del Puerto, cambiar Bits, invertirlos, enmascaralos. Como se vera a continuaci\u00f3n:<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><b>And: Dato = Op1 And Op2 = Op1 &amp; Op2<\/b><\/p>\n<p><span style=\"font-size: small;\">En pocas palabras, si Op2=\u20191\u2019, no importa como sea Op1=\u2019X\u2019, la respuesta seria<\/span><\/p>\n<p><span style=\"font-size: small;\">Dato=\u2019X\u2019 ; Ahora si Op2=\u20190\u2019 el dato=\u20190\u2019<\/span><\/p>\n<p><span style=\"font-size: small;\">Es decir que si tenemos un Byte=(D7) (D6) (D5) (D4) (D3) (D2) (D1) (D0). Y<\/span><\/p>\n<p><span style=\"font-size: small;\">queremos quedarnos con el dato D7, D5, y D4. y que el resto sea \u20180\u2019. Lo que<\/span><\/p>\n<p><span style=\"font-size: small;\">tendr\u00edamos que hacer es:<\/span><\/p>\n<p align=\"center\"><span style=\"font-size: small;\">Result=Byte And 10110000b;\/\/ Result = Byte &amp; B0;<\/span><\/p>\n<p><span style=\"font-size: small;\">Y nos quedaria:<\/span><\/p>\n<p><span style=\"font-size: small;\">\u00a0<\/span><\/p>\n<div align=\"center\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td width=\"91\">\n<p align=\"center\"><span style=\"font-size: small;\">Byte =<\/span><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">D7<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">D6<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">D5<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">D4<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">D3<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">D2<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">D1<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">D0<\/span><\/b><\/p>\n<\/td>\n<td width=\"192\">\n<p align=\"center\"><span style=\"font-size: small;\">Operador<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"91\">\n<p align=\"center\"><span style=\"font-size: small;\">\u00a0<\/span><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">1<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">0<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">1<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">1<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">0<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">0<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">0<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">0<\/span><\/b><\/p>\n<\/td>\n<td width=\"192\">\n<p align=\"center\"><span style=\"font-size: small;\">&amp; = And<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"91\">\n<p align=\"center\"><span style=\"font-size: small;\">Result =<\/span><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">D7<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">0<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">D5<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">D4<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">0<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">0<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">0<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">0<\/span><\/b><\/p>\n<\/td>\n<td width=\"192\">\n<p align=\"center\"><span style=\"font-size: small;\">\/\/Muy interesante<\/span><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>&nbsp;<\/p>\n<p><span style=\"font-size: small;\">Es decir que nos sirve para colocar los bits que deseamos a \u20180\u2019<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><b>Or: Dato = Op1 Or Op2 = Op1 | Op2<\/b><\/p>\n<p><span style=\"font-size: small;\">En pocas palabras, si Op2=\u20191\u2019 , no importa como sea Op1=\u2019X\u2019, la respuesta seria<\/span><\/p>\n<p><span style=\"font-size: small;\">Dato=\u20191\u2019 ; Ahora si Op2=\u20190\u2019 el dato=\u2019X\u2019<\/span><\/p>\n<p><span style=\"font-size: small;\">Es decir que si tenemos un Byte=(D7) (D6) (D5) (D4) (D3) (D2) (D1) (D0). Y<\/span><\/p>\n<p><span style=\"font-size: small;\">queremos que D7,D6, D4,D2 sean \u20181\u2019 y el resto quede igual tendr\u00edamos que hacer:<\/span><\/p>\n<p align=\"center\"><span style=\"font-size: small;\">Result=Byte or 11010100b;\/\/ Result= Byte | 0xD4<\/span><\/p>\n<p><span style=\"font-size: small;\">Y nos quedar\u00eda:<\/span><\/p>\n<p>&nbsp;<\/p>\n<div align=\"center\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td width=\"91\">\n<p align=\"center\"><span style=\"font-size: small;\">Byte \u00a0=<\/span><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">D7<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">D6<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">D5<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">D4<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">D3<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">D2<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">D1<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">D0<\/span><\/b><\/p>\n<\/td>\n<td width=\"192\">\n<p align=\"center\"><span style=\"font-size: small;\">Operador<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"91\">\n<p align=\"center\"><span style=\"font-size: small;\">\u00a0<\/span><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">1<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">1<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">0<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">1<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">0<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">1<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">0<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">0<\/span><\/b><\/p>\n<\/td>\n<td width=\"192\">\n<p align=\"center\"><span style=\"font-size: small;\">| = or<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"91\">\n<p align=\"center\"><span style=\"font-size: small;\">Result =<\/span><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">1<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">1<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">D5<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">1<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">D3<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">1<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">D1<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">D0<\/span><\/b><\/p>\n<\/td>\n<td width=\"192\">\n<p align=\"center\"><span style=\"font-size: small;\">\/\/Muy interesante<\/span><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p><span style=\"font-size: small;\">\u00a0<\/span><\/p>\n<p><span style=\"font-size: small;\">Es decir, que mediante una Or podemos obligar a que la respuesta sea \u20181\u2019.<\/span><\/p>\n<p><span style=\"font-size: small;\">\u00a0<\/span><\/p>\n<p><b>Xor: Dato = Op1 Xor Op2 = Op1 ^ Op2<\/b><\/p>\n<p><span style=\"font-size: small;\">En pocas palabras, si Op2=\u20191\u2019 , no importa como sea Op1=\u2019X\u2019, la respuesta seria<\/span><\/p>\n<p><span style=\"font-size: small;\">Dato=\u2019~X\u2019 ; Ahora si Op2=\u20190\u2019 el dato=\u2019X\u2019. Es decir que invierte el Bit donde<\/span><\/p>\n<p><span style=\"font-size: small;\">encuentra Op=\u20191\u2019<\/span><\/p>\n<p><span style=\"font-size: small;\">Es decir que si tenemos un Byte=(D7) (D6) (D5) (D4) (D3) (D2) (D1) (D0). Y<\/span><\/p>\n<p><span style=\"font-size: small;\">queremos invertir D7, D5, y D4. lo que tendr\u00edamos que hacer es:<\/span><\/p>\n<p align=\"center\"><span style=\"font-size: small;\">Result = Byte Xor 10110000b;\/\/ Result = Byte ^ B0<\/span><\/p>\n<p><span style=\"font-size: small;\">Y nos quedaria:<\/span><\/p>\n<p><span style=\"font-size: small;\">\u00a0<\/span><\/p>\n<div align=\"center\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td width=\"91\">\n<p align=\"center\"><span style=\"font-size: small;\">Byte\u00a0 =<\/span><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">D7<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">D6<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">D5<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">D4<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">D3<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">D2<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">D1<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">D0<\/span><\/b><\/p>\n<\/td>\n<td width=\"192\">\n<p align=\"center\"><span style=\"font-size: small;\">Operador<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"91\">\n<p align=\"center\"><span style=\"font-size: small;\">\u00a0<\/span><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">1<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">0<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">1<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">1<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">0<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">0<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">0<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">0<\/span><\/b><\/p>\n<\/td>\n<td width=\"192\">\n<p align=\"center\"><span style=\"font-size: small;\">^ = Xor<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"91\">\n<p align=\"center\"><span style=\"font-size: small;\">Result =<\/span><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">~D7<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">D6<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">~D5<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">~D4<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">D3<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">D2<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">D1<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">D0<\/span><\/b><\/p>\n<\/td>\n<td width=\"192\">\n<p align=\"center\"><span style=\"font-size: small;\">\/\/Muy interesante<\/span><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p><span style=\"font-size: small;\">\u00a0<\/span><\/p>\n<p><span style=\"font-size: small;\">Es decir, nos permite invertir el Bit donde esta con \u20181\u2019<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"font-size: small;\">Bueno, Espero que este claro lo de las operaciones l\u00f3gicas. Si no revisen su libro de principios de sistemas digitales. \ud83d\ude00 \ud83d\ude09<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><b>Aprendiendo como funciona mi Puerto Paralelo:<\/b><\/p>\n<p><span style=\"font-size: small;\">Aqu\u00ed, no voy a redundar en los pines, es decir, no voy a detallar cuales son y su numeraci\u00f3n, por que de eso ya hay bastante en la Web, y ya he puerto informaci\u00f3n en la secci\u00f3n\u00a0<a href=\"http:\/\/proyectosfie.webcindario.com\/puertos.htm\">Puertos<\/a>\u00a0de mi web.<\/span><\/p>\n<p><span style=\"font-size: small;\">\u00a0<\/span><\/p>\n<p><span style=\"font-size: small;\">Bueno, para manejar el puerto paralelo, hay q saber acerca de sus registros. Que Son 3\u00a0<b>Base<\/b>,\u00a0<b>Estado\u00a0<\/b>y\u00a0<b>Control<\/b>.<\/span><\/p>\n<p><span style=\"font-size: small;\">\u00a0<\/span><span style=\"font-size: small;\">La direcci\u00f3n de la mayor\u00eda de Pc\u2019s q conozco, esta en 378h. Aunque puede variar<\/span><\/p>\n<p><span style=\"font-size: small;\">dependiendo del SO q uses. Yo lo voy ha usar como un Est\u00e1ndar para este tutorial.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><b>Descripci\u00f3n de Registros:<\/b><\/p>\n<p><b>\u00a0<\/b><b>Registro de Datos. (Su direcci\u00f3n es 378h = Direcci\u00f3n Base).<\/b><\/p>\n<div align=\"center\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td width=\"91\"><\/td>\n<td width=\"37\">\n<p align=\"center\"><b>D7<\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b>D6<\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b>D5<\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b>D4<\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b>D3<\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b>D2<\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b>D1<\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b>D0<\/b><\/p>\n<\/td>\n<td width=\"192\"><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>&nbsp;<\/p>\n<p><span style=\"font-size: small;\">Este registro es de 8 bits. Es por aqu\u00ed q enviamos la informaci\u00f3n hacia el exterior. Ejm Activamos un Led, un Rel\u00e9, Motores DC, Motores a pasos.<\/span><\/p>\n<p><span style=\"font-size: small;\">Una Alarma. Lo que nos imaginemos. O tambi\u00e9n recibimos datos. Ejm: Se\u00f1al de un ADC para digitalizar una se\u00f1al externa.<\/span><\/p>\n<p><span style=\"font-size: small;\">Por defecto, solo funciona como Salidas, pero es posible Hacerla funcionar como entrada. Para esto hay q modificar en Bit 5 del Registro de Control.<\/span><\/p>\n<p><span style=\"font-size: small;\">Esto se explica mas abajo con mucho mas cuidado<\/span><\/p>\n<p><span style=\"font-size: small; line-height: 1.714285714;\">Dependiendo del lenguaje de programaci\u00f3n q uses, la sintaxis es :<\/span><\/p>\n<p><span style=\"font-size: small;\">Outxxx (378h,Dato).<\/span><\/p>\n<p><span style=\"font-size: small;\">Ejemplo en C++ Usando la Librer\u00eda InpOut32.dll<\/span><\/p>\n<pre>#include \"stdafx.h\"\r\n#include \"Iostream.h\"\r\n\r\n\/\/Definimos los prototipos de nuestras funciones\r\n\/\/Recuerdese q se debe agregar a la etapa de Link, el archivo InpOut32.lib\r\nshort _stdcall Inp32(short PortAddress);\r\nvoid _stdcall Out32(short PortAddress, short data);\r\n\r\nvoid main(void)\r\n{\r\n short data;\r\n data=Inp32(0x378);\r\n cout&lt;&lt;\"El Registro Estado es: \"&lt;&lt;data&lt;&lt;\"\\n\";\r\n return; \r\n}<\/pre>\n<p>&nbsp;<\/p>\n<p>Ejemplo en Assembler \u2013 Para DOS<\/p>\n<pre>.model small\r\n.code\r\n\r\nmov al,11111111b; Mandamos q todas las salidas sean \u20181\u2019\r\nmov dx,378h\r\n\r\nin\u00a0 dx,al\r\n\r\nmov ah,4ch\r\nint 21h\r\nend<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p><b>Registro de Estado (Su direcci\u00f3n es 379h) (Direcci\u00f3n Base +1).<\/b><\/p>\n<p>&nbsp;<\/p>\n<div align=\"center\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td width=\"91\">\n<p align=\"center\"><span style=\"font-size: small;\">\u00a0<\/span><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">~S7<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">S6<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">S5<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">S4<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">S3<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">X<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">X<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">X<\/span><\/b><\/p>\n<\/td>\n<td width=\"192\">\n<p align=\"center\"><span style=\"font-size: small;\">\u00a0<\/span><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>&nbsp;<\/p>\n<p>Este registro es de solo Entradas, pero solo es de 5 Bits.<\/p>\n<p>Donde:<\/p>\n<p>~S7 \u00a0\u00a0\u00a0 :Significa que este dato esta invertido.<\/p>\n<p>X \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 :Significa que su valor es indeterminado.<\/p>\n<p>Para obtener el Valor Real de Este registro, tenemos que enmascarlo, Haciendo un Xor con 128 o su equivalente 80h \u00f3 0x80 para C o &amp;H80 en Basic o en binario 10000000b , donde se observa q el bit a cambiar debe ser el 8vo. Y luego un And por 248=0xF80=11111000b (En este ultimo se observa que los valores con los que te debes quedar son los 5 ultimos).<\/p>\n<p>Este Registro lo podemos usar por ejemplo para ver la entrada de sensores.<\/p>\n<p>Donde para obtener el valor Real su Sintaxis seria:<\/p>\n<p>Estado = Inxxx(379H) \u00a0Xor \u00a00x80 And 0xF8.<\/p>\n<p>En C: \u00a0\u00a0Estado = (Inp32(0x379) ^ 0x80) &amp; 0xF8<\/p>\n<p>&nbsp;<\/p>\n<p>Ejemplo en C para obtener: Valor Real del Registro de Datos<\/p>\n<pre>#include \"stdafx.h\"\r\n#include \"Iostream.h\"\r\n\r\n\/\/observar que se debe agregar al Link el archivo InpOut32.lib\r\n\r\nshort _stdcall Inp32(short PortAddress);\r\nvoid _stdcall Out32(short PortAddress, short data);\r\n\r\nvoid main(void)\r\n{ short estado;\r\n  estado=Inp32(0x379);\r\n\r\n\/\/Este codigo es el Equivalente en Asm para\r\n\/\/ Estado = (Inp32(0x379) ^ 0x80) &amp; 0xF8\r\n_asm xor estado,10000000b\r\n_asm and estado,0xF8\r\n\r\ncout&lt;&lt;\"El Registro Estado es: \"&lt;&lt;estado&lt;&lt;\"\\n\";\r\nreturn; }<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p><b>Registro de Control. (37Ah) (Direcci\u00f3n Base +2)<\/b><\/p>\n<p><b>\u00a0<\/b><\/p>\n<p>Este registro, es bidireccional. Sus datos son<\/p>\n<div align=\"center\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td width=\"91\">\n<p align=\"center\"><span style=\"font-size: small;\">\u00a0<\/span><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">X<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">X<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">X<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">X<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">~C3<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">C2<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">C1<\/span><\/b><\/p>\n<\/td>\n<td width=\"37\">\n<p align=\"center\"><b><span style=\"font-size: small;\">C0<\/span><\/b><\/p>\n<\/td>\n<td width=\"192\">\n<p align=\"center\"><span style=\"font-size: small;\">\u00a0<\/span><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>&nbsp;<\/p>\n<p>Ahora para invertir las se\u00f1ales C3, C1 y C0<\/p>\n<p>Tenemos que hacerle un xor con 00001011b y para quedarnos con el dato valido, le hacemos un And con 0xF=00001111b<\/p>\n<p>Ejm:<\/p>\n<p>control = (Outxx(37AH) Xor 1011b ) And 0xF.<\/p>\n<p>En C: control = (Out32(37AH) ^0x0B ) &amp; 0xF.<\/p>\n<p>&nbsp;<\/p>\n<p><b>Este Registro es muy importante<\/b>, ya\u00a0 nos permite colocar al puerto paralelo en modo Bidireccional. Es decir se puede tambien recibir datos por el Registro de Datos. Por ahora siempre lo mandare a 0, es decir q sea Salida. Pero si quisiera hacerlo entrada, tendr\u00eda q colocar el Bit5 equivalente a C5 en \u20181\u2019.<\/p>\n<p>La Sintaxis para hacerlo Bidireccional es:<\/p>\n<p align=\"center\">Int Caso=1 o 0 ;Seg\u00fan quiera 1=Input, 0=Output<\/p>\n<p align=\"center\">control= Outxx(0x37A,((caso &lt;&lt;5) or (Inxxx(0x37A) And 11011111)<\/p>\n<p>En C:\u00a0\u00a0 control =Out32(0x37A,((caso&lt;&lt;5) | (Inp32(0x37A) &amp; 0xDF<\/p>\n<p>Con caso&lt;&lt;5, significa rotamos 5 veces a la Izq a caso .<\/p>\n<pre>\/\/Ejemplo en C para Obtener el Valor, que tiene el Registro de Control.\r\n#include \"stdafx.h\"\r\n#include \"Iostream.h\"\r\n\/\/observar que se debe agregar al Link el archivo InpOut32.lib\r\nshort _stdcall Inp32(short PortAddress);\r\nvoid _stdcall Out32(short PortAddress, short data);\r\nvoid main(void)\r\n{\r\nshort control;\r\ncontrol=Inp32(0x37A);\r\n\/\/El codigo que viene es Equivalente\r\n\/\/ control = (Out32(37AH) ^0x0B ) &amp; 0xF\r\n_asm xor control,1011b\r\n_asm and control,0xF \/\/Para Quedarnos con los 4 Primeros Bits\r\ncout&lt;&lt;\"El Registro Control es: \"&lt;&lt;control&lt;&lt;\"\\n\";\r\nreturn;\r\n}<\/pre>\n<p>&nbsp;<\/p>\n<p>Prueba del Puerto de c\u00f3mo hacerlo Bidireccional, este programa te mostrara como queda el control si lo pones en modo Bidireccional. No hace el cambio por obvios motivos. Pero si lo quieres probar, al final coloca\u00a0Out32(0x37A,control);<\/p>\n<p>Y ya estara en modo Bidireccional:<\/p>\n<pre>\/\/ bidire.cpp : Defines the entry point for the console application.\r\n\/\/\r\n\r\n#include \"stdafx.h\"\r\n#include \"Iostream.h\"\r\n\r\n\/\/observar que se debe agregar al Link el archivo InpOut32.lib\r\nshort _stdcall Inp32(short PortAddress);\r\nvoid _stdcall Out32(short PortAddress, short data);\r\n\r\nvoid main(void)\r\n{\r\nshort caso,control;\r\ncaso=1;\/\/Suponiendo q lo quiero hacer Bidireccional\r\n\r\n\/\/ Dato= Outxx(0x37A,((caso &lt;&lt;5) or (Inxxx(0x37A) And 11011111)\r\ncontrol=Inp32(0x37A);\r\ncout&lt;&lt;\"Tenemos en Control: \"&lt;&lt;control&lt;&lt;\"\\n\";\r\n\r\n_asm and control,11011111b\r\n_asm rol caso,5 \/\/caso=caso&gt;&gt;5; \/\/Roto caso 5 bits\r\n_asm mov ax,caso \/\/control =control or caso\r\n_asm or control,ax\r\n\r\ncout&lt;&lt;\"Lo que enviariamos seria: \"&lt;&lt;control&lt;&lt;\"\\n\";\r\n\r\nreturn;\r\n\r\n}<\/pre>\n<p>&nbsp;<\/p>\n<p><span style=\"font-size: small;\">Mas informaci\u00f3n de esto lo puedes encontrar en mi web, o puedes escribirme a mi e-Mail : yoelocmin@hotmail.com<\/span><\/p>\n<p><span style=\"font-size: small;\">http:\/\/proyectosfie.tk<\/span><\/p>\n<p><b>\u00a0<\/b><\/p>\n<p><b>Haciendo lo que vinimos:<\/b><\/p>\n<p><span style=\"font-size: small;\">Para comenzar, he hecho un peque\u00f1o programa. En visual Basic.<\/span><\/p>\n<p><span style=\"font-size: small;\">\u00a0<\/span><\/p>\n<p><span style=\"font-size: small;\">Pero como!!!<\/span><\/p>\n<p><span style=\"font-size: small;\">Bueno,\u00a0<span style=\"text-decoration: underline;\">Sabemos que Visual Basic no permite manejar el Puerto Paralelo<\/span>, pero nuestra DLL\u00a0<b>S\u00ed<\/b>, ES por eso que lo adjuntaremos, mediante un archivo obj:<\/span><\/p>\n<p><b>\u00a0<\/b><b>InpOut32.bas<\/b><\/p>\n<pre>'Declaramos las Variables de la Dll\r\n'Aqu\u00ed declaramos como funci\u00f3n a Inp32\r\n'Ya q lo que hace es devolvernos el valor q indica la direcci\u00f3n que se le Asigne.\r\n\r\nPublic Declare Function Leer Lib \"Inpout32.dll\" _\r\nAlias \"Inp32\" (ByVal PortAddress As Integer) As Byte\r\n'Aqu\u00ed declaramos como una Subrutina a Out32\r\n'Ya que no devuelve ningun valor.\r\nPublic Declare Sub Escribir Lib \"Inpout32.dll\" _\r\nAlias \"Out32\" (ByVal PortAddress As Integer, ByVal Value As Byte)\r\n'Aqu\u00ed estoy declarando esta Api de Windows, para usarlo en los retardos.\r\nPublic Declare Sub Sleep Lib \"Kernel32.dll\" (ByVal PortAddress As Integer)<\/pre>\n<p>&nbsp;<\/p>\n<p><b>Nuestro Programita tiene la Forma:<\/b><br \/>\n<img alt=\"\" src=\"http:\/\/proyectosfie.com\/html\/FOTOS\/ejeLPT.gif\" \/><\/p>\n<p align=\"center\"><b><span style=\"font-size: small;\">Las caracteristicas basicas de los controles son:<\/span><\/b><\/p>\n<div align=\"center\">\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td valign=\"top\" width=\"143\">\n<p align=\"center\"><b><span style=\"font-size: small;\">Control<\/span><\/b><\/p>\n<\/td>\n<td valign=\"top\" width=\"143\">\n<p align=\"center\"><b><span style=\"font-size: small;\">Nombre<\/span><\/b><\/p>\n<\/td>\n<td valign=\"top\" width=\"143\">\n<p align=\"center\"><b><span style=\"font-size: small;\">Caption<\/span><\/b><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"143\">\n<p align=\"center\"><span style=\"font-size: small;\">Form<\/span><\/p>\n<\/td>\n<td valign=\"top\" width=\"143\">\n<p align=\"center\"><span style=\"font-size: small;\">FrmLeds<\/span><\/p>\n<\/td>\n<td valign=\"top\" width=\"143\">\n<p align=\"center\"><span style=\"font-size: small;\">Prendiendo Leds<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"143\">\n<p align=\"center\"><span style=\"font-size: small;\">Button<\/span><\/p>\n<\/td>\n<td valign=\"top\" width=\"143\">\n<p align=\"center\"><span style=\"font-size: small;\">CmdD0<\/span><\/p>\n<\/td>\n<td valign=\"top\" width=\"143\">\n<p align=\"center\"><span style=\"font-size: small;\">D&amp;0<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"143\">\n<p align=\"center\"><span style=\"font-size: small;\">Button<\/span><\/p>\n<\/td>\n<td valign=\"top\" width=\"143\">\n<p align=\"center\"><span style=\"font-size: small;\">CmdD1<\/span><\/p>\n<\/td>\n<td valign=\"top\" width=\"143\">\n<p align=\"center\"><span style=\"font-size: small;\">D&amp;1<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"143\">\n<p align=\"center\"><span style=\"font-size: small;\">Button<\/span><\/p>\n<\/td>\n<td valign=\"top\" width=\"143\">\n<p align=\"center\"><span style=\"font-size: small;\">CmdD2<\/span><\/p>\n<\/td>\n<td valign=\"top\" width=\"143\">\n<p align=\"center\"><span style=\"font-size: small;\">D&amp;2<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"143\">\n<p align=\"center\"><span style=\"font-size: small;\">Button<\/span><\/p>\n<\/td>\n<td valign=\"top\" width=\"143\">\n<p align=\"center\"><span style=\"font-size: small;\">CmdD3<\/span><\/p>\n<\/td>\n<td valign=\"top\" width=\"143\">\n<p align=\"center\"><span style=\"font-size: small;\">D&amp;3<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"143\">\n<p align=\"center\"><span style=\"font-size: small;\">Button<\/span><\/p>\n<\/td>\n<td valign=\"top\" width=\"143\">\n<p align=\"center\"><span style=\"font-size: small;\">CmdD4<\/span><\/p>\n<\/td>\n<td valign=\"top\" width=\"143\">\n<p align=\"center\"><span style=\"font-size: small;\">D&amp;4<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"143\">\n<p align=\"center\"><span style=\"font-size: small;\">Button<\/span><\/p>\n<\/td>\n<td valign=\"top\" width=\"143\">\n<p align=\"center\"><span style=\"font-size: small;\">CmdD5<\/span><\/p>\n<\/td>\n<td valign=\"top\" width=\"143\">\n<p align=\"center\"><span style=\"font-size: small;\">D&amp;5<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"143\">\n<p align=\"center\"><span style=\"font-size: small;\">Button<\/span><\/p>\n<\/td>\n<td valign=\"top\" width=\"143\">\n<p align=\"center\"><span style=\"font-size: small;\">CmdD6<\/span><\/p>\n<\/td>\n<td valign=\"top\" width=\"143\">\n<p align=\"center\"><span style=\"font-size: small;\">D&amp;6<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"143\">\n<p align=\"center\"><span style=\"font-size: small;\">Button<\/span><\/p>\n<\/td>\n<td valign=\"top\" width=\"143\">\n<p align=\"center\"><span style=\"font-size: small;\">CmdD7<\/span><\/p>\n<\/td>\n<td valign=\"top\" width=\"143\">\n<p align=\"center\"><span style=\"font-size: small;\">D&amp;7<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"143\">\n<p align=\"center\"><span style=\"font-size: small;\">Button<\/span><\/p>\n<\/td>\n<td valign=\"top\" width=\"143\">\n<p align=\"center\"><span style=\"font-size: small;\">CmdEfe1<\/span><\/p>\n<\/td>\n<td valign=\"top\" width=\"143\">\n<p align=\"center\"><span style=\"font-size: small;\">&amp;Derecha<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"143\">\n<p align=\"center\"><span style=\"font-size: small;\">Button<\/span><\/p>\n<\/td>\n<td valign=\"top\" width=\"143\">\n<p align=\"center\"><span style=\"font-size: small;\">CmdEfe1<\/span><\/p>\n<\/td>\n<td valign=\"top\" width=\"143\">\n<p align=\"center\"><span style=\"font-size: small;\">&amp;Izquierda<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"143\">\n<p align=\"center\"><span style=\"font-size: small;\">Button<\/span><\/p>\n<\/td>\n<td valign=\"top\" width=\"143\">\n<p align=\"center\"><span style=\"font-size: small;\">CmdAbout<\/span><\/p>\n<\/td>\n<td valign=\"top\" width=\"143\">\n<p align=\"center\"><span style=\"font-size: small;\">&amp;About<\/span><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p><span style=\"font-size: small;\">Donde su C\u00f3digo Correspondiente es:<\/span><\/p>\n<p><b>Form1.frm<\/b><\/p>\n<pre>'Declaramos las variables generales\r\nDim Dato As Byte 'Dato es usado por todos las Subrutinas\r\n\r\nPrivate Sub CmdAbout_Click()\r\n 'Muestro Mensaje en Pantalla: el vbCrLf es equivalente a ENTER\r\n MsgBox \"Prendiendo Leds \" + vbCrLf + vbCrLf + \" por:\" + vbCrLf + \" Yoel Ocmin \" + _\r\n vbCrLf + vbCrLf + \"yoelocmin@hotmail.com\" + vbCrLf + \"http:\/\/proyectosfie.tk\", _\r\n vbQuestion, \"Acerca...\"\r\nEnd Sub\r\n\r\nPrivate Sub CmdD0_Click()\r\n Dato = Leer(&amp;H378) Xor &amp;H1 'Cambio el Bit 1=Lsb=D0\r\n Envia\r\nEnd Sub\r\n\r\nPrivate Sub CmdD1_Click()\r\n Dato = Leer(&amp;H378) Xor &amp;H2 'Cambio el Bit 2\r\n Envia\r\nEnd Sub\r\n\r\nPrivate Sub CmdD2_Click()\r\n Dato = Leer(&amp;H378) Xor &amp;H4 'Cambio el Bit 3\r\n Envia\r\nEnd Sub\r\n\r\nPrivate Sub CmdD3_Click()\r\n Dato = Leer(&amp;H378) Xor &amp;H8 'Cambio el Bit 4\r\n Envia\r\nEnd Sub\r\n\r\nPrivate Sub CmdD4_Click()\r\n Dato = Leer(&amp;H378) Xor &amp;H10 'Cambio el Bit 5\r\n Envia\r\nEnd Sub\r\n\r\nPrivate Sub CmdD5_Click()\r\n Dato = Leer(&amp;H378) Xor &amp;H20 'Cambio el Bit 6\r\n Envia\r\nEnd Sub\r\n\r\nPrivate Sub CmdD6_Click()\r\n Dato = Leer(&amp;H378) Xor &amp;H40 'Cambio el Bit 7\r\n Envia\r\nEnd Sub\r\n\r\nPrivate Sub CmdD7_Click()\r\n Dato = Leer(&amp;H378) Xor &amp;H80 'Cambio el Bit 8 =MsB=D7\r\n Envia\r\nEnd Sub\r\n\r\nPrivate Sub CmdEfe1_Click()\r\n 'Efecto '1':\r\n 'Rotamos un Bit del LSB -&gt; MSB\r\n 'VB, no tiene la funcion rotar Bit, haci que lo q\r\n 'Colocar en Dato=00000001 y multiplicarlo por 2\r\n ' Dato=00000010 -&gt;Roto un Bit\r\n 'Si lo multiplico nuevamente.\r\n ' Dato=00000100 -&gt;Roto un Bit\r\n 'Y asi sucesivamente hasta q llega al Octavo Bit.\r\n\r\n Dato = 1\r\n\r\n While Dato &lt; &amp;H80\r\n  Envia\r\n  Sleep 250 'Ocaciono un retardo de 250 milisegundos\r\n  Dato = Dato * 2\r\n Wend\r\n\r\n Envia ' como no se envio el ultimo bit se lo envia recien\r\n Sleep 250 '\r\n Dato = 0 'Reseteamos el Puerto.\r\n Envia\r\n Sleep 250\r\n\r\nEnd Sub\r\n\r\nPrivate Sub CmdEfe2_Click()\r\n 'Efecto '2':\r\n 'Rotamos un Bit del MSB -&gt; LSB\r\n 'VB, no tiene la funcion rotar Bit, haci que lo q\r\n 'Colocar en Dato=10000000 y Dividimos por 2\r\n ' Dato=01000000 -&gt;Roto un Bit\r\n 'Si lo multiplico nuevamente.\r\n ' Dato=00100000 -&gt;Roto un Bit\r\n 'Y asi sucesivamente hasta q llega al Primer Bit.\r\n Dato = &amp;H80\r\n While Dato &gt; &amp;H1\r\n  Envia\r\n  Sleep 250\r\n  Dato = Dato \/ 2\r\n Wend\r\n\r\n Envia\r\n Dato = 0\r\n Sleep 250\r\n Envia\r\n Sleep 250\r\nEnd Sub\r\n\r\nPrivate Sub Form_Load()\r\n 'Al iniciar a cargar el Form, reiniciamos el Puerto\r\n Escribir &amp;H378, 0\r\nEnd Sub\r\n\r\nPrivate Sub Envia()\r\n 'Solo envia el Dato al Pueto Paralelo\r\n Escribir &amp;H378, Dato\r\nEnd Sub<\/pre>\n<p>Bueno Eso es Todo con Respecto a Visual Basic.<\/p>\n<p>&nbsp;<\/p>\n<p><b>Simulaci\u00f3n:<\/b><\/p>\n<p>Bueno ahora, vamos a Hacer un Circuito y simular el programa.<\/p>\n<p><b>Como!!!<\/b><\/p>\n<p>Bueno, uno puede simular el programa hecho en Visual Basic, con otro programa. Yo voy a usar el Proteus Lite \u2013 Isis. Para ello voy a necesitar la librer\u00eda y modelo Respectivo. Se llaman Modelo : Port.dll y Library: Lpt02.lib<\/p>\n<p>Se supone que debe estar junto a este archivo, en al versi\u00f3n comprimida, pero si no es as\u00ed bajatela de la seccion\u00a0<a href=\"http:\/\/proyectosfie.webcindario.com\/proteus.htm\">Proteus<\/a>\u00a0de mi pagina web.<\/p>\n<p>http:\/\/proyectosfie.com<\/p>\n<p>OJO:<\/p>\n<p>Esa Librer\u00eda y Modelo son de mi cosecha.<\/p>\n<p>Otra cosa. El Esquem\u00e1tico que acompa\u00f1a el archivo fue hecho con la versi\u00f3n 6.3<\/p>\n<p>sp1, que la puedes descargar del enlace q\u2019 indica mi Web en la secci\u00f3n\u00a0<a href=\"http:\/\/proyectosfie.webcindario.com\/proteus.htm\">Proteus<\/a><\/p>\n<p>Si te bajas esa versi\u00f3n no te olvides colocarle los 2 parches respectivos para su<\/p>\n<p>buen funcionamiento.<\/p>\n<p>Por Ahora, creo que con poner el Esquema es Suficiente, para la simulaci\u00f3n usa las Librer\u00edas:<\/p>\n<p>{ACTIVE}: LED-YELLOW\u00a0\u00a0\u00a0 :Led amarillo<\/p>\n<p>{ACTIVE}: RES\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0:Resistencia de 330<\/p>\n<p>{LPT02}:LPT02\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0:Puerto Paralelo Virtual<\/p>\n<p>Ahora, no es necesario que explique el circuito, porque creo q con el esquema es<\/p>\n<p>mas que suficiente.<\/p>\n<p align=\"center\"><img alt=\"\" src=\"http:\/\/proyectosfie.com\/html\/FOTOS\/esquemaLPT.gif\" \/><\/p>\n<p>Ahora dale a simular y Ejecuta el programa de prueba:<\/p>\n<p>Y Ya Esta:<br \/>\n<img alt=\"\" src=\"http:\/\/proyectosfie.com\/html\/FOTOS\/EmpesandoLPT.gif\" \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Comenzando con el Puerto Paralelo Uso, Aplicaci\u00f3n y Simulaci\u00f3n Descripci\u00f3n: Bueno, este es el primer tutorial que escribo de c\u00f3mo usar el Puerto Paralelo. En casi todas las Pc\u2019s que conozco hay un solo puerto y tiene como Registro Base 378H (As\u00ed q por ahora lo tomar\u00e9 como un Standard). Para poder acceder al Puerto, &hellip; <a href=\"https:\/\/proyectosfie.com\/renovado\/electronica\/puertos\/puerto-paralelo\/tutorial-uso-puerto-paralelo\/\" class=\"more-link\">Contin\u00fae leyendo <span class=\"screen-reader-text\">Tutorial uso Puerto Paralelo<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":192,"menu_order":0,"comment_status":"open","ping_status":"open","template":"","meta":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v15.9.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<link rel=\"canonical\" href=\"http:\/\/proyectosfie.com\/renovado\/electronica\/puertos\/puerto-paralelo\/tutorial-uso-puerto-paralelo\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Tutorial uso Puerto Paralelo - .:: Proyectosfie.Com ::.\" \/>\n<meta property=\"og:description\" content=\"Comenzando con el Puerto Paralelo Uso, Aplicaci\u00f3n y Simulaci\u00f3n Descripci\u00f3n: Bueno, este es el primer tutorial que escribo de c\u00f3mo usar el Puerto Paralelo. En casi todas las Pc\u2019s que conozco hay un solo puerto y tiene como Registro Base 378H (As\u00ed q por ahora lo tomar\u00e9 como un Standard). Para poder acceder al Puerto, &hellip; Contin\u00fae leyendo Tutorial uso Puerto Paralelo &rarr;\" \/>\n<meta property=\"og:url\" content=\"http:\/\/proyectosfie.com\/renovado\/electronica\/puertos\/puerto-paralelo\/tutorial-uso-puerto-paralelo\/\" \/>\n<meta property=\"og:site_name\" content=\".:: Proyectosfie.Com ::.\" \/>\n<meta property=\"article:publisher\" content=\"http:\/\/facebook.com\/yocmin\" \/>\n<meta property=\"article:modified_time\" content=\"2013-11-06T03:02:56+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/proyectosfie.com\/html\/FOTOS\/ejeLPT.gif\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@yoelocmin\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\">\n\t<meta name=\"twitter:data1\" content=\"12 minutos\">\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"https:\/\/proyectosfie.com\/renovado\/#website\",\"url\":\"https:\/\/proyectosfie.com\/renovado\/\",\"name\":\"Proyectosfie\",\"description\":\"Proyectos Electr\\u00f3nicos y M\\u00e1s\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"https:\/\/proyectosfie.com\/renovado\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"es\"},{\"@type\":\"ImageObject\",\"@id\":\"http:\/\/proyectosfie.com\/renovado\/electronica\/puertos\/puerto-paralelo\/tutorial-uso-puerto-paralelo\/#primaryimage\",\"inLanguage\":\"es\",\"url\":\"http:\/\/proyectosfie.com\/html\/FOTOS\/ejeLPT.gif\"},{\"@type\":\"WebPage\",\"@id\":\"http:\/\/proyectosfie.com\/renovado\/electronica\/puertos\/puerto-paralelo\/tutorial-uso-puerto-paralelo\/#webpage\",\"url\":\"http:\/\/proyectosfie.com\/renovado\/electronica\/puertos\/puerto-paralelo\/tutorial-uso-puerto-paralelo\/\",\"name\":\"Tutorial uso Puerto Paralelo - .:: Proyectosfie.Com ::.\",\"isPartOf\":{\"@id\":\"https:\/\/proyectosfie.com\/renovado\/#website\"},\"primaryImageOfPage\":{\"@id\":\"http:\/\/proyectosfie.com\/renovado\/electronica\/puertos\/puerto-paralelo\/tutorial-uso-puerto-paralelo\/#primaryimage\"},\"datePublished\":\"2013-11-06T02:40:21+00:00\",\"dateModified\":\"2013-11-06T03:02:56+00:00\",\"breadcrumb\":{\"@id\":\"http:\/\/proyectosfie.com\/renovado\/electronica\/puertos\/puerto-paralelo\/tutorial-uso-puerto-paralelo\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\/\/proyectosfie.com\/renovado\/electronica\/puertos\/puerto-paralelo\/tutorial-uso-puerto-paralelo\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"http:\/\/proyectosfie.com\/renovado\/electronica\/puertos\/puerto-paralelo\/tutorial-uso-puerto-paralelo\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/proyectosfie.com\/renovado\/\",\"url\":\"https:\/\/proyectosfie.com\/renovado\/\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"position\":2,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/proyectosfie.com\/renovado\/electronica\/\",\"url\":\"https:\/\/proyectosfie.com\/renovado\/electronica\/\",\"name\":\"Electr\\u00f3nica\"}},{\"@type\":\"ListItem\",\"position\":3,\"item\":{\"@type\":\"WebPage\",\"@id\":\"http:\/\/proyectosfie.com\/renovado\/electronica\/puertos\/\",\"url\":\"http:\/\/proyectosfie.com\/renovado\/electronica\/puertos\/\",\"name\":\"Puertos\"}},{\"@type\":\"ListItem\",\"position\":4,\"item\":{\"@type\":\"WebPage\",\"@id\":\"http:\/\/proyectosfie.com\/renovado\/electronica\/puertos\/puerto-paralelo\/\",\"url\":\"http:\/\/proyectosfie.com\/renovado\/electronica\/puertos\/puerto-paralelo\/\",\"name\":\"PUERTO PARALELO\"}},{\"@type\":\"ListItem\",\"position\":5,\"item\":{\"@type\":\"WebPage\",\"@id\":\"http:\/\/proyectosfie.com\/renovado\/electronica\/puertos\/puerto-paralelo\/tutorial-uso-puerto-paralelo\/\",\"url\":\"http:\/\/proyectosfie.com\/renovado\/electronica\/puertos\/puerto-paralelo\/tutorial-uso-puerto-paralelo\/\",\"name\":\"Tutorial uso Puerto Paralelo\"}}]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","_links":{"self":[{"href":"https:\/\/proyectosfie.com\/renovado\/wp-json\/wp\/v2\/pages\/198"}],"collection":[{"href":"https:\/\/proyectosfie.com\/renovado\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/proyectosfie.com\/renovado\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/proyectosfie.com\/renovado\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/proyectosfie.com\/renovado\/wp-json\/wp\/v2\/comments?post=198"}],"version-history":[{"count":3,"href":"https:\/\/proyectosfie.com\/renovado\/wp-json\/wp\/v2\/pages\/198\/revisions"}],"predecessor-version":[{"id":201,"href":"https:\/\/proyectosfie.com\/renovado\/wp-json\/wp\/v2\/pages\/198\/revisions\/201"}],"up":[{"embeddable":true,"href":"https:\/\/proyectosfie.com\/renovado\/wp-json\/wp\/v2\/pages\/192"}],"wp:attachment":[{"href":"https:\/\/proyectosfie.com\/renovado\/wp-json\/wp\/v2\/media?parent=198"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}