Muy buenas, sobre el tema de ir leyendo el horario yo realicé algo parecido para un colega, para controlar un invernadero, la solución que hice yo fue, en primer lugar leer y almacenar en 3 variables horas, minutos y segundos y activar la salida SQW/OUT del ds1307 a 1hz. Activé la interrupción de entrada de RA0 (pic16f88) y hechaba el pic a dormir, (ojo que no activaba las globales, solo la de INT para despertar el pic y seguir el programa)
Y después en cada interrupción (cada segundo) incrementaba la variable segundos, al llegar esta a 60 incrementaba la de minutos y comprovaba los orarios de encendido y apagado y despues otra vez a dormir el pic.
Cuando llegaban las 12 de la noche (00:00:00) hacia otra lectura al ds por si acaso habia perdido algun segundo por ahi.
Un saludo