×
单片机 > 单片机程序设计 > 详情

MSP430F149;二、基本时钟

发布时间:2020-08-24 发布时间:
|

官方代码


#include


int main(void)

{

  WDTCTL = WDTPW +WDTHOLD;                  // Stop Watchdog Timer

  DCOCTL = DCO0 + DCO1 + DCO2;              // Max DCO

  BCSCTL1 = RSEL0 + RSEL1 + RSEL2;          // XT2on, max RSEL

  BCSCTL2 |= SELS;                          // SMCLK = XT2

  P5DIR |= 0x70;                            // P5.6,5,4 outputs

  P5SEL |= 0x70;                            // P5.6,5,5 options


  while(1)

  {

  }

}


自己写


#include "MSP430x14x.h"


int main( void )

{

  // Stop watchdog timer to prevent time out reset

  WDTCTL = WDTPW + WDTHOLD;

   

  /*DCO frequency select. */

  DCOCTL |=(BIT5+BIT6+BIT7);//=7;

  BCSCTL1 |= (RSEL0+RSEL1+RSEL2);//DCO MAX;

  

  /*ACLK*/

  //BCSCTL1 &= ~XTS;            //因为默认是0,所以可以不用设置;

  //BCSCTL1 &= ~(DIVA0+DIVA1);

  /*SMCLK*/

  BCSCTL1 &= ~XT2OFF;           //因为默认是1,所以置1;

  BCSCTL2 &= ~SELS;             //1:外部时钟;0:DCO

  BCSCTL2 |= DIVS_1;            //2分频

  /*MCLK*/

  BCSCTL2 |= SELM_0;            //选择主系统的时钟源

  BCSCTL2 |= DIVM_0;            //1分频

  

  /*Oscillator fault interrupt enable*/

     __enable_interrupt();                     //开启中断;

//  IE1 |= OFIE;                  //中断使能;这个不能置一,不知道为啥,置一就有问题,官方提供的例子也没有使OFIE置一,感觉好奇怪

  do

  {


  IFG1 &= ~OFIFG;               //中断标志位清零

  

  /*DELAY*/

  __no_operation();

  

  }

  while(IFG1&OFIFG);            //没有振荡器置位则跳出循环

  

  P5DIR |= 0x70;                            // P5.6,5,4 outputs

  P5SEL |= 0x70;                            // P5.6,5,5 options  

  

  for(;;);

  

}



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
单片机中高阻态的实质及意义