Autor Tema: Ayuda con comunicación en serie  (Leído 1060 veces)

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

Desconectado em2401

  • PIC10
  • *
  • Mensajes: 7
Ayuda con comunicación en serie
« en: 21 de Noviembre de 2013, 16:00:07 »
Saludos con la comunidad, vengo a pedir su ayuda con esto de la comunicación en serie entre 2 pics. La teoría del envio y recepción ya la comprendí, en gran parte gracias a este foro y a las preguntas que ya hicieron sobre el tema. Mi problema es el siguiente, escribi un programa para enviar una variable int16 a través del puerto serie y que el otro pic la recibiera y la volviese s convertir a int16 hasta ahi todo bien, lo que me esta rompiendo la cabeza es intentar mandar 2 variables. les adjunto los codigos:

EMISOR
Código: [Seleccionar]
#include <16f876.h>
#device adc=10
#fuses hs,nowdt
#use delay(clock=20M)
#use rs232(baud=2400, xmit=pin_c6,rcv=pin_c7)
#include <lcd.c>
#INCLUDE <stdlib.h>
void main()
{
   int16 A,B;
   char x="x",y="y",A1[5],B1[5];
   lcd_init();
   setup_adc(adc_clock_internal);
   setup_adc_ports(all_analog);
   
   while(1)
   {
      set_adc_channel(0);
      delay_us(20);
      A=read_adc();
      sprintf(A1,"%04.0Lu",A);
      set_adc_channel(1);
      delay_us(20);
      B=read_adc();
      sprintf(B1,"%04.0Lu",B);
      lcd_gotoxy(1,1);
      printf(lcd_putc,"x= %4.0Lu",A);
      lcd_gotoxy(1,2);
      printf(lcd_putc,"y= %4.0Lu",B);
      putc(x);
      delay_ms(50);
      printf("%04s",A1);
      delay_ms(50);
      putc(y);
      delay_ms(50);
      printf("%04s",B1);
      delay_ms(50);
   }
}

RECEPTOR
Código: [Seleccionar]
#include <16f876.h>
#fuses hs,nowdt
#use delay(clock=20M)
#use rs232(baud=2400, xmit=pin_c6,rcv=pin_c7)
#include <lcd.c>
#INCLUDE <stdlib.h>
int i=0,c=0,x1=0,y1=0,e=0;
int16 A,B;
char x="x",y="y",A1[5],B1[5],valor;
#int_RDA
void RDA_isr()
{
   if(e==0)
   {
      valor=getc();
      if(strcmp(valor,x)==0)
      {
         x1=1;
      }
      else if(strcmp(valor,y)==0)
      {
         y1=1;
      }
      e=1;
   }
   if(x1==1)
   {
      A1[i]=getc();
      i++;
      if(i==4)
      {
         i=0;
         A=atol(A1);
         x1=0;
         e=0;
      }
   }
   if(y1==1)
   {
      B1[i]=getc();
      i++;
      if(i==4)
      {
         i=0;
         B=atol(B1);
         y1=0;
         e=0;
         c=1;
      }
   }
}
void main()
{
   lcd_init();
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);
   while(1)
   {
      if(c==1)
      {
         lcd_gotoxy(1,1);
         printf(lcd_putc,"x= %4Lu",A);
         lcd_gotoxy(1,2);
         printf(lcd_putc,"y= %4Lu",B);
         c=0;
      }
   }
}

He intentado de 1000 formas distintas que el receptor me interprete bien lo que le llega pero no consigo hacerlo, aveces con simulación de proteus el receptor me muestra los dígitos combinados entra las 2 variables o aveces simplemente no me muestra nada.
Ojala me puedan ayudar, tal vez es un problema tonto mio de interpretación de la teoría o que se yo :(
Gracias de ante mano.

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Ayuda con comunicación en serie
« Respuesta #1 en: 22 de Noviembre de 2013, 11:52:47 »
Creo que tu problema es que estas enviando una cadena del tipo

X=1234;

y al momento de leerla estas separando el X, y despues intentas convertir la cadena "=1234" a un número
"Nada es imposible, no si puedes imaginarlo"