Wednesday, November 19, 2008

Von zeit zur zeit denke ich an dich und mich...

No es sencillo en Windows, (a partir de Windows XP), sacar datos por el puerto paralelo.
El sistema operativo simplemente no da permisos para hacerlo, los sistemas operativos Windows 2000 y XP no permiten que los programas tengan acceso directo a este puerto!
Es mucho más fácil hacerlo en Linux Gnu, pero si uno está obsesionado con hacerlo en Windows XP, aquí están los pasos que deberá seguir para tener acceso a la escritura en este puerto:

1. Baja y descomprime el archivo UserPort

2. Copia el archivo userport.sys al directorio C:\WINDOWS\SYSTEM32\DRIVERS

3. Ejecuta el programa userport.exe, y sin tocar nada mas, presiona el botón "Start", luego cierra el userport.Esto tendrás que hacerlo cada vez que reinicies el ordenador.

4. Finalmente ejecuta el programa que daba problemas en modo de compatibilidad para “Windows 98”. ¿como se hace esto? Muy sencillo:

Para establecer las propiedades de compatibilidad de un programa:

* Haga clic en el botón derecho del ejecutable o en el acceso directo al mismo, y haga clic en Propiedades.
* Seleccione la casilla de Ejecutar este programa en modo compatibilidad.
* Seleccione de la lista el sistema operativo Windows 98.
* Ejecute el programa de nuevo cuando haya terminado de cambiar la configuración.

Ahora bien, se "supone" que con esto debemos poder tener acceso al puerto paralelo, claro está que es necesario probarlo, para hacerlo se puede hacer un sencillo programa en C++, y usar la siguiente función:
_outp(a,b);
Esta función, localizada en la librería de Conio.h, (uuuh Conio...gag me with a spoon!) recibe 2 parámetros, " a" es el puerto al cual se desea escribir, en este caso es el puerto paralelo y por ende se pondría aquí 0x378, que es el número asigando a este puerto, y "b", que es el valor que se desea enviar a esta puerto. b es un valor entero, y el valor máximo que puede tomar es 255,esto se debe a la configuración del puerto paralelo que usé, contaba con 8 bits de salida, y los demás representaban tierra y uno extra la señal de storbe.
Recordemos que el bianrio 11111111 equivale a 255, y por ende es el mayor valor que se puede representar con esta salida, ahora bien el menor valor es cero, y es cuando tenemos 00000000.

Un programa simple, para verificar que nuestro puerto paralelo está funcionado adecuadamente se presenta a continuación: (Este programa lo corrí en Visual Studio 2003)


#include
#include
#include
int main()
{
char c='s';
int orden, alphacommand = 1, betacommand = 2;

while (tolower(c)=='s')
{
printf("\n1 = alphacommand\n");
printf("2 = betacommand\n");
printf("Elija el comando (1/2): ");
scanf("%i",&orden);
if (orden==alphacommand)
_outp(0x378, 0x1);
else if (orden==betacommand)
_outp(0x378, 0x0);

printf("\nComando Realizado.\n\nDesea Continuar?:(S/N)");
c = getch();
}

return 0;
}

El programa anterior cuando se escoje el alfacomando, prenderá un bit del puerto paralelo, con un multimetro se puede verificar que esto se lleve acabo realmente.
Esperemos que este post ahorre el tiempo de las personas...und sie können mit dieser Zeit eine gute Liebe finden





2 comments:

Saiph said...

osh...no se porke el programa no me deja indentarlo...ya me harte...en fin, debia ir intentado ehhh...

Aranu Kutt Katrea, The Last Lord of Keith said...

Ja ja,un par de meses tarde...
Necesitaba eso cuando estaba haciendo mi práctica de Dispos E/S!!
Pero bueno, everything has gone fine...

¡Por cierto! Si el editor de Blogger is not enough, prueba Windows Live Writer, es como un Word pero para blogging xD

Saludos y feliz año nuevo!