ok, aqui esta el programa completo:
#include "C:\led\archivos acuario\acualed.h"
#byte pb=0xF81 //configuracion del puerto b para los botones
#bit t_ok=pb.0
#bit t_mas=pb.1
#bit t_mns=pb.2
#byte puerto_c=0xF82 //configuracion del puerto c para las salidas de luz
#byte intcon=0xFF2 //configuracion de las interrupciones exteriores
#byte intcon3=0xFF0
#bit intf=intcon.1
#bit intf1=intcon3.0
#bit intf2=intcon3.1
#include <LCD.c> //codigos que complementan el programa
#include <ds1307.c>
#include <menu.c>
void main(void)
{
unsigned int8 h1,h2,m1,m2,h,m; //declaracion de las variables a utilizar
unsigned int8 h3,h4,m3,m4,m5,m6,c,z,r;
unsigned int8 t=16;
unsigned int8 k=44;
unsigned int8 dn[]={15,15,14,14,30,30,28,28,60,60,56,56,120,120,112,112}; //declaracion de las matrices
unsigned int8 nd[]={112,112,113,113,97,97,99,99,67,67,71,71,7,7,15,15};
set_tris_c(0x00);
output_c(0x00);
port_b_pullups(true);
setup_adc_ports(NO_ANALOGS);
intf=0; intf1=0; intf2=0;
enable_interrupts(INT_EXT);
enable_interrupts(INT_EXT1);
enable_interrupts(INT_EXT2);
enable_interrupts(GLOBAL);
lcd_init();
menu_modo();
while(true)
{
//leemos el reloj
leer_ds1307();
//leemos de la memoria los datos grabados de las alarmas
h1=read_eeprom(e_hora_dn_1);
m1=read_eeprom(e_mins_dn_1);
h2=read_eeprom(e_hora_nd_1);
m2=read_eeprom(e_mins_nd_1);
h3=read_eeprom(e_hora_3);
m3=read_eeprom(e_mins_3);
h4=read_eeprom(e_hora_4);
m4=read_eeprom(e_mins_4);
h=registros_ds1307[horas];
m=registros_ds1307[minutos];
//desactivamos las interrupciones durante la comparacion de alarmas
disable_interrupts(GLOBAL);
//comparamos y actualizamos las salidas de luz
if (((m1<k)&&(h==h1)&&(m<m1))||((m1>k)&&(h==h1)&&(m<m1))||((((m1<k)&&(h!=h1))||((m1>k)&&(h!=h1)&&(h!=h3)))&&((m2<k)&&(h==h2)&&(m>m2)&&(m>m4)))||
((((m1<k)&&(h!=h1))||((m1>k)&&(h!=h1)&&(h!=h3)))&&((m2<k)&&(h!=h2)&&(h>h2)&&(h<h1)))||((((m1<k)&&(h!=h1))||((m1>k)&&(h!=h1)&&(h!=h3)))&&((m2>k)&&(h!=h2)&&(h!=h4)&&(h>h2)&&(h<h1))))
{
puerto_c=112;break;
}
else if (((m1<k)&&(h==h1)&&(m>m1)&&(m<m3))||((m1>k)&&(h==h1)&&(m>m1))||((m1==m)&&(h1==h)))
{
c=m-m1;
for(r=c;r<16;r++)
{
puerto_c=nd[r];delay_ms(60000);
}
break;
}
else if ((m1>k)&&(h!=h1)&&(h=h3))
{
m5=60-m1+m;
if (m5>t)
{
puerto_c=15;break;
}
else
{
c=m5;
for(r=c;r<16;r++)
{
puerto_c=nd[r]; delay_ms(60000);
}
break;
}
}
else if (((((m1<k)&&(h!=h1))||((m1>k)&&(h!=h1)&&(h!=h3)))&&((m2<k)&&(h=h2)&&(m>m2)&&(m<m4)))||((((m1<k)&&(h!=h1))||((m1>k)&&(h!=h1)&&(h!=h3)))&&((m2>k)&&(h=h2)&&(m<m2)))||
((((m1<k)&&(h!=h1))||((m1>k)&&(h!=h1)&&(h!=h3)))&&((m==m2)&&(h==h2))))
{
c=m-m2;
for(z=c;z<16;z++)
{
puerto_c=dn[z];delay_ms(60000);
}
break;
}
else if ((((m1<k)&&(h!=h1))||((m1>k)&&(h!=h1)&&(h!=h3)))&&((m2>k)&&(h!=h2)&&(h=h4)))
{
m6=60-m2+m;
if(m6>t)
{
puerto_c=112;break;
}
else
{
c=m6;
for(z=c;z<16;z++)
{
puerto_c=dn[z];delay_ms(60000);
}
break;
}
}
else
{
puerto_c=15; break;
}
//reactivamos las interrupciones despues del la actualizacion de las salidas
enable_interrupts(GLOBAL);
//actualizamos la pantalla con el estado normal
lcd_gotoxy(1,1);
printf(lcd_putc,"HORA: %02u:%02u:%02u",registros_ds1307[horas],registros_ds1307[minutos],registros_ds1307[segundos]);
lcd_gotoxy(1,2);
printf(lcd_putc,"FECHA: %02u/%02u/%02u",registros_ds1307[dias],registros_ds1307[meses],registros_ds1307[anios]);
}
}
saludos!!