#define LCD #include "freedom.h" #include void High_Int_Event(void); #pragma code high_vector = 0x08 void high_interrupt(void) { _asm GOTO High_Int_Event _endasm } #pragma code #pragma interrupt High_Int_Event void High_Int_Event(void) { BUZZER = 1; } void main() { InitFreedom(); //abilita interrupt su INT2 (JP9 in posizione 1-2) INTCON3bits.INT2IE = 1; INTCON2bits.INTEDG2 = 0; //fronte di discesa INTCON3bits.INT2IP = 1; // Inizializza il modulo I2C a 400KHz @20MHz OpenI2C(MASTER, SLEW_ON); SSPADD = 12; // Inizializzo la data set_days_RTCC (0x30); set_months_RTCC (0x12); set_years_RTCC (0x08); // Inizializzo l'ora set_hours_RTCC (0x02); set_minutes_RTCC (0x56); set_seconds_RTCC (0x33); //imposta l'allarme (stesso giorno dopo mezzo minuto) set_days_alarm_RTCC(0x30,0); set_hours_alarm_RTCC(0x02,0); set_minutes_alarm_RTCC(0x57,0); enable_alarm_interrupt_RTCC(); BUZZER = 0; while (1) { HomeLCD(); WriteStringLCD("Time: "); WriteVarLCD(get_date_RTCC ()); Line2LCD(); WriteStringLCD("Date: "); WriteVarLCD(get_time_seconds_RTCC ()); if (is_alarm_ON_RTCC()) WriteStringLCD(" X"); else WriteStringLCD(" _"); } }