Hola a todos, buen dia.
Datos:
PIC18F4550
ADM232
24FC256
PCWH CCS C IDE 4.020
Problematica:
Recibir por el puerto rs232 una cadena de caracteres (del cual nose su longitud), procesar y mostrar los datos deseados.
Como estoy aprendiendo a usar punteros decidi hacerlo con el codigo de abajo:
#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C0,rcv=PIN_B2,bits=8,stream=PC1)
int1 fi=0;
int i=0;
char eti=0, *ptr, *pt, probe[];
#int_RDA
RDA_isr()
{
*ptr = getchar(PC1);
fi=1;
i++;
}
void main()
{
fprintf(PC1,"Encendido!\n\r");
ptr = (unsigned int)&eti;
fprintf(PC1,"\n\reti mide :%u bytes\n\r", sizeof(eti));
fprintf(PC1,"\n\reti se localiza en :%u\n\r", &eti);
fprintf(PC1,"\n\rUn char mide :%u bytes\n\r", sizeof(char));
fprintf(PC1,"\n\rptr mide :%u bytes\n\r", sizeof(ptr));
while(TRUE)
{
if (fi==1)
{
fprintf(PC1,"\n\rSe recibio:%c\n\r", *ptr);
fprintf(PC1,"\n\rCon tamano de:%u bytes\n\r", sizeof(*ptr));
fprintf(PC1,"\n\rSe escribio en la direccion:%u\n\r", ptr);
/*if (((*ptr) == 'E'))
{
pt = &eti;
for (j=0; j<=i; j++)
{
fprintf(PC1,"\n\rSe recibio:%c\n\r", *pt);
delay_ms(25);
fprintf(PC1,"\n\rEn la direccion:%u\n\r", pt);
delay_ms(25);
pt++;
}
}*/
ptr++;
fi=0;
}
}
}
Como se puede ver apenas estoy comenzando con el proyecto, o mejor dicho, aquí me estoy quedando atorado ya que cuando le empiezo a mandar datos desde la computadora me maraca lo que se recibio, el tamaño (que es el tamaño de un char) y la direccion donde se escribio.
Al principio todo va bien como ejemplo: cuando envio la letra A (por la computadora con el Serial Port Monitor que viene en tools de ccs ) :
En el Serial Port Monitor aparece:
Se recibio: A
Con tamaño de: 1 bytes
Se escribio en la direccion: 115
Pero cuando empiezo a mandar y mandar letras, la direccion varia indefinidamente, por ejemplo:
El primer caracter lo guarda en la 115 luego en la 116 y luego en la 117 pero de repente se guarda en la 113 (que no siempre es la 113) y vuelve a empezar la cuenta normal hasta llegar a un limite (que es variante) y vuelve a empezar en la 113 y asi cíclicamente.
Espero haberme explicado bien y que me puedan ayudar; si hay otra alternativa sera bienvenida. Gracias de antemano y espero sus comentarios.