/*
 * File:   CSCI 255 Stoplight lab for PIC12F1572
 * Author: Your Name here
 */

/*
 * Pins on the PIC12F1572
 *   Pin  1 --  Vdd
 *   Pin  2 --  RA5
 *   Pin  3 --  RA4
 *   Pin  4 --  RA3  [RA3/#MCLR/Vpp]
 *   Pin  5 --  RA2
 *   Pin  6 --  RA1  [RA1/ICSPCLK]
 *   Pin  7 --  RA0  [RA0/ICSPDAT]
 *   Pin  8 --  Vss
 */

#include <xc.h>
#include "configure.h"
#define _XTAL_FREQ   500000ul
#include <pic.h>

#include <stdlib.h>
#include <stdint.h>

/* All on port A (of course) */
#define GREENLED    2
#define YELLOWLED   1
#define REDLED      0

#define LEFTSWITCH  5
#define RIGHTSWITCH 4

#define GREENLEDMASK     (1 << GREENLED)
#define YELLOWLEDMASK    (1 << YELLOWLED)
#define REDLEDMASK       (1 << REDLED)

#define LEFTSWITCHMASK   (1 << LEFTSWITCH)
#define RIGHTSWITCHMASK  (1 << RIGHTSWITCH)

#define TESTWIRING 1

int main(void) {

  ANSELA = 0 ;                                  // All pins are digital
  TRISA  = LEFTSWITCHMASK | RIGHTSWITCHMASK ;   // Two pins are input
  OPTION_REG = OPTION_REG & ~_OPTION_REG_nWPUEN_MASK ;   // !#$!##
  WPUA   = LEFTSWITCHMASK | RIGHTSWITCHMASK ;   // With weak pullup
  LATA   = 0 ;                                  // Start with 0

#ifdef TESTWIRING
  while (1) {
    uint8_t aMask = YELLOWLEDMASK ;           // PIC12 is 8-bit computer
    if (LEFTSWITCHMASK & PORTA) {
      aMask |= REDLEDMASK ;
    }
    if (RIGHTSWITCHMASK & PORTA) {
      aMask |= GREENLEDMASK ;
    }
    LATA = aMask ;
  }
#endif

  return (EXIT_SUCCESS);
}
