# Como manejar los puertos de la PC con C++?



## eduardo.eca (Jul 12, 2009)

Hola a todos!

Esta vez estoy en un proyecto de Electronica, el cual consiste en poder manipular datos por los puertos de la PC, ya sea el paralelo, el puerto serial o USB....pero eso si, bajo un programa realizado en C++. Ya busque varios ejemplos de como poder manejar el puerto paralelo, pero los programas no se compilan, no se que es lo que puede estar pasando! Necesito saber si necesito de alguna DLL para poder manipular los puertos con C++ y que me proporcionen algunos ejemplos, ya que en esto de la programación en C++ no estoy muy adiestredo  

de antemano gracias por tomarse su tiempo para ayudarme, Saludos!


----------



## Meta (Jul 12, 2009)

Hola campeón:

En estos momentos estoy haciendo, diseñando la programación del puerto paralelo para poder en el futuro hacer un manual de calidad.

Aquí hay un manual de PDF sobre el puerto serie con Visual C++ y Visual Basic .net
http://www.abcdatos.com/tutoriales/tutorial/v12.html

El mejor es este de Visual C# más completo.
http://www.abcdatos.com/tutoriales/tutorial/z9521.html

Ya dirás si te sirven y no necesitan ninguna dll, el puerto paralelo si.

Saludo.


----------



## eduardo.eca (Jul 17, 2009)

Muchas gracias por los manuales!

Ahora, necesito saber donde puedo encontrar la DLL para C++, para manejar los puertos!

?


----------



## Meta (Jul 17, 2009)

En los puerto series no necesitas DLL.


----------



## eduardo.eca (Jul 17, 2009)

Pero el problema es que necesito controlar un circuito electronico con la PC, y tiene que ser por puerto paralelo! 

he buscado en internet algunas DLL, pero no me funcionan! He seguido paso a paso los pasos para copiar a la carpeta de System32 la DLL, y nada de nada. Ya mas o menos puedo hacer programas en C++, pero aun sigo con ese problema, que no puedo controlar el puerto paralelo con C++!

Te agradezco por tu colaboración, ya visite tu blog, me parece interesante!


----------



## Meta (Jul 17, 2009)

Estoy con el proyecto del puertoparalelo pero no lo he acabado.

http://www.google.es/search?hl=es&q=inpout32.dll+puerto+paralelo&btnG=Buscar&meta=lr=lang_es

Saludo.


----------



## angel19xx (Ago 12, 2009)

Meta, sigues trabajando en tu proyecto?


----------



## Meta (Ago 13, 2009)

¿Cuál te refieres?


----------



## angel19xx (Ago 13, 2009)

El proyecto del puertoparalelo


----------



## Meta (Ago 13, 2009)

Por supuesto.


----------



## eduardo.eca (Ago 18, 2009)

Gracias por sus aportes! Ya pude controlar el puerto paralelo de la PC, se necesita utilizar la libreria inpout32.dll....luego en el codigo del programa se tiene que mandar a llamar a esta libreria para utilzar las funciones de dicha libreria, las cuales permiten ingresar y enviar datos a traves del puerto paralelo!


----------



## cevollin (Mar 24, 2010)

hey amigos para tratar de evitar estos errores de el puerto paralelo bloqueado en xp
hace falta dos librerias DLL  
las cuales estan adjuntadas aqui en este mensaje
nota el pass del zip es mi nombre de usuario 

aqui esta un pequeño ejemplo de como mandar datos  POR EL PUERTO PARALELO hecho en turbo c++ 4.5  100% probado


```
#include <iostream.h>
#include <stdio.h>
#include <dos.h>
#include <windows.h>
#include <conio.h>

int numero;

main ()

{
printf(" EJEMPLO ENCIENDE UN LED CONECTADO EN EL PIN D0 DEL PUERTO PARALELO \n");
printf("*********************BY MOE ERG cevollin***************************\n \n \n");

printf("NUMERO 0 = LED APAGADO \nNUMERO 1 = LED ENCENDIDO \n");
printf("INTRODUSCA 0 o 1 PARA APAGAR O ENCENDER LED \n");
principio:
scanf("%d",&numero);

if(numero==0)
outport(0x378, 0);

if(numero==1)
outport(0x378, 1);
goto principio;
getch ();
return 0;
}
```


----------



## sento87 (Mar 24, 2010)

Coño esto lo quiero probar yo, aunque desde que me puse el W.vista cada vez que he probado a compilar un programa con el devc++ me da error...

Muchas gracias por las informaciones y sobre todo por el ejemplo!

Un saludo!


----------



## elbrujo (Mar 24, 2010)

Pasa que el XP, no direcciona los puertos como con otros SO.


----------



## cevollin (Mar 24, 2010)

