No es nada eficiente siquiera poner un delay,
Y hablar de hacer un delay por horas me afecta mucho mas xD.
Solucion usa un timer con preescaler + un cristal de 32768Hz + interrupciones.
Esto te va a dar masomenos exacto la "hora" (Al menos mas exacto que usando delays) y no te va a poner al micro en un estado que no lo podes sacar, ya que va a estar encerrado en ese delay.
Si te interesa el consumo lo podes mandar a dormir. etc etc etc.
Igual depende del PIC que tengas. Aun asi si queres insistir en utilizar delays, no te queda otra que lo que hiciste. Pero vuelvo a repetirte, me parece que tiene un 0% en eficiencia.
Y por ahi el ultimo delay para completar no deberia ser de 1000. Ya que el for ( con su suma,resta,comparacion ) te produce una parte del delay. A no ser que exactamente midas cuanto es que tarda el for y lo ajustes muy exacto seguro que te vas a pasar/faltar algunos segundos. Encima es complejo de "simularlo" por que tardaria DEMASIADO.
La otra es usar un timer de 16bits y tratar de crear una base de tiempo. Utilizar el cristal mas bajo de frecuencia que tengas de esa forma es mas facil. crear esos delays o de ultima el timer.
Como te dije usando un cristal de 32768Hz de entrada al PIC, con preescaler de 1/8. si cargas 4096 en el timer, tenes una interrupcion cada 1 minuto. Conta 60 de esas y listo.
Si lo metes al timer directo y el PIC corre a otra frecuencia, entonces la interrupcion seria cada 15seg. Y deberias contar 240 interrupciones.