En tu código veo varias cosas que yo no las hubiese hecho asi ... me explico:
El emisor está constantemente enviando a toda la velocidad que le es posible, así te va a ser difícil comprobar en el receptor si te está llegando bien la emisión .... En el código que yo te propongo dejo un espacio pausado para que le dé tiempo al receptor a recibir lo que le mandan, procesarlo y ponerse de nuevo a la escucha ....
El receptor está constantemente descargando el contenido de la USART sin comprobar si ésta ha recibido o no algo, con lo cual en el tiempo en que presumiblemente tendrías que encender el led han llegado cientos de caracteres desde el PIC emisor ... En el código que yo te propongo primero le pregunto a la USART si hay algo pendiente de recibir y solo en caso afirmativo paso a descargarlo y procesarlo.
Una sana costumbre consiste tambien en que cuando hagas parpadear un Led le pongas un Delay para el tiempo en alto y otro Delay para el tiempo en bajo, porque de lo contrario se te puede dar el caso de que lo enciendas esperes 500 ms, como tú has puesto, lo apagues ... y unos pocos microsegundos despues vuelvas a encenderlo, sin darte tiempo a ver si se ha apagado o nó.
En fin, prueba con esto y cuentános que tal te ha ido ....
(¿Son obligatorios la paridad y los 9 bits?)
Un saludo.
------------------------------------------------------------------------------------------------------------------------------------------------------
codigo del transmisor
--------------------------------------------------------------------------------------------------------------------------------------------------------
#include <18F4620.h>
#use delay(clock=4000000)
#fuses XT,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT, NOPBADEN
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
void main()
{
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(FALSE);
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);
while (true){ // Bucle infinito
printf("A"); // envío el caracter A
delay_ms(600); // espero al que el PIC receptor reciba y procese sin recibir mas cosas para que no se solapen
} // y ademas para que me de tiempo a ver el efecto producido por mi envío-recepción
} // (no sería mala idea implementar un procedimiento de ACK)
--------------------------------------------------------------------------------------------------------------
codigo del receptor
--------------------------------------------------------------------------------------------------------------
#include <18F4620.h>
#use delay(clock=4000000)
#fuses XT,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT, NOPBADEN
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
void main()
{
char dato='\0'; // Declaro la variable de entrada y la inicializo a 0x00
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(FALSE);
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);
while (true){ // Bucle infinito
if(kbhit()){ // si hay algo pendiente de descargar en la UART ...
dato=getc(); // lo descargo sobre la variable -dato-
if (dato=='A'){ // si el contenido de la variable -dato- es igual al caracter 'A'
dato='\0'; // reinicializo la variable -dato- a 0x00
output_high(PIN_B0); // activo el pin B0
delay_ms(250); // espero 250 milisegundos
output_low(PIN_B0); // desactivo el pin B0
delay_ms(250); // espero otros 250 milisegundos
}
}
}
}