Bien... Primero que si llevas la hora con el PIC, al cortarse la alimentacion la vas a perder... Podrias guardarlo en la EEPROM, pero unicamente deberias hacerlo cuando detectes un corte de luz. Debido a que la EEPROM tiene un limite de escrituras, si te pasas de esas escrituras (ejmeplo escribis cada 1s ) destruis el lugar donde se almacena el dato.
Para implementar lo que vos queres, yo tendria 1 RTCC con bateria comunicandose con el PIC. De alli obtengo la hora actual. Luego de pedir la hora me quedan 2 posibilidades.
- Algunos RTC poseen alarmas, el cual podria activar y que el RTCC me avise. Si se corta la luz, al inicia y notar que el horario ya paso.. Procedo a cambiar la alarma a la nueva.
- Este sirve por si tenes otra forma de conseguir el tiempo. En ves de esperar en un for hasta que el tiempo se cumpla. Unicamente comproba si son iguales ( hora y minutos) cuando paso 1 minuto. Antes no porque no tiene sentido. Supongo que tarda un segundo al menos el TMR1 en hacer un overflow, o que usaste el modulo CCP para que se maneje todo solo. Y vos unicamente te centras en el flag de interrupcion (el flag no es necesario tener activada la interrupcion) quedandote el codigo asi:
if(flag_timer_1)
{
flag_timer_1 = 0;
if((hora_actual > hora_start) && (hora_actual < hora_stop))
{
if((min_actual > min_start) && (min_actual < min_stop))
{
// Aca se cumplio!
}
}
}
Ojo que se necesita un poco mas de atencion al hacer esto, ya que 00hs por ejemplo es menor que 23... Eso te lo dejo para que lo penses vos como hacerlo.