Comunicación serial en turbo c++

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++
 
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.
 
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....
 
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
 
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
 
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 ...
 
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
 
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!
 
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. ;)

Código:
#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();


      }

}
 
Atrás
Arriba