Que tal rafaelrg06,
Como te mencioné la forma de generar la base de tiempo es usando el timer1 del PIC. Este timer es de 16 bits lo que quiere decir que puede realizar un conteo de 0000h hasta FFFFh (0 hasta 65535). Lo que tienes que hacer es conectar el cristal de 32.768KHz en los pines del Timer1 del PIC (RB6 y RB7 con sus respectivos capacitores dependiendo del tipo de cristal). Entonces configuras el timer1 para que realice su conteo desde esos pines. Como te puedes dar cuenta el cristal producirá 32768 ciclos en un segundo, lo que quiere decir que debes inicializar el timer 1 en la mitad, esto es 32768 (8000h). Entonces enciendes el timer 1 y cuando este se desborde tendras una base de tiempo de un segundo. Puedes usar interrupciones para que cuando se desborde incrementes el valor del segundero en tu reloj. Si usas un cristal de 20MHz para la ejecucion del codigo del micro, puedes hacer todo eso muy rapidamente y asi no afectaras la base de tiempo del timer 1.
Cuando se genera la interrupcion, vuelves a setear el timer1 en 32768 (8000h) y luego te quedan unos 30 microsegundos para realizar las operaciones necesarias de tu algoritmo del reloj. Si estas usando un cristal de 20MHz esto quiere decir que el ciclo instruccion (en lenguaje esnamblador) es de 200ns, esto quiere decir que puedes ejecutar hasta 150 intrucciones de ciclo simple, lo que es bastante para ejecutar tu algoritmo del reloj. En Lenguaje C, la complicacion es que no sabes el tiempo de ejecucion de cada sentencia, pero de igual manera tu precision se vera afectada muy poco o nada.
Saludos y espero que esto te sirva.
elreypic.