/*
 * File:   tmr0_test_1.c
 * Author: corrado
 *
 * Created on October 18, 2015, 6:18 PM
 */

#include <xc.h>
#include <stdio.h>
#include <stdlib.h>

int TON[3] =  {395, 5};
int TOFF[3] = {5, 395};

int main(int argc, char** argv) {
    char light_set;
    int tval;
    
    light_set = 0;
    
    TRISBbits.TRISB0 = 0; // output
    TRISAbits.TRISA2 = 1; // input
    TRISAbits.TRISA3 = 1; // input
    TRISCbits.TRISC2 = 1; // input

    T0CONbits.TMR0ON = 0; // stop the timer
    T0CONbits.T08BIT = 0; // timer configured as 16-bit
    T0CONbits.T0CS = 0; // use system clock
    T0CONbits.PSA = 0; // use prescaler
    T0CONbits.T0PS = 0b011; // prescaler 1:16 ('0b' is a prefix for binary)
    
    tval = -TON[light_set]; // clear timer value
    TMR0H = tval >> 8;
    TMR0L = tval & 0xff;
    
    INTCONbits.T0IF = 0;
    T0CONbits.TMR0ON = 1; // start the timer
    
    LATBbits.LATB0 = 0; // Turn on initially the LED
    
    for (;;) {
        while (INTCONbits.T0IF != 1) {} 
        tval = -TOFF[light_set];
        TMR0H = tval >> 8;
        TMR0L = tval & 0xff;
        INTCONbits.T0IF = 0;
        LATBbits.LATB0 = 1; // Turn off the LED
                
        while (INTCONbits.T0IF != 1) {} 
        tval = -TON[light_set];
        TMR0H = tval >> 8;
        TMR0L = tval & 0xff;
        INTCONbits.T0IF = 0;
        LATBbits.LATB0 = 0; // Turn on the LED                
        
        if (PORTAbits.RA3 == 0) light_set = 0;
        else if (PORTCbits.RC2 == 0) light_set = 1;
        
    }

    return (EXIT_SUCCESS);
}

