SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: shadowpucci en Lunes 1 de Junio de 2009, 16:51

Título: Velocidad variable de acceso al LPT
Publicado por: shadowpucci en Lunes 1 de Junio de 2009, 16:51
Buenas, vengo con una consultita sobre un problema que tengo con el LPT

Resulta que yo tengo un dispositivo en el cual mediante LPT envio datos a un hardware (mueve un carro de impresora conectado directamente al puerto LPT con su drive de potencia). Para probar dicho harware arme un programa muy sencillo el cual me da una secuencia de datos. Entre medio de los datos, para meter espacios de tiempo, use la funcion delay(tiempo) y tiempo=1, y resulta que los datos, no solo salen MUCHO mas espaciados que con 1ms, sino que incluso lo hace con una cadencia variable (varia la velocidad con la que se muestran los datos en el puerto)

El programa es el siguiente:

Código: C
  1. //Moviendo el carro en funcion del teclado
  2.  
  3. #include <stdio.h>
  4. #include <conio.h>
  5. #include <dos.h>
  6. #define base 0x378
  7. #define tiempo 1
  8.  
  9. void main()
  10. {
  11.  int a;
  12.  int b;
  13.  
  14.  clrscr();
  15.  printf("Ingrese la Direccion del movimiento (I o D)");
  16.  outportb(base+2, inport(base+2)&0xDF);//por si el puerto esta bidireccional
  17.  do {
  18.     while(getch()=='d'){
  19.         printf("n ingrese la cantidad de steps=");
  20.         scanf("%d",&a);
  21.         for(b=0;b<a;b++){
  22.             outportb(base,0x01);
  23.             delay(tiempo);
  24.             outportb(base,0x03);
  25.             delay(tiempo);
  26.             outportb(base,0x02);
  27.             delay(tiempo);
  28.             outportb(base,0x06);
  29.             delay(tiempo);
  30.             outportb(base,0x04);
  31.             delay(tiempo);
  32.             outportb(base,0x0C);
  33.             delay(tiempo);
  34.             outportb(base,0x08);
  35.             delay(tiempo);
  36.             outportb(base,0x09);
  37.             delay(tiempo);}
  38.         printf("ok");
  39.         outportb(base,0x00);
  40.     }
  41.     while(getch()=='i'){
  42.         printf("n ingrese la cantidad de steps=");
  43.         scanf("%d",&a);
  44.         for(b=0;b<a;b++){
  45.             outportb(base,0x08);
  46.             delay(tiempo);
  47.             outportb(base,0x0C);
  48.             delay(tiempo);
  49.             outportb(base,0x04);
  50.             delay(tiempo);
  51.             outportb(base,0x06);
  52.             delay(tiempo);
  53.             outportb(base,0x02);
  54.             delay(tiempo);
  55.             outportb(base,0x03);
  56.             delay(tiempo);
  57.             outportb(base,0x01);
  58.             delay(tiempo);}
  59.             outportb(base,0x09);
  60.             delay(tiempo);
  61.         printf("ok");
  62.         outportb(base,0x00);
  63.     }
  64.   }while (getch()!='q');
  65. }
  66.        
  67.  


El programa esta hecho en borlad C corriendo en un PC con Windows XP... Puede que el XP tenga algo que ver en esto?? o es un tema del compilador?? p de la funcion delay(tiempo)??

Valga aclarar que esto no es el programa final... es tan solo algo para probar el hard, por eso esta asi tan rustico

Espero alguien pueda ayudarme

Gracias...
Título: Re: Velocidad variable de acceso al LPT
Publicado por: Eternal Idol en Lunes 1 de Junio de 2009, 16:55
Puede ser, bajo XP tu programa de MS-DOS es emulado ... fijate si va bien en Windows 9x o en MS-DOS puro mejor.
Título: Re: Velocidad variable de acceso al LPT
Publicado por: shadowpucci en Lunes 1 de Junio de 2009, 17:08
Cita de: "Eternal Idol"
Puede ser, bajo XP tu programa de MS-DOS es emulado ... fijate si va bien en Windows 9x o en MS-DOS puro mejor.

Gracias por la velocidad!! igualmente el programa final correra en un pc con ms-dos 6.0 asi que no me preocupo, pense que era un problema de la funcion delay()

una consultita mas, si entra en la oferta... cual puede ser el equivalente de outportb pero que funcione en el dev-c??
Título: Re: Velocidad variable de acceso al LPT
Publicado por: Eternal Idol en Lunes 1 de Junio de 2009, 17:15
Cita de: "shadowpucci"
Gracias por la velocidad!! igualmente el programa final correra en un pc con ms-dos 6.0 asi que no me preocupo, pense que era un problema de la funcion delay()

No lo se, cuanto antes lo pruebes en MS-DOS mejor, tal vez no funciona, tal vez si.

Cita de: "shadowpucci"
una consultita mas, si entra en la oferta... cual puede ser el equivalente de outportb pero que funcione en el dev-c??

No se puede hacer de ninguna manera oficial, los puertos se acceden solo desde modo Kernel en S.O.s modernos.