bueno, no he revisado todo el código, pero lo que me salto a la vista cuando abrí el archivo es que tienes esto :
#include <16f877A.h>
#use delay (clock=20000000) <-------------------- aqui dices que vas a usar un cristal de 20Mhz
#fuses XT,NOPROTECT,NOWDT,NOLVP <---------- el fuse XT es cuando vas a usar un cristal de baja frecuencia 4 MHz o menos, para 20 Mhz debes usar HS
#include <lcd.c>
#include <kbd.c>
#use standard_io(a)
#include <stdlib.h>
#rom 0x2100={'7','2','3'}
revisa esto, tal vez ahí esta el problema
Saludos
Victor Pasilla
Puebla, Pue