unsigned long m_sysTime; volatile unsigned char m_oneSecondPassed; void sysInitSysTimer(void) { m_sysTime = 0; m_oneSecondPassed = FALSE; //Reset control register TA1CTL = 0; //Set compare value on capture/compare 0 for 1 second TA1CCR0 = 0x7FFF; //Use ACLK //Divide by 1 //Count up //Enable interrupt TA1CTL = TASSEL_1 | TACLR | MC_1 | TAIE; } #pragma vector = TIMER1_A1_VECTOR __interrupt void Timer1A1ISR(void) { //Reading TA1IV clears the interrupt switch(__even_in_range(TA1IV,14)) { //Unused vectors case 0: case 2: case 4: case 6: case 8: case 10: case 12: break; case 14: m_sysTime++; m_oneSecondPassed = TRUE; break; default: _never_executed(); } } unsigned char sysHasOneSecondPassed(void) { unsigned char retValue = m_oneSecondPassed; if (m_oneSecondPassed) m_oneSecondPassed = FALSE; return retValue; }