Foros de daboweb
MULTIMEDIA, Video digital, Grabación, Diseño gráfico, Diseño web, Programación => Webmasters - Diseño Web - Programación - Diseño gráfico => Mensaje iniciado por: likuid en 01 de Junio de 2004, 10:31:47 pm
-
Alguien puede ponerme el codigo fuente de como hacerlo? serían 8 entradas de datos lo que necesito, doy mi vida por ello! :lol:
[LiKuiD]
-
Hola de nuevo.
Si lo que necesitas es leer el puerto paralelo, lo puedes hacer utilizando las funciones de entrada/salida de ficheros. Por ejemplo:
HANDLE lpt;
char byte;
DWORD leidos;
lpt = CreateFile("lpt1",GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
while(1) {
ReadFile(lpt, &byte, 1, &leidos, NULL);
if (leidos > 0) {
....
/* tratamiento del carácter leido */
....
}
}
CloseHandle(lpt);
Si lo que necesitas es "controlar a saco" el puerto paralelo, el tema es un poco más complejo.
Un saludo.
-
Pues mas bien a saco si... xD
-
Dale un vistazo a esta página, te explican por encima el funcionamiento del puerto paralelo, y también hay algún ejemplo de cómo leer y escribir en el puerto.
http://www.ctv.es/pckits/tutorial.html#parallel
actualizado
Quizás esta clase te ayude más...
http://www.geocities.com/agutierrezf/practica3.html
un saludo.
-
Muchas gracias me han venido de lujo, dos preguntitas:
1) Las direcciones fisicas de memoria donde residen los datos, el control y el estado del puerto son 0x378,0x379 y 0x37a, pero no tengo ni idea de cual es cual.
2) Debo introducir 8 bits de datos por el puerto, cuando este solo posee 5 bits de datos direccion impresora --> ordenador, la solución es usar el byte de datos ke generalmente se usa en dirección ordenador --> impresora (D0-D7) que van desde el pin 1 al 9, para ello tendría que variar un bit del byte de control, pero como ya he dicho no se cual es el byte de control y menos aun que bit debería modificarle...
[LiKuiD]
Al final con la tonteria me voy a aficcionar a esto del C :roll:
-
Hola de nuevo.
Respecto a las direcciones:
0x378 es la dirección del puerto 1 (LPT1)
DATOS = base + 0 = 0x378
STATUS = base + 1 = 0x379
CONTROL = base + 2 = 0x37a
respecto a la segunda pregunta,quizás esta página te ayude:
http://www.beyondlogic.org/spp/parallel.htm
(mira el enlace "Using the Parallel Port to Input 8 Bits")
no tengo nada para conectar al paralelo, así que no puedo hacer pruebas...
un saludo.
-
Soy muy pesado lo se... algo que se escapa a mi persona:
printf ("%x",inp(0x37a)); --------> e7
outp (0x37a,0xc7); ----------> y se me mete en el registro ec! porque?
/*------------------------------------------------------*/
Por otra parte si lo hago haciendo la comparacion bit a bit con and:
outp (ox37a,0xe7&0xdf);
Haciendo esa comparacion bit a bit deberia quedarse en ese registro c7 (que es lo que quiero meter), pero se queda ec igualmente.
:evil:
[LiKuiD]
-
Vale acabo de comprobar que el problema no esta en el código, si pruebo con cualquier otra direccion de memoria me deja, pero la que necesito cambiar es la del byte de control del LPT1 (0x37a), alguna idea de porque no puedo?
-
¿Podría ser por una cuestión de tiempos de espera?
¿Qué tienes conectado al puerto?
He estado rebuscando, y he encontrado esta dirección:
http://www.cpr2valladolid.com/tecno/cyr_01/control/index.htm
En el frame de la izquierda, en el último enlace (Y, ...¿en el aula?) hay un enlace a un programa del mismo autor, LPTPanel, que podría servirte de ayuda. Más rápido por aquí:
http://www.cpr2valladolid.com/tecno/cyr_01/soft.htm#LPTPanel
un saludo.
-
Aun no he conectado el dispositivo al puerto, el tema es que ese es el byte de control, la configuracion del puerto, no debería ser necesario tener nada enchufado para poder variarlo, el caso es que le meto unos datos y el introduce lo que le da la real gana.
-
He estado haciendo las pruebas que comentas, y obtengo los mismos resultados. Es posible que el driver de la impresora se meta por medio. Habría que probar si cargar windows, a ver qué pasa.
Por cierto... qué es lo que pretendes hacer?
Sigo pensando que con WriteFile() y ReadFile() no deberías tener problemas para leer y escribir en el puerto.