Hola, buen dia a todos.
Programo con CCS al pic 18F4550 y todo funciona bien. Solo tengo un problemita. Lean el siguiente codigo:
#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C0,rcv=PIN_B2,bits=8,stream=PC1)
char *probe, eti=0;
int1 fi=0;
long i=0, j=0;
#int_RDA
RDA_isr()
{
*(probe + i) = getchar(PC1);
fi=1;
}
void main()
{
setup_psp(PSP_DISABLED);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
ext_int_edge(2,H_TO_L); //Configura interrupcion con flanco de subida
enable_interrupts(INT_EXT2); //Habilita interrupcion dos
enable_interrupts(INT_RDA); //Habilita interrupcion del RS232
enable_interrupts(GLOBAL);
setup_oscillator(False);
probe=0xE1;
fprintf(PC1"Encendido!\n\r");
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\rprobe se localiza en :%u\n\r", &probe);
fprintf(PC1,"\n\rprobe apunta a:%u\n\r", probe);
while(TRUE)
{
if (fi==1)
{
fprintf(PC1,"\n\rSe recibio:%c\n\r", *(probe + i));
fprintf(PC1,"\n\rSe escribio en la direccion:%u\n\r", (probe + i));
if ((*(probe + i) == 0x0D))
{
*(probe + i)='\0';
fprintf(PC1,"\n\rSe recibio:");
for (j=0; j<=i; j++)
{
fprintf(PC1,"%c", *(probe + j));
//delay_ms(25);
}
fprintf(PC1,"\n\rDe otro modo:%s\n\r", probe);
i=0;
}
else
i++;
fi=0;
}
}
}
En este código, probe apunta a 0xE1 y lo que recibo por el rs232 lo guardo a partir de esa dirección. El problema es que después de que mi direccion llega a 255 se hace 0 y la cuenta vuelve a empezar. Por ejemplo:
225, 226, 227…254, 255, 0,1,2,3,4…. Y así cíclicamente.
Lo que recibo por el rs232 si se desplega bien aun cuando ya he pasado el 255.
Si envío “hola mundo” se guarda bien y si envío una frase mucho mas larga también se guarda bien.
Al parecer si guardo alguna frase con más de 255 caracteres se guarda bien y lo despliega bien.
Mi duda es por que cuando muestra la direccion en la que se guardo lo recibido vuelve a reiniciarse después de 255, ¿sera solo un error de impresión? ¿realmente en esas direcciones esta guardando lo recibido?.
Alguien que me puede ayudar por favor, de antemano gracias.