En tu código, en vs_ds1302, veo que dices usar el 16F648A, pero tienes declarado en 16F877A (#include <16F877A.h> )... luego, aparece que usas un reloj a 20 MHz... y eso me rceuerda a que una vez, usando un PIC con la librería de LCD, no funcionaba, porque el código iba demasiado rápido. Sólo para estar seguros, colócale un cristal a 4 MHz, para ver qué tal funciona.
Cuando ya buscaste demasiado en tu código y ves que todo está bien, a lo mejor el código este bien, ve otras alternativos, como las que te menciono... especialmente lo del cristal.
Bytes...