Для кварца 8Мгц используемого в качестве источника тактирования SMCLK
Код
#define SYSTEM_TICK_MS 1UL //период системного тика
unsigned long tick_ms; //счетчик системных тиков
//===================================//
// функция инициализации TimerA //
//===================================//
void initTimerA(void) //инициализация таймераА на период счета 1мс
{ TACTL=TASSEL_2 | TACLR; //TACLK=SMCLK
TACCR0=7999; //период (7999+1)/8000000=1мс
TACCTL0=CCIE; //разрешим прерывание от регистра сравнения CCR0
TACTL|=MC_1; //запускаем в режиме счета CountUp
}
//===================================//
// обработчик прерывания CCR0 TimerA //
//===================================//
#pragma vector=TIMERA0_VECTOR
#pragma type_attribute=__interrupt
void TIMERA0_ISR(void)
{ tick_ms += SYSTEM_TICK_MS; //инкремент переменной системных тиков на заданную величину
}
//===================================//
// обработчик прерывания ошибки //
// осциллятора //
//===================================//
#pragma vector=NMI_VECTOR
#pragma type_attribute=__interrupt
void osc_fault(void)
{ BCSCTL2=SELM_0|DIVM_0|DIVS_0; //MCLK=DCO, SMCLK=DCO
DCOCTL=DCO2|DCO1|DCO0;
BCSCTL1=DIVA_0|RSEL2|RSEL1|RSEL0; //ACLK=LFXT
while ((IFG1&OFIFG)!=0) IFG1&=~OFIFG; //Ожидаем стабилиз. колебаний кварца XT2
BCSCTL2=SELM_0|DIVM_0|DIVS_0|SELS; //MCLK=DCO, SMCLK=XT2/1=8МГц
IE1|=OFIE; //разр. прерывание от детектора ошибки
}
//===================================//
// основной суперцикл программы //
//===================================//
#pragma type_attribute=__task
void main(void)
{ WDTCTL=WDTPW+WDTHOLD; //остановим WDTimer
IFG1|=OFIFG; //принудительно установим флаг ошибки осциллятора
IE1|=OFIE; //разрешим прерывание от детектора ошибки осциллятора
initTimerA(); //вызов функции инициализации TimerA
//
// тут ваш код
//
}