Hola!

Registrándote como bakuno podrás publicar, compartir y comunicarte en privado con otros bakuos :D

Regístrame ya!

Puerto paralelo [Problema]

Expansiver

Bovino Milenario
Desde
18 Ene 2008
Mensajes
1.441
Por que cuando uso la libreria inpout32.dll, cuando uso la direccion
  • out ( &H378, 2 )

No da respuesta el puerto papalelo.

Solo da respuesta con la direccion: out ( &H37A, 2 ) y da respuesta en 4 bits
 
Recuerdo que no use dll, pero lo que pienso que esta mal es la direccion del puerto paralelo que estas poniendo "&H37A", la direccion de puerto paralelo la puedes checar en tu Bios para que no tengas problema, si no sabes, me avisas y vere si te puedo asesorar mas graficamente :PNo estoy seguro pero eso me parece que es el error, y el 2 creo que haces referencia al pin, por el cual quieres mandar el pulso electrico!
 
Estoy usando Visual Basic

Ya intente eso del bios pero no funciono, dejame checo otra vez y ya te digo no?

Basicamente solo necesito 3 pines de salida
 
Estoy usando Visual Basic

Ya intente eso del bios pero no funciono, dejame checo otra vez y ya te digo no?

Basicamente solo necesito 3 pines de salida

Yo tengo uno en java, pero pues sonmuy diferentes los estilos, unoamigo tiene uno en basic, vere si lo consigo, pero no es muy seguro, pero en lo que se te pueda ayudar aqui estamos!!
 
Este es un código que yo utilizaba en mi clase de ensamblador funciona para el puerto lpt1 pero corre sobre linux, ahí te lo dejo si te sirve de algo :)

Código:
#include <stdio.h>
#include <unistd.h>
#include <sys/io.h>
 
// Esta es la direccion más frecuente para el puerto paralelo
#define DATAPORT 0x378 /* lpt1 */
 
//Duración de cada paso en microsegundos
#define DELAY 150000
 
//Numero de veces que se repite cada secuencia
#define REPEAT 4
 
void Blink();
void Alternate();
void ZigZag();
 
int main()
{
  //Obtenemos permiso de acceso para la direccion de DATAPORT y
  //las 2 siguientes
  if (ioperm(DATAPORT, 3, 1)) {perror("ioperm"); return 1;}
 
  //mode indique que secuencia es la que se esta ejecutando
  int mode=0;
  while(1)
  {
    int i;
    for(i = 0 ; i < REPEAT; i++)
    {
      int reset=0;
      //Comprueba el valor de mode
      switch (mode)
      {
        //Si vale 0 toca parpadeo
        case 0:
          Blink();
          break;
        //Si vale 1 toca alternar pares e impares
        case 1:
          Alternate();
          break;
        //Si vale 2 toca hacer un ZigZag
        case 2:
          ZigZag();
          break;
        //Si vale otra cosa, vovemos a empezar. Para ello
        // ponemos mode a -1
        default:
          mode=-1;
      }
    }
    //Despues de repetir REPEAT veces una secuencia pasamos 
    //a la siguiente sumandole 1 a mode
    mode++;
  }
 
  //Volvemos a cerrar los puertos
  if (ioperm(DATAPORT, 3, 0)) {perror("ioperm"); return 1;}
 
  return 0;
}
 
//Esta función hace parpadear los leds.
void Blink()
{
  //Ponemos todos los led a 1
  outb(255,DATAPORT);
  //Y esperamos 2*DELAY microsegundos
  usleep(2*DELAY);
 
  //Luego ponemos todos los leds a 0
  outb(0,DATAPORT);
  //Y volvemos a esperar
  usleep(2*DELAY);
}
//Esta función enciende alternativamente los leds pares y los impares
void Alternate()
{
  int i;
  //repetimos cuatro veces
  for(i=0;i<4;i++)
  {
    int output = 85;
 
    //Primero ponemos 85 que es 01010101 en binario,
    //con lo que se iluminan los leds impares, y esperamos 2*DELAY
    outb(output,DATAPORT);
    usleep(2*DELAY);
 
    //Desplazamos los bits de output un lugar a la izquierda,
    //con lo que nos queda "10101010"
    output = output << 1;
 
    //Al pasarlo al puerto paralelo se iluminan los leds pares
    outb(output,DATAPORT);
    usleep(2*DELAY);
  }
}
 
//Esta función enciende ulas luces al estilo del coche fantastico
void ZigZag()
{
  //output solo tiene el último bit distinto de 0
  int output = 1;
  //direction indica el sentido de movimiento de la luz: 1 izquierda,
  // 0 derecha. Empezamos hacia la derecha
  int direction = 1;
  while (output !=0)
  {
    //Sacamos output por el puerto
    outb(output, DATAPORT);
    usleep(DELAY);
 
    //Si dirección es distinto de cero
    //movemos los bits de output hacia la izquierda
    if(direction)
      output = output << 1;
    //Si no, los movemos hacia la derecha
    else
      output = output >> 1;
 
    //Si output vale 256 es que se nos ha salido
    //la luz por la izquierda así que cambiamos la dirección
    if(output==256)
    {
      output = output >> 1;
      direction = !direction;
    }
  }
}
 
Pess la direccion 0x378, se usa para salida en puerto paralelo cuando esta configurado en SPP o puerto standar, para la direccion 0x37A esta configurado en el bios con esa direccion.
Puede que sirva la siguiente pagina :
Código:
http://www.modelo.edu.mx/univ/virtech/circuito/paralelo.htm
 
Volver
Arriba