#include <18F67K22.h>
#FUSES INTRC_IO, NOWDT, SOSC_LOW, NOBROWNOUT, MCLR
#device ADC = 12
// Set Speed to 4Mhz
#use delay(clock=4000000)
// RS232 to Modem
#use rs232(baud=9600, UART2, STREAM=Modem)
// RS232 to PC
#use rs232(baud=9600, UART1, STREAM=User)
#define Boost_Converter pin_B5
#define LED pin_B4
#define Emerg_RST_Modem pin_C2
#define V285_Pin pin_C3
#define V180_Pin pin_C4
#define Modem_ON pin_C5
#include <stdio.h>
char clock_sleeping = 1; //flag to tell us that we have woken up from ...
// ... sleeping when the alarm INT (0 = wakeup / 1 = sleep)
#int_RTC
void RTC_isr(void)
{
//we have woken up from sleep
clock_sleeping = 0;
}
//RTCC function
void set_clock(rtc_time_t &date_time)
{
//reseting the clock...
date_time.tm_year=12; //2012
date_time.tm_mon=4; //April
date_time.tm_mday=20; //20th
date_time.tm_wday=6; //Friday
date_time.tm_hour=13; //13hrs
date_time.tm_min=8; //8min
date_time.tm_sec=0; //0secs
}
void main(void)
{
//Initiallize All I/O Pins....
//PORTA
output_low(pin_A2);
output_low(pin_A3);
output_low(pin_A4);
output_low(pin_A5);
output_low(pin_A6);
output_low(pin_A7);
//PORTB
output_low(pin_B1);
output_low(pin_B2);
output_low(pin_B3);
output_high(pin_B5);
//PORTC
output_low(pin_C2);
output_high(pin_C5);
//PORTD
output_d(0);
//PORTE
output_e(0);
//PORTF
output_low(pin_F1);
output_low(pin_F2);
output_low(pin_F3);
output_low(pin_F4);
output_low(pin_F5);
output_low(pin_F6);
output_low(pin_F7);
//PORTG
output_low(pin_G0);
output_low(pin_G3);
output_low(pin_G4);
enable_interrupts(INT_RTC); //enable RTC interrupts
enable_interrupts(GLOBAL); //enable interrupts
delay_ms(100); //startup delay
//Clock Initiation Commands...
rtc_time_t write_clock, read_clock;
setup_rtc(RTC_ENABLE,0); //enables internal RTCC
set_clock(write_clock);
rtc_write(&write_clock); //writes new clock setting to RTCC
//Print initial clock settings....
rtc_read(&read_clock); //reads clock value from RTCC
fprintf(User, "\n\r\n\r %02u:%02u:%02u", read_clock.tm_hour, read_clock.tm_min, read_clock.tm_sec);
while(TRUE)
{
//Before going to SLEEP .... set the Alarm!!!
//setup_rtc_alarm(RTC_ALARM_ENABLE, RTC_ALARM_HALFSECOND, 0); //WORKS
//setup_rtc_alarm(RTC_ALARM_ENABLE, RTC_ALARM_SECOND, 0); //WORKS
//setup_rtc_alarm(RTC_ALARM_ENABLE, RTC_ALARM_10_SECONDS, 0); //DOES NOT WORK!!
setup_rtc_alarm(RTC_ALARM_ENABLE, RTC_ALARM_10_MINUTES, 0); //DOES NOT WORK!!
sleep(); //now goto sleep...
delay_ms(100); //When waking up, delay needed to bring the PIC up to working state
if(clock_sleeping == 0) //did we wake up from clock INT?
{
rtc_read(&read_clock); //reads clock value from RTCC
fprintf(User, "\n\r\n\r %02u:%02u:%02u", read_clock.tm_hour, read_clock.tm_min, read_clock.tm_sec);
clock_sleeping = 1; //set sleep flag to indicate that we are about to goto sleep again...
delay_ms(100); //before we go back and set alarm...put delay as PIC likes it!
}
}
}