# Comunicación serial en  turbo c++



## sislag (Ene 21, 2009)

hola nesecito ayuda tengo qe realizar una comunicaion serial o por purto serie , con turbo c++ , mi plataforma es widows xp , agradesco información de como hacer el codigo en el lenguaje turbo c++


----------



## sislag (Ene 21, 2009)

tambien me sirve información de comunicaion por puerto paralelo


----------



## cesartm (Ene 22, 2009)

Hola amigos, buenos dias

sislaq has visto lo ejemplos que estan aqui? http://www.lawebdelprogramador.com/

Translado de datos de PC a PC mediante puerto serie
http://www.lawebdelprogramador.com/codigo/enlace.php?idp=1511&id=13&texto=C/Visual+C

Emular senal puerto paralelo
http://www.lawebdelprogramador.com/codigo/enlace.php?idp=1233&id=13&texto=C/Visual+C

Conexiones RAS
http://www.lawebdelprogramador.com/codigo/enlace.php?idp=907&id=13&texto=C/Visual+C

Mover un motor de pasos por el puerto paralelo
http://www.lawebdelprogramador.com/codigo/enlace.php?idp=113&id=13&texto=C/Visual+C

Hay varios de comunicacion tipo chat entre dos ordenadores via puerdo serie, hace tiempo tenia el codigo para controlar la impresora via puero paralelo, ojala alguien lo tenga en turbo c.

Hasta luego.


----------



## sislag (Ene 22, 2009)

gracias voy a hechar un ojo


----------



## sislag (Ene 22, 2009)

gracias, por lo visto es mas facil la comunicacion por puerto paralelo , en c


----------



## mocuislha (Feb 4, 2009)

hola que tal, me podrias ayudar? necesito comunicarme con el puerto paralelo por medio de c++ y por mas que lo intento soy incapaz ya me ha valido dos suspensos y es mi ultima oportunidad si pudieras echarme un cable....


----------



## sislag (Feb 4, 2009)

qe tal esa comunicacion la hice hace pocos dias  asi qe hay va :

para realizar una comunicacion lo ideal en la mayoria de los casos es qe sea bidireccional 

entonces hay qe ingresar a la BIOS (ctrl + f2 , en mi compu) buscar parallel port ,en una de las opciones, hacer click
elegir  bidireccional y salir guardando cambios 

hay qe instalar un driver si trabajas con xp, para tener acceso al puerto , lo bajas de 
http://olmo.pntic.mec.es/jmarti50/puerto_xp/userport.htm

montas el circuito qe sale en 
http://cfievalladolid2.net/tecno/cyr_01/control/practicas/p_2.htm

escoges la opcion 
Circuito bidireccional con alimentación externa
y  utlizas estos dos codigos para leer o para escribir los combinas , eso depende lo qe tengas qe hacer)

mandar datos fuera de la  pc
#include <stdio.h>
#include <dos.h>
#include<conio.h>
main()

{
	clrscr();
	unsigned char valor =0xe1 ;// aqui asignas el valor qe le quieres meter al registro de datos o control
	int puerto = 0x37a;	// dirección del puerto paralelo , aqui colocas la direccion del registro en la cual quieras //escribir algo , el registro de estado, 0x379, no se deja escribir , es solo para entradas

	outportb(puerto, valor);
	printf("Valor %c enviado al puerto %d\n", valor, puerto);
getch();
}





mandar datos a la pc (este codigo lee lo qe hay en el registro qe se utiliza para enviar y recibir los datos ):


#include<stdio.h>
#include <dos.h>
#include<conio.h>
#include<iostream.h>
 main ()
{
clrscr();

	unsigned char valor;
	int puerto = 0x379;	/* dirección del puerto paralelo ,aqui colocas la direccion del registro qe quieras leer*/

	valor = inportb(puerto);

printf("Byte leído del puerto %d = 0x%X\n", puerto, valor);

}

se manejan tres registros basicos:

0x378 el de datos , puede ser salida o entrada
0x379 , el de estado , solo entradas , solo son manipulables los 5 bits mas significativos 
0x37a, el de control, salidas , sigue las indicaciones qe te da el montaje para habilitar el modo de entrada o salida

si eso fue lo qe hize y me funciona en turbo c, c++ es lo mismo 
por información te recomiendo pag:

http://www.modelo.edu.mx/univ/virtech/circuito/paralelo.htm
http://mimosa.pntic.mec.es/~flarrosa/puerto.pdf


----------



## mocuislha (Feb 4, 2009)

muchas gracias mañana lo intentare haber si hay suerte, me salvas la vida si soy capaz de lograrlo muchas gracias


----------



## Meta (Feb 4, 2009)

Hola:

Hice algo parecido de controlar el puerto serie pero con el Visual C#, claro que tengo intención de pasarlo también a Visual C++ en el futuro.

Quizás este manual te sirva para lo que buscas.

http://www.abcdatos.com/tutoriales/tutorial/z9521.html

Un cordial saludo.


----------



## mocuislha (Feb 5, 2009)

una cosilla en mi turbo c no me aparece en la libreria la funcio delay alguien me podria pasar la libreria que me hace falta? gracias


----------



## renzo1589 (Oct 8, 2012)

Buenas soy nuevo en el foro. quisiera hacer circuito con el cable serial que  sale de la pc(encender y apagar un led ) a travez de el turbo c++ .