si la verdad cada compilador tiene su defectito en el dev c++ por ejemplo no tiene la libreria conio  y aparte no tiene las funciones para manejar los puertos el outport

y el turbo c++ me esta dando ahorita unos pequeños problemitas con la funcion 

sleep     de la libreria dos.h
Sleep     de la libreria windows.h


----------



## Dr. Zoidberg (Mar 24, 2010)

cevollin dijo:


> si la verdad cada compilador tiene su defectito en el dev c++ por ejemplo no tiene la libreria conio  y aparte *no tiene las funciones para manejar los puertos el outport*



Y yo me pregunto: por que será que en lugar de estudiar cada compilador nuevo se dedican a quejarse que no tiene lo mismo que el Borland? Solo aprendieron ese compilador y ningun otro? Nunca estudiaron que esas funciones NO SON estándar del ANSI C y cada fabricante las llama como se les ocurre, lo mismo que las bilbiotecas?

El Dev-C SI TIENE instrucciones E/S, pero tienen otro nombre:
*_outp()* es equivalente a la outport() y
*_inp()* es la equivalente a la inport()
Y esas instrucciones compilan sin necesidad de ningún _*include*_.

Por otra parte, Windows virtualiza los recursos de hardware, así que poco importa que el compilador tenga soporte I/O por que el sistema operativo nunca lo va a dejar acceder al hardware desde el especio de usuario y siempre va a arrojar una excepción, que son esos errores que dicen que aparece.
Claro que hay formas de sobrepasar esta protección, unas mas simpes y otras mas difíciles, pero les recomiendo visitar www.beyondlogic.com y analizar el producto PortTalk.


----------



## hectoritr (Abr 4, 2010)

Hola! estoy con un problema que parece es bastante comun, tengo windows 7 y compilo con minGW por las dudas haga falta saberlo.
Quiero saber como puedo controlar el puerto paralelo con C++, ya probe con los .dll de arriba, con un "driver para puerto paralelo UserPOrt" pero lo unico que hace es apagarme la compu cuando tiene ganas, y porbe con varias combinaciiones de comandos por  las dudas _outp() outp() outport() outportb() y nada. 
Me tira el error .cpp:error: 'outport' was not declared in this scope

Alguien que me pueda ayudar??? Muchas gracias ya busque por todos lados


----------



## elbrujo (Abr 4, 2010)

Investiga si con W7 la direccion de los puertos paralelos corresponden a las direcciones de antes y no esten remapeadas. Si el soft va a buscar un hard a una direccion inexistente es logico que no pueda hacer nada..


----------



## hectoritr (Abr 4, 2010)

Hola! y gracias por responder, pero si estan bien las direcciones que utilizo lo comprobe con el DEBUG y con el portmon (programa para ver con colores la activida del puerto) esta muy bueno.

Mi problema es que no puedo compilar el codigo! Es mucho mas dificil hacerlo por USB o estoy en la misma complicacion?

Gracias


----------



## Meta (Abr 20, 2010)

Prueba con http://www.microsoft.com/express/Downloads/#2008-Visual-CPP que fucniona seguro, en dos meses llegará en español el 2010.


----------



## Astharoth (Abr 25, 2010)

Saludos foristas yo tengo un problema con el Userport, me manda datos por el puerto paralelo de forma saltada, me refieró a que cuando hago correr un programa funciona bien, acto seguido hagó correr el mismo programa y no funciona para nada. Yo lo usó para habilitar el puerto paralelo con ensamblador.


----------



## hectoritr (Abr 25, 2010)

Hola amigo, yo pase por lo mismo, y te recomendaria que pruebes con estas dos soluciones.
->Habilita con el User port solo los puerto que vas a utilizar no todos.
->Saca las dos librerias IO.dll y la inpout32.dll, baja las que dan mas arriba en los comentarios de nuevo y pegalos de vuelta.

Y si nada de esto funciona, que es a lo que recurri yo, prueba restaurar el sistema hasta el punto anterior a haber utilizado el Userport por primera vez, y sigue el paso 1 de mi lista!jaja

Saludos y espero lo soluciones...

Y se arregle o no avisa en el foro!


----------



## cevollin (May 3, 2010)

pues la verdad no tiene mucha ciencia conectas el anodo de un simple led al pin D0 del puerto paralelo Y en el catodo del led le conctas una resistencia  de 220 ohms y el otro extremo de la resistencia la conectas a la tierra del puerto paralelo


----------



## kuoyaoming (May 14, 2010)

Hola, meta, me llamo Kuo Yao Ming, como estas?
Una consulta, estoy haciendo un proyecto de robotica para la 8º competencia de bahia blanca- argentina.
me surgio un problemita , no encuentro instrucciones para manejar con analogica.
La idea es simple:
Ej: si Porta.0 es mayor que 2V,  saltar hasta la rutina "estrategia"
Tambien me podrian recomendar algun manual de assembler que sea entendible?? 
Muchas Gracias de tomar el tiempito por leer mi mensaje
Atte.Kuo Yao Ming


----------



## Chico3001 (May 15, 2010)

Revisa los temas marcados como "Destacados" en el foro de microcontroladores, alli encontraras toda la informacion que necesitas... 

Saludos...


----------



## gonpa (Nov 20, 2011)

Hola alguien pudo usar las librerias io.dll e inpout32.dll en dev c++? yo no se como adjuntarlas o usarlas.
me podrian dar una mano? 

tengo que hacer unas practicas con el puerto paralelo.

muchas gracias desde ya.


----------



## zealot2 (Nov 26, 2011)

Aqui va mis primeras pruebas, ni led ni nada, solo me basto un multimetro puesto con mucho cuidado al lpt para saber que trabajaba en modo dos, luego hice un proyectico trafic light, que fue en windows, use Enbarcadero son los dueños actuales de Borland pero logre que windows me diera acceso al lpt, aunque hay que instalar un driver para eso, te lo estoy buscando, dame un chance, saludos.


----------



## Meta (Feb 15, 2012)

zealot2 dijo:


> Aqui va mis primeras pruebas, ni led ni nada, solo me basto un multimetro puesto con mucho cuidado al lpt para saber que trabajaba en modo dos, luego hice un proyectico trafic light, que fue en windows, use Enbarcadero son los dueños actuales de Borland pero logre que windows me diera acceso al lpt, aunque hay que instalar un driver para eso, te lo estoy buscando, dame un chance, saludos.



A lo mejor si hechas una mirada a este manual lo solucioines.


----------



## san25 (Feb 22, 2012)

bueno mi pregunta es como puedo compilar esto eh provado todolos coiladres y no se con cual progaram lo ahn hecho les pedira si pudiera ayudarme solo quiero cambiar las palabra que dice el lcd para me sale error y creo que es proque no se con que compilador lo ham hecho si pidiran ayudarme se lo agradeseria

#include <16F877.h>
#USE DELAY( CLOCK=4000000)
#FUSES XT,NOWDT,NOPROTECT,NOPUT
#USE fast_IO (B)
#USE fast_IO (A)
#include <lcd.c>
#define LCD_DISPLAY_SHIFT_RIGHT 0x18
#define LCD_DISPLAY_SHIFT_LEFT  0x1C


byte CONST DISPLAY[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

void temp(int i){
byte ud=i;
      for (ud=i;ud>0;ud--){          
         OUTPUT_C(DISPLAY[ud]);
        lcd_putc("---->>>>--->>>>");
         if(input(pin_b1)==1)
        { lcd_putc("\n    detengase");}
        else
        if(input(pin_b3)==1)
        {lcd_putc("\n     Cuidado");}
        else
        if(input(pin_b5)==1)
        {lcd_putc("\n     Avance");}
         delay_ms(500); 
         lcd_putc("\n\f");
         delay_ms(500);
   }
 }
main(){
lcd_init();
set_tris_d(0x00);
set_tris_c(0x00);
SET_TRIS_B(0x00);
SET_TRIS_A(0x00);
OUTPUT_B(0);
while(1){
   set_tris_c(0x00);
   set_tris_a(0xff);
   output_b(0x00);
    if((input(pin_a0)==0)&&(input(pin_a1)==0))
    {
      output_b(0x02);
      temp(5);
      output_b(0x08);
      temp(2);
      output_b(0x20);
      temp(5);
    }
    if((input(pin_a0)==0)&&(input(pin_a1)==1))
    {
      output_b(0x02);
      temp(5);
      output_b(0x08);
      temp(2);
      output_b(0x20);
      temp(8);
    }
    if((input(pin_a0)==1)&&(input(pin_a1)==0))
    {
      output_b(0x02);
      temp(8);
      output_b(0x08);
      temp(2);
      output_b(0x20);
      temp(8);
    }
    if((input(pin_a0)==1)&&(input(pin_a1)==1))
    {
      output_b(0x02);
      temp(9);
      delay_ms(1000);
      output_b(0x08);
      temp(2);
      output_b(0x20);
      temp(5);
    }
   }

}


----------



## hectoritr (Feb 22, 2012)

Hola san25, podrías explicar claramente que compiladores has usado, y que mensaje de error te devuelve.

Ademas, creo que lo que estas haciendo es un código para un PIC o me equivoco?, y este tema habla de manejo de puertos con PC, pero no soy quien para decidir si es off-topic. 

Espero tu respuesta para poder ayudarte.

Saludos


----------



## romaci2005 (Ago 3, 2012)

el programa anterior está hecho en PIC C con CCS compiler y es para un PIC16F877  
un cordial saludo a todos los foristas.


----------

