Created
May 7, 2012 21:55
-
-
Save jpwright/2630728 to your computer and use it in GitHub Desktop.
MSP430 IR Detection
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "msp430x22x4.h" | |
/* | |
Main program: entry point | |
*/ | |
void delay (void) | |
{ | |
int i; | |
i = 30000; // SW Delay | |
do i--; | |
while (i != 0); | |
} | |
int main (void) | |
{ | |
int gothit = -1; | |
int i; | |
WDTCTL = WDTPW + WDTHOLD; /* turn off watchdog */ | |
P1DIR |= 0x03; // set red and green led for output | |
P1REN |= 0x04; // connect resistor to switch | |
P2DIR |= 0x08; | |
P2OUT |= 0x08; | |
P2REN |= 0x16; | |
P1IE |= 0x04; // Enable switch as interrupt | |
P1IFG |= 0x04; // Set interrupt flag to 1 for switch | |
P1IES |= 0x04; // Set intterupt select high to low edge | |
//ADC stuff | |
ADC10CTL0 = SREF_1 + ADC10SHT_2 + REFON + ADC10ON + ADC10IE; | |
TACCR0 = 30; // Delay to allow Ref to settle | |
TACCTL0 |= CCIE; // Compare-mode interrupt. | |
TACTL = TASSEL_2 + MC_1; // TACLK = SMCLK, Up mode. | |
__bis_SR_register(CPUOFF + GIE); // LPM0, TA0_ISR will force exit | |
TACCTL0 &= ~CCIE; // Disable timer Interrupt | |
ADC10AE0 |= 0x01; // P2.0 ADC option select | |
P2OUT ^= 0x08; | |
__enable_interrupt(); // enable all interrupts | |
// while (1) { | |
// //P2OUT ^= 0x08; // Toggle P1.0 using exclusive-OR | |
// | |
// if (P2IN & 0x16) { | |
// P1OUT ^= 0x02; | |
// i = 10000; // SW Delay | |
// do i--; | |
// while (i != 0); | |
// } | |
// } | |
while(1) { | |
ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start | |
__bis_SR_register(CPUOFF + GIE); // LPM0, ADC10_ISR will force exit | |
if (ADC10MEM < 0x3FC /*0x3E8*/) { // ADC10MEM = A0 > 1.65V? | |
P1OUT &= ~0x01; // Clear P1.0 LED off | |
P1OUT |= 0x02; | |
gothit++; | |
for (i = 0; i < gothit; i++) { | |
P1OUT |= 0x01; // Set P1.0 LED on | |
delay(); | |
P1OUT &= ~0x01; | |
delay(); | |
} | |
P1OUT &= ~0x02; | |
delay(); | |
} | |
// } else { | |
// //P1OUT &= ~0x02; | |
// } | |
} | |
} | |
// Port 2 interrupt service routine | |
#pragma vector=PORT1_VECTOR | |
__interrupt void Port_1(void) | |
{ | |
P2OUT ^= 0x08; //Toggle laser state | |
P1IFG &= ~0x04; // Toggle interrupt edge | |
P1IES ^= 0x04; | |
} | |
// ADC10 interrupt service routine | |
#pragma vector=ADC10_VECTOR | |
__interrupt void ADC10_ISR(void) | |
{ | |
__bic_SR_register_on_exit(CPUOFF); // Clear CPUOFF bit from 0(SR) | |
} | |
#pragma vector=TIMERA0_VECTOR | |
__interrupt void TA0_ISR(void) | |
{ | |
TACTL = 0; | |
LPM0_EXIT; // Exit LPM0 on return |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment