Написать можно было, например так
#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 увеличить вдвое.