mi incognita es si la computadora tiene w7 y no tiene puerto serial tengo que comprarme un convertidor serial usb ?
para usar el puerto tengo que hacer un circuito con el max 232 ?

gracias por su atencion


----------



## ProtexFor (Abr 29, 2014)

Bueno, como la pregunta lo dice, yo estoy haciendo una cinta transportadora contadora de objetos, y lo que quiero hacer ahora es mover un motor paso a paso del Turbo C con el puerto serie, si alguno me puede dar una mano, se lo agradecería muchisimo..
También quiero hacer en modo gráfico en este mismo entorno un botón para encender el motor y otro para pararlo.
Desde ya, muchísimas gracias por la atención!
Saludos cordiales ...


----------



## TRILO-BYTE (Abr 29, 2014)

ya estamos en el siglo 21 ya pasaron 25 años del turbo C++
si tengo el codigo si lo quieres

pero por que no lo haces directo en Visual C++, es mas facil solo jalas el icono del serialPort , y ya!

ahora si quieres usar el puerto serie para mover el motor a pasos necesitas un microcontrolador que interprete lo que llega del puerto serial.

:/ es un camino largo si no se sabe a donde va


----------



## ProtexFor (Abr 29, 2014)

Coincido con vos, pero en la facultad me están enseñando ese entorno, que después no lo usamos mas en la vida creería yo jaja...
El micro controlador ya lo tengo programado y funciona, lo que me faltaria es eso que propongo, si tienes el programa te agradecería si me lo pasas...
Saludos!


----------



## TRILO-BYTE (Abr 29, 2014)

Bueno, acá va, es largo.
Turbo C no lo va a correr porque no tiene la librería windows.h 
Mejor usa el Borland C5 o DevC ++
Pero este código lo escribí hace tiempo en Borland C5

Hay librerías de más porque me daba pereza buscar librerías y declaraba librerías a lo bruto.
Para leer y escribir se escribe byte a byte.
No puedes escribir una cadena de caracteres.

Pero en fin, allá  va.

Otra cosa, detecta el puerto serie, así que si tienes 1 o 2 lo detectará de una manera bruta pero lo hace. 


```
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <conio>
#include <dir.h>
#include <fstream>
#include <stdlib.h>
#include <math.h>
#include <windows.h>
#include <stdlib.h>



int main (void)
{
 HANDLE h; /* handler, sera el descriptor del puerto */
 DCB dcb; /*  aqui se meten los parametros del puerto */

 DWORD dwEventMask,nil; /* mascara de eventos */
 COMMTIMEOUTS timeouts;

 char COM[5]="COM1";
 int COMnum=0;
 int estado=0;


 while(estado!=1) //estado del puerto
 {
 //configuracion del puerto serie
 h=CreateFile(COM,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);


    if(h == INVALID_HANDLE_VALUE)
       {
        /* ocurrio un error al intentar abrir el puerto */

      COMnum++;
      COM[3]=49+COMnum;

      if(COMnum>=15)
          {
             cout<<"no hay puerto serie!!"<<endl;
            getch();
              exit(0);
          }
      estado=0;
        }
          else
             {
               estado=1;
            }

 }//while()
 cout<<"el puerto encontrado fue: "<<COM<<endl;






    /* obtenemos la configuracion actual */
    if(!GetCommState(h, &dcb))
       {
        /* error: no se puede obtener la configuracion */
      cout<<"Error al configurar el puerto "<<endl;
      getch();
        }

    /* Configuramos el puerto */
    dcb.BaudRate = 9600;
    dcb.ByteSize = 8;
    dcb.Parity = NOPARITY;
    dcb.StopBits = ONESTOPBIT;
    dcb.fBinary = TRUE;
    dcb.fParity = TRUE;

    /* Establecemos la nueva configuracion */
    if(!SetCommState(h, &dcb))
       {
        cout<<"Error al configurar el puerto "<<endl;
      getch();
        }

   timeouts.ReadIntervalTimeout = 1;
    timeouts.ReadTotalTimeoutMultiplier = 0;
    timeouts.ReadTotalTimeoutConstant = 0;

    SetCommTimeouts(h, &timeouts);



   char caracter; //--------------------------------------------------------------------------es el caracter a usar
   int velocidad;
   char tecla;


   while(tecla!='N')
       {
         caracter='2';
           WriteFile(h, &caracter, 1, &nil, NULL);

         cout<<"delay en ms"<<endl;
         cin>>velocidad;
           WriteFile(h, &velocidad, 1, &nil, NULL);

          WaitCommEvent(h, &dwEventMask, NULL);
            ReadFile(h, &caracter, 1, &nil, NULL);
         cout<<endl<<"llego ECO:"<<caracter<<endl;

         cout<<"ajustando!!"<<endl;

         caracter='1';
           WriteFile(h, &caracter, 1, &nil, NULL);

         cout<<"delay en ms"<<endl;
         cin>>velocidad;
           WriteFile(h, &velocidad, 1, &nil, NULL);

         WaitCommEvent(h, &dwEventMask, NULL);
            ReadFile(h, &caracter, 1, &nil, NULL);
         cout<<endl<<"llego ECO:"<<caracter<<endl;


         cout<<"repetir otra vez? S/N"<<endl;
         tecla=getche();
         tecla = toupper(tecla);

         clrscr();


      }

}
```


----------

