TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: em2401 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
#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
#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.
-
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