TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: krakc en 06 de Junio de 2009, 15:37:36
-
Hola a todos
Bueno gente tengo un problemita con los datos recibidos... les explico...
Envio UN caracter cualquiera desde la PC al pic y este es capaz (con mi programa) de tomarlo mostrarlo por LCD y reenviarlo a la PC para mostrar en el monitor del puerto serie...
Si envio DOS caracteres el pic me muestra solo por la LCD el ultimo caracter enviado y en el PC me muestra caracter por caracter.
por ejemplo si envio el numero 1: (31 en hexa)
la LCD muestra: 1
la PC muestra: Dato: 1
pero si envio los numeros 09 (30 39 en hexa)
la LCD muestra: 9
la pc muestra: Dato: 0Dato: 9
entonces lo que no quiero es eso, quiero poder unir todo lo que envio desde la PC en una sola cadena de caracteres y poder contar cuantos caracteres fueron recibidos y que me muestre:
en la LCD: 09
en la PC: Dato: 09
el programa es el siguiente....
#include <16F877a.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=pin_C6, rcv=pin_C7)
#define use_portb_lcd TRUE //definir portb lcd
#include <lcd.c> //libreria manejo lcd
void main(void)
{
char dePC=' ';
lcd_init();
lcd_gotoxy(1,1);
printf(lcd_putc,"J.Tafur");
while(true)
{
dePC=getc(); // PIC<-PC
lcd_gotoxy(1,2);
printf(lcd_putc,"%c",dePC); // PIC->LCD
printf("Dato: %c",dePC); // PIC->PC
}
}
-
Estas reescribiendo el valor recibido siempre en (1,2). Osea, recibes el 0, lo escribes, y al recibir el 9 escribes 9 en la misma posición.
Mira aquí (http://www.todopic.com.ar/foros/index.php?topic=26297.msg215547#msg215547) se ha tratado el tema.
-
gracias por la pronta respuesta
mira he modificado mi while y no me hace nada, ahora no muestra nada en la LCD ni en la PC ¿que estoy haciendo mal?
agregue la libreria string.h
char dePC[32];
while(true)
{
gets(dePC); // PIC<-PC --> !creo que este es el problema!
ndatos=strlen(dePC);
lcd_gotoxy(1,2);
for(i=0;i<ndatos;i++)
{
printf(lcd_putc,"%c",dePC[i]);
delay_ms(25);
}
printf("Dato: %c",dePC); // PIC->PC
printf("\n\n");
puts(dePC);
}
-
De esta manera funciona. Acuérdate que para que gets de como terminada la recepción se debe enviar un salto de linea (\n, Enter)
while(true)
{
lcd_gotoxy(1,2);
printf(lcd_putc
,"%s",dePC
); // PIC->LCD }
-
tampoco me funciono
T_T
:(
-
Si deshabilitas esta linea printf(lcd_putc,"%s",dePC); reenvía los datos recibidos por el PIC? Si no es así estas enviando mal la linea, te falta \n.
-
tampoco me funciono
T_T
:(
Krakc al parecer no has leido el link que dijeron que visitaras, primero recuerda que debes declarar la variable asi:
char ds[30];//si necesitas mas caracteres cambias el 30
y luego si puedes hacer el:
puts(ds);
listo, acuerdate de ver la pagina que te recomendaron ahi sale todo esto...
-
Para recibir los datos desde el PC deberías guardarlos en un vector y luego convertirlo a entero con atoi o atol según el tamaño del dato, aqui te dejo un ejemplo. saludos.
void main(void){
char dePC[8];
char data;
while(true){
gets(dePC);
data = (char)atoi(dePC);
printf(lcd_putc,"%i",data);
}
}