El programa lo copie tal cual como estaba.
Yo descarto que sea de hard porque probe este ejemplo y funciona:
#include <18F452.h>
#use delay(clock=4000000)
#use rs232(baud=9600,xmit=PIN_C0,rcv=PIN_C1)
#fuses XT, NOPROTECT, PUT, NOWDT, BROWNOUT, NOLVP, NOCPD, NOWRT
#include <lcd_4x20.c>
unsigned int opcion;
void main() {
lcd_init();
while(true) {
opcion = getc();
lcd_gotoxy(1,1);
if(opcion == "1")
printf(lcd_putc,"1111"

;
else if(opcion == "2")
printf(lcd_putc,"2222";
}
}
Pero de esta otra no funciona:
#include <18F452.h>
#use delay(clock=4000000)
#use rs232(baud=9600,xmit=PIN_C0,rcv=PIN_C1)
#fuses XT, NOPROTECT, PUT, NOWDT, BROWNOUT, NOLVP, NOCPD, NOWRT
#include <lcd_4x20.c>
unsigned int opcion;
#INT_RDA rda_isr() {
opcion = getc();
}
void main() {
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
lcd_init();
while(true) {
lcd_gotoxy(1,1);
if(opcion == "1")
printf(lcd_putc,"1111"

;
else if(opcion == "2")
printf(lcd_putc,"2222";
}
}