Trust:
Primero deberías comprobar que se ve bien el LCD independiente de si recibes algo o no y después comprobar si el PIC recibe o no independiente del LCD, y después todo junto si en programa del PC envía lo que deseas y se corresponde con lo que el PIC recibe. Puede ser que lo uno o lo otro.
Para el LCD debería colocar alguna salida sobre él independiente de si recibes o no algo. Para ello te propongo que coloques una salida de texto antes del do {} while (TRUE);
O sea algo así:
void main() {
char Text[]="\fLCD Test\n";
enable_interrupts(global);
enable_interrupts(int_rda);
printf("\r\n\LCD driver monitor\r\n");
lcd_init();
delay_ms(1000);
lcd_put_string(Text); // Saca algo por el LCD
lcd_gotoxy(0,2);
do {
if(Keypress!=0x00){
lcd_putc(Keypress);
putc(Keypress);
Keypress=0x00;
}
} while (TRUE);
}
Esto hace que al darle corriente al PIC envíe primero el texto "LCD Test" al LCD y debes verlo. Si no lo ves entonces el problema está en el LCD.
Después debes comprobar si recibes algo.
Para ello podrías poner un LED en algún PIN y comprobar si por ejemplo se conmuta al recibir cualquier cosa o alguna en concreto.
Por ejemplo conmutando cuando reciba algo la interrupción:
#int_rda
void serial_isr() {
Keypress=0x00;
if(kbhit()){
Keypress=getc();
output_toggle(PIN_B0);
}
}
o cuando reciba un carácter en concreto:
#int_rda
void serial_isr() {
Keypress=0x00;
if(kbhit()){
Keypress=getc();
if(Keypress=='1'){
output_toggle(PIN_B0);
}
}
}
esto debería conmutar ese PIN solo cuando reciba un '1' ASCII.
De todas formas fíjate que en mi programa original de pruebas devuelvo lo recibido, así que el programa monitor debería recibir exactamente lo mismo que envíe al PIC, deberias escribir en el monitor e ir viendo lo escrito como con eco.
if(Keypress!=0x00){
lcd_putc(Keypress);
putc(Keypress); // Esto devuelve lo que recibe (si es que recibe algo)
Keypress=0x00;
}
Bueno, por ahora creo que tienes cosas para investigar ...
