Написать можно было, например так
#include < msp430x14x.h >
#pragma vector=NMI_VECTOR
#pragma type_attribute=__interrupt
void osc_fault(void)
{ BCSCTL2=SELM_0+DIVM_0+DIVS_0; //перейдем на такт. DCO
BCSCTL1=DIVA_0+RSEL2+RSEL1+RSEL0+XTS; //ACLK=XTLF/1=32768Гц
DCOCTL=DCO0+DCO1+DCO2; //DCO около 4МГц
while ((IFG1&OFIFG)!=0) IFG1&=~OFIFG; //Ожидаем стабилиз. колебаний
//кварца XT1
BCSCTL2=SELM_2+DIVM_0+SELS+DIVS_3; //MCLK=XT1/1=4000кГц,
//SMCLK=XT1/8=500кГц
IE1|=OFIE; //разр. прерывания от детектора ошибки кварца
}
#pragma vector=TIMERA0_VECTOR
#pragma type_attribute=__interrupt
void timer_A0_ISR(void)
{ static unsigned cntr=0;
if (cntr<9) cntr++;
else
{ cntr=0;
P1OUT^=0x01;
}
}
#pragma type_attribute=__task
void initTimerA(void) //инициализация TimerA
{ TACTL=TASSEL_2+ID_1+TACLR; //TACLK=SMCLK/2, сбросим TAR
TACCR0=24999; //период перезагрузки таймера 100мс
TACCTL0=CCIE; //разрешим прерывание от CCR0
TACTL|=MC_1; //запустим таймер в режиме CountUp
}
#pragma type_attribute=__task
void initAllPins(void) //инициализация TimerA
{ P1DIR=0xFF;
}
#pragma type_attribute=__task
void main(void)
{ WDTCTL=WDTPW+WDTHOLD; // остановим WDTimer
IFG1|=OFIFG; //установим флаг ошибки кварца
IE1=OFIE; //разрешим прерывание по ошибке кварца
initAllPins(); //начальная инициализация функций всех пинов
initTimerA(); //инициализация работы TimerA
_EINT(); //разрешим прерывания
while(1)
{ _NOP();
}
}
Только хочу заметить, что при ваших установках частота мерцаний будет все же не 1Гц, а 0,5Гц. Потому что длительность каждого из состояний LED (включено и выключено) по 1 с, итого 2 с период мерцания. Если же хотите именно 1Гц, то можно, например, частоту тактирования TimerA увеличить вдвое.