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