ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
21 июля
71933 Топик полностью
rezident (16.10.2006 13:02, просмотров: 1) ответил rezident на Угу. Обе ошибки, которые я описал у вас присутствуют.
Написать можно было, например так 
#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 увеличить вдвое.