...
#pragma config OSC=INTIO2,WDT=OFF,LVP=OFF,MCLRE=OFF,IESO=OFF,BOR=OFF
...
void inactivity_timer_main(void)
{
if (PIR1bits.TMR1IF) { //overflow
PIR1bits.TMR1IF = 0; // clear interrupt flag
TMR1H = 0x0B; // Reset Timer 1
TMR1L = 0xDB;
gl_tick_cnt++;
if (gl_tick_cnt >= 60) { // 1 min = 120 ticks, 10 mins = 1200 ticks
gl_tick_cnt=0;
T1CONbits.TMR1ON = 0; //stop timer
//Prepare to sleep
PORTB=0xF0;
Nop();
INTCONbits.RBIF = 0; // Clear PORTB Interrupt Flag.
INTCONbits.RBIE = 1; // Enable Change-on-interrupt
OSCCONbits.IDLEN=0; // Device enters sleep mode upon Sleep instruction.
HC1_POWER=0;
Nop();Nop();Nop();Nop();
Sleep();
while (!OSCCONbits.OSTS); //loop until primary oscillator is ready
//Woke up...disable change on key interrupt, turn display on, show last menu
HC1_POWER=1;
INTCONbits.RBIE=0; // Disable Change-on-interrupt
Delay10KTCYx(20);
TMR1H = 0x0B; // Reset Timer 1
TMR1L = 0xDB;
T1CONbits.TMR1ON = 1; //start timer again
}
}
}