| |||
transmision serial de un pc a otro Estimados amigos saludos. Me encuentro realizando un programa en lenguaje c en el compilador dev-c++ que comunica serialmente dos pc, el codigo consiste en enviar un caracter desde una pc a otra el cual significa un inicio de transmisión, por el cual el pc de destino responderá enviando varios datos, hasta alli lo tengo bien; pero el pc de destino debe enviar un caracter como fin de transmisión en este caso FF, dentro de mi programa principal me encuentro preguntando por FF pero nunca lo detecta. Se q tiene q ver con el codigo ascii pero he intentado y nada, agradeceré enormemente sus ayuda. |
| |||
Respuesta: transmision serial de un pc a otro Dado que no pones codigo fuente inventare' que el codigo que usas para recibir el caracter FF lo tienes definido como char. Te recomiendo usar un int en vez de char y probar nuevamente, aunque lo recibido sea un char, el definir como int el tipo te asegurara que la comparacion pueda tener exito alguna vez. Trata con int! Alternativamente, coloca un trozo de codigo relevante a la pregunta... |
| |||
Respuesta: transmision serial de un pc a otro Hola amigo gracias por la sugerencia, mas o menos asi es el trozo del codigo #define __WINDOWS_COM__ //Para el sistema operativo donde se esta trabajando #include "com/serial.h" //Libreria con todo el protocolo de comunicacion #include <stdio.h> #include <string.h> #include <conio.h> #include <windows.h> #include <stdlib.h> #include <fcntl.h> #include <errno.h> #include <unistd.h> int main() { HANDLE fd; //Manejador del puerto cuando es abierto. DCB OldConf; //Parametros de retorno en la cominicacion char cad[1] ="$";//Datos a transmitir para inicio de tx char xx[2]; //Dato a recibir de 2 bytes int n,i=0; //Inicializacion char dat[2]="FF"; //Dato a comparar para fin de tx fd=Open_Port("COM1"); //Abre el puerto Serie en windows //fd=Open_Port("/dev/ttyS0"); OldConf=Get_Configure_Port(fd); //Guardo la configuracion del puerto Configure_Port(fd,B9600,"8N1"); //9600 baudios, 8 bits de dato, paridad ninguna, 1 de bit de parada Set_Hands_Haking(fd,0); //Control de flujo niguna Write_Port(fd,cad,1); //Escribe o envia un caracter Inicio De TX for (i=0;i<32;i++) { int Clean_Buffer( HANDLE fd); if(Kbhit_Port(fd)<2) //Espero a leer hasta que se tengan 2 bytes en el buffer de entrada n=Read_Port(fd,xx,2); // Leo el puerto serie if(xx!=dat) { printf("dato: %s\n", xx); } else printf("Fin de la transmision\n"); } Set_Configure_Port(fd,OldConf); //Restituyo la antigua configuracion del puerto Close_Port(fd); // Cierro el puerto serie printf("\nPresione ENTER para terminar\n"); getchar(); return 0; } |
| |||
Respuesta: transmision serial de un pc a otro No se si esto resuelva tu problema, pero se algo que tienes que mejorar. Para comparar 2 arreglos ( como xx y dat ), a pesar que C permite el uso de los operadores == y != en realidad no compara los contenidos de los arreglos, para compararlos deberias usar algo como if( strncmp( xx, dat, 2 ) != 0 ) printf("dato: %s\n", xx); Te recomiendo definir tanto xx como dat como arreglos de largo 3 y no de largo 2, para reservar espacio para el fin de string. |
| |||
Respuesta: transmision serial de un pc a otro Solucionado. Efectivamente necesitaba comparar las cadenas con la sentencia strncmp( xx, dat, 2 ) para reconocer el caracter y con esto implementar el fin de transmision. Segui cada uno de tus consejos Muchas gracias |