#include unsigned int new_cap=0; unsigned int old_cap=0; unsigned int cap_diff=0; void main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop WDT BCSCTL1 = CALBC1_16MHZ; // Set Oscillator range DCOCTL = CALDCO_16MHZ; P1SEL |= BIT2; // Port 1.2/TACCR1 - Input P1DIR=0xF0; // P1.4, P1.5, P1.6, P1.7 as a output P1OUT=0x00; // Initially reset port1 P1OUT |=0x10; // P1.4 High for Green status LED TACTL = TASSEL_2 +MC_2; // SMCLK = 1 Mhz, continuous mode TACCTL1 = CM_1+CCIS_0+SCS+CAP+CCIE; // capture on rising edge & falling edge, Timer A select, Sync., capture mode, Enable timer interrupt __bis_SR_register(LPM0_bits + GIE); // LPM0 mode } // Timer A1 interrupt service routine #pragma vector = TIMER0_A1_VECTOR __interrupt void TA1_ISR(void) { switch( TAIV ) // Efficient switch-implementation { case 2: // CCR1 capture value new_cap = TACCR1; cap_diff = new_cap - old_cap; old_cap = new_cap; // move current value break; } }