#include <18f2550.h>
#fuses HS,NOWDT,NOPROTECT,NODEBUG,NOBROWNOUT,NOWRT,NOLVP,NOPUT
#use delay(clock=20000000)
#define RTC_SCL   PIN_B1
#define RTC_SDA   PIN_B0
#use fast_io(b)
//#define use_portb_lcd TRUE             
#include <_ds1307.c> 
#include <string.h>
#define LCD_DB4   PIN_C4
#define LCD_DB5   PIN_C5
#define LCD_DB6   PIN_C6
#define LCD_DB7   PIN_C7
//
#define LCD_RS    PIN_C0
#define LCD_RW    PIN_C1
#define LCD_E     PIN_C2
#include <flex_lcd.c>
#include <ds1621.c>

 int hr;
 int min;
 int sec;
 int day;
 int mth;
 int year;
 int dow;
 char sdow[11];
 char ValoresLeidos[105];
 Byte value;
 
/*******************************************************************************
                 FUNCIONES ESCRITURA Y LECTURA EEPROM INTERNA
*******************************************************************************/                 
 void write_string_eeprom(int address,char *data){
   while(*data!=0){
      write_eeprom(address++,*data);
      data++;
   }
   write_eeprom(address,0);
}

void read_string_eeprom(int address,char *sl){
     sl--;
   do{
      sl++;
      *sl=read_eeprom(address++);
   }
   while(*sl!=0);
}

/*******************************************************************************
                           FUNCION DE ALARMAS
*******************************************************************************/
void alarma(void)
{
   output_high(PIN_B7);
   delay_ms(5000);
   output_low(PIN_B7);
}
/*******************************************************************************
                              PROGRAMA PRINCIPAL
*******************************************************************************/
                   void main()
                   {
                   char alarmas[105];
                   char alarma1[]="083000";
                   char alarma2[]="090000";
                   char alarma3[]="092500";
                   char alarma4[]="100000";
                   char alarma5[]="102000";
                   char alarma6[]="103000";
                   char alarma7[]="111500";
                   char alarma8[]="113500";
                   char alarma9[]="120000";
                   char alarma10[]="123000";
                   char alarma11[]="124500";
                   char alarma12[]="131500";
                   char alarma13[]="143000";
                   char alarma14[]="153000";
                   char alarma15[]="163000";
                   char *leido=alarmas;
                   
/*******************************************************************************
                   ESCRIBIR ALARMAS EN LA EPROM
*******************************************************************************/
                   write_string_eeprom(0x00,alarma1);
                   write_string_eeprom(0x07,alarma2);
                   write_string_eeprom(0x0E,alarma3);
                   write_string_eeprom(0x15,alarma4);
                   write_string_eeprom(0x1C,alarma5);
                   write_string_eeprom(0x23,alarma6);
                   write_string_eeprom(0x2A,alarma7);
                   write_string_eeprom(0x31,alarma8);
                   write_string_eeprom(0x38,alarma9);
                   write_string_eeprom(0x3F,alarma10);
                   write_string_eeprom(0x46,alarma11);
                   write_string_eeprom(0x4D,alarma12);
                   write_string_eeprom(0x54,alarma13);
                   write_string_eeprom(0x5B,alarma14);
                   write_string_eeprom(0x62,alarma15);
                   
/*******************************************************************************
                   INICIALIZAMOS LCD Y DS 1307
*******************************************************************************/                   
                   lcd_init();
                   //init_temp();
                   printf(lcd_putc,"Reloj ds1307");
                   printf(lcd_putc,"\nMiquel_S 2010");
                   delay_ms(2000);
                   lcd_putc("\f");
                   lcd_gotoxy(2,1);
                   printf(lcd_putc,"CP.BLAI BONET");
                   lcd_gotoxy(5,2);
                   printf(lcd_putc,"SANTANYI");
                   delay_ms(2000);
                   lcd_putc("\f");
                   delay_ms(5);
                   ds1307_init(DS1307_ALL_DISABLED);
                   //Set date for -> 2-Abril-2010 Viernes
                   //Set time for -> 17:32:00
                   ds1307_set_date_time(21,4,10,2,22,14,00);
                   set_tris_b(0x00);            //puerto B como salida B7
                   disable_interrupts(GLOBAL);      //todas interrupciones desactivadas
                   
/*******************************************************************************
                   LEEMOS DS1307 Y VISUALIZAMOS DATOS EN LCD
*******************************************************************************/
                   do
                     {
                     ds1307_get_day_of_week((char*) sdow);
                     ds1307_get_time(hr,min,sec);
                     ds1307_get_date(day,mth,year,dow);
                     lcd_gotoxy(1,1);
                     printf(lcd_putc,"%s %02u-%02u-%02u",sdow,day,mth,year);
                     printf(lcd_putc,"\n%02u:%02u:%02u",hr,min,sec);
/*******************************************************************************
                   LEEMOS Y VISUALIZAMOS TEMPERATURA
*******************************************************************************/                   
                     lcd_gotoxy(10,2);
                     printf(lcd_putc,"Temp:");
                     value = read_temp();
                     printf(lcd_putc,"%02u",value);
                     
/*******************************************************************************
                     LECTURA Y COMPARACION DE LA ALARMA 08:30
*******************************************************************************/
                     read_string_eeprom(0x00,leido);
                     sprintf(ValoresLeidos,"%02u%02u%02u",hr,min,sec);
                        if(strcmp(ValoresLeidos,leido)==0)
                           alarma();
                           else
                              output_low(PIN_B7);
/*******************************************************************************
                     LECTURA Y COMPARACION DE LA ALARMA 09:00
*******************************************************************************/
                     read_string_eeprom(0x07,leido);
                     sprintf(ValoresLeidos,"%02u%02u%02u",hr,min,sec);
                        if(strcmp(ValoresLeidos,leido)==0)
                           alarma();
                           else
                              output_low(PIN_B7);
/*******************************************************************************
                     LECTURA Y COMPARACION DE LA ALARMA 09:25
*******************************************************************************/
                     read_string_eeprom(0x0E,leido);
                     sprintf(ValoresLeidos,"%02u%02u%02u",hr,min,sec);
                        if(strcmp(ValoresLeidos,leido)==0)
                           alarma();
                           else
                              output_low(PIN_B7);
/*******************************************************************************
                     LECTURA Y COMPARACION DE LA ALARMA 10:00
*******************************************************************************/
                     read_string_eeprom(0x15,leido);
                     sprintf(ValoresLeidos,"%02u%02u%02u",hr,min,sec);
                        if(strcmp(ValoresLeidos,leido)==0)
                           alarma();
                           else
                              output_low(PIN_B7);
/*******************************************************************************
                     LECTURA Y ESCRITURA DE LA ALARMA 10:20
*******************************************************************************/
                     read_string_eeprom(0x1C,leido);
                     sprintf(ValoresLeidos,"%02u%02u%02u",hr,min,sec);
                        if(strcmp(ValoresLeidos,leido)==0)
                           alarma();
                           else
                              output_low(PIN_B7);
/*******************************************************************************
                     LECTURA Y ESCRITURA DE LA ALARMA 10:30
*******************************************************************************/
                     read_string_eeprom(0x23,leido);
                     sprintf(ValoresLeidos,"%02u%02u%02u",hr,min,sec);
                        if(strcmp(ValoresLeidos,leido)==0)
                           alarma();
                           else
                              output_low(PIN_B7);
/*******************************************************************************
                     LECTURA Y ESCRITURA DE LA ALARMA 11:15
*******************************************************************************/
                     read_string_eeprom(0x2A,leido);
                     sprintf(ValoresLeidos,"%02u%02u%02u",hr,min,sec);
                        if(strcmp(ValoresLeidos,leido)==0)
                           alarma();
                           else
                              output_low(PIN_B7);
/*******************************************************************************
                     LECTURA Y ESCRITURA DE LA ALARMA 11:35
*******************************************************************************/
                     read_string_eeprom(0x31,leido);
                     sprintf(ValoresLeidos,"%02u%02u%02u",hr,min,sec);
                        if(strcmp(ValoresLeidos,leido)==0)
                           alarma();
                           else
                              output_low(PIN_B7);
/*******************************************************************************
                     LECTURA Y ESCRITURA DE LA ALARMA 12:00
*******************************************************************************/
                     read_string_eeprom(0x38,leido);
                     sprintf(ValoresLeidos,"%02u%02u%02u",hr,min,sec);
                        if(strcmp(ValoresLeidos,leido)==0)
                           alarma();
                           else
                              output_low(PIN_B7);
/*******************************************************************************
                     LECTURA Y COMPARACION DE LA ALARMA 12:30
*******************************************************************************/
                     read_string_eeprom(0x3F,leido);
                     sprintf(ValoresLeidos,"%02u%02u%02u",hr,min,sec);
                        if(strcmp(ValoresLeidos,leido)==0)
                           alarma();
                           else
                              output_low(PIN_B7);
/*******************************************************************************
                     LECTURA Y ESCRITURA DE LA ALARMA 12:45
*******************************************************************************/
                     read_string_eeprom(0x46,leido);
                     sprintf(ValoresLeidos,"%02u%02u%02u",hr,min,sec);
                        if(strcmp(ValoresLeidos,leido)==0)
                           alarma();
                           else
                              output_low(PIN_B7);
/*******************************************************************************
                     LECTURA Y ESCRITURA DE LA ALARMA 13:15
*******************************************************************************/
                     read_string_eeprom(0x4D,leido);
                     sprintf(ValoresLeidos,"%02u%02u%02u",hr,min,sec);
                        if(strcmp(ValoresLeidos,leido)==0)
                           alarma();
                           else
                              output_low(PIN_B7);
/*******************************************************************************
                     LECTURA Y ESCRITURA DE LA ALARMA 14:30
*******************************************************************************/
                     read_string_eeprom(0x54,leido);
                     sprintf(ValoresLeidos,"%02u%02u%02u",hr,min,sec);
                        if(strcmp(ValoresLeidos,leido)==0)
                           alarma();
                           else
                              output_low(PIN_B7);
/*******************************************************************************
                     LECTURA Y ESCRITURA DE LA ALARMA 15:30
*******************************************************************************/
                     read_string_eeprom(0x5B,leido);
                     sprintf(ValoresLeidos,"%02u%02u%02u",hr,min,sec);
                        if(strcmp(ValoresLeidos,leido)==0)
                           alarma();
                           else
                              output_low(PIN_B7);
/*******************************************************************************
                     LECTURA Y ESCRITURA DE LA ALARMA 16:30
*******************************************************************************/
                     read_string_eeprom(0x62,leido);
                     sprintf(ValoresLeidos,"%02u%02u%02u",hr,min,sec);
                        if(strcmp(ValoresLeidos,leido)==0)
                           alarma();
                           else
                              output_low(PIN_B7);
                     }
                    While(1);
                   }
                   
                   
 



 
