Autor Tema: Recibir trama completa RS-232  (Leído 1712 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Gabo

  • PIC10
  • *
  • Mensajes: 2
Recibir trama completa RS-232
« en: 18 de Enero de 2016, 22:36:56 »
Hola a todos.

Soy totalmente nuevo en cuanto el universo PIC se refiere (tanto foros, programación, montaje, etc), estoy en proceso de aprendizaje y desarrollo de manera autodidacta, pero me he topado con un problema a la hora de recibir datos mediante el puerto serial.

Este es el bloque que tengo programado:

char command[8]="SERIAL";
char commrec[8];

.....

if (kbhit()){
   gets(commrec);
   if(strcmp(commrec,command)==0){
   printf("U = %u\r",u);
   printf("D = %u\r",d);
   printf("P = %d\r",p);
   }else{
   printf("Error unknonw command \r");
   }
   }

La prueba de comunicación la estoy realizando con la Terminal, sin tener ningun problema.

Lo que deseo hacer es que el PIC pueda recibir el texto "completo":

"SERIAL"(enter)

y no "caracter por caracter":

"S" "E" "R" "I" "A" "L" (enter).

esto debido a que el equipo final con el cual lo deseo comunicar solo envia tramas completas (comando de solicitud).

Estoy usando in PIC 16F877A y programo con Pic C


Agradeceria mucho la ayuda.


Saludos.

 
« Última modificación: 19 de Enero de 2016, 11:32:08 por Gabo »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Recibir trama completa RS-232
« Respuesta #1 en: 19 de Enero de 2016, 15:02:30 »
Debido a que no mostras todo el programa voy a asumir que hay muchas cosas mas.

Toda comunicacion lo mejor que podes hacer en la parte de recepcion es utilizar interrupciones, el cual nunca usaria gets() dentro de una interrupcion.

Si solo tenes eso en tu programa no veo "demasiado" problema pero hay un par de cosas mal, como por ejemplo nada limita al gets, es decir puede pasarse de esos 8 lugares del array Y terminar sobreescribiendo otras partes de la memoria RAM. Y el otro problema que veo es que si se envia algo mientras esta en un printf, me refiero a 2 o mas caracteres puede que exista un error por   sobrescritura en el buffer de la UART, por eso mismo si o si interrupciones.

Respecto a recibir todo junto, esto jamas lo vas a poder hacer a no ser que tengas un micro con justamente un buffer de hardware de 9 lugares.
Como es una comunicacion serial vas a recibir caracter por caracter, luego tu deber es ir juntando estos caracteres en un array, agregarle el caracter nulo ( 0x00 o '\0' ) al final y recien ahi comprobarlo. Esto lo hacen todos los dispositivos no solo el micro, sino la PC tambien.

Creo que deberia resolverte las dudas que tenes, sino podes seguir preguntando.

Desconectado Gabo

  • PIC10
  • *
  • Mensajes: 2
Re:Recibir trama completa RS-232
« Respuesta #2 en: 19 de Enero de 2016, 20:58:57 »
Muchas gracias por el apoyo KILLERJC, agradezco los comentarios.

Estoy leyendo acerca de las interrupciones para poder implementarlo, en cuanto me surjan dudas te las estare consultando.


Saludos.