嵌入式 > 技术百科 > 详情

MSP430F149单片机的内部定时器A定时1秒钟实现LED闪烁

发布时间:2020-09-15 发布时间:
|
#include "msp430x14x.h"  
 
//********************函数声明******************
void InitClock();
 
//********************主函数********************
void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // 关看门狗
  InitClock();                              // 初始化时钟
  P1DIR |= BIT0;                            // 设P1.0为输出
  CCTL0 = CCIE;                             // 使能CCR0中断
  CCR0 = 500;
  TACTL = TASSEL_2 + MC_1;                  // 子系统时钟, 增计数模式
  _BIS_SR(LPM0_bits + GIE);                 // 低功耗模式0/ 开总中断
}
 
//*******************************************
函数名称:InitClock
功    能:初始化时钟函数
参    数:无
返回值  :无
//********************************************
void InitClock()
{
  unsigned int oscdly;
  BCSCTL1 &= ~XT2OFF; //清OSCOFF/XT2,使XT2振荡器有效
 
  do
  {
    IFG1 &=~OFIFG; //清OFIFG
 
    oscdly=255;
    while(oscdly--); //延时等待 
 
  }
  while(IFG1 & OFIFG); //直到OFIFG=0为止
  DCOCTL |= DCO0 + DCO1 + DCO2;              // Max DCO
  BCSCTL1 |= RSEL0 + RSEL1 + RSEL2;          // XT2on, max RSEL
  //这两句设置DCOCTL和BCSCTL1,设置DCO的频率
  //一般来说,PUC复位之后,如果没有特定设置系统时钟MCLK,MCU将默
  //认DCO振荡器产生的频率为系统时钟,不过如果设置BCSCTL2来选定
  //MCLK的时钟源的话(如:BCSCTL2 |= SELM_2+SELS;)系统时钟就是由
  //XT2振荡而来.
  //-------------------------------------------------------------
  BCSCTL2 |= SELM_2+SELS;    //SMCLK and MCLK uses XT2
  //这一句设置BCSCTL2,选定MCLK和SMCLK的时钟源
  //注意:ACLK只能来源于LFXT1.可以在BCSCTL1里设置ACLK的分频。
  //-------------------------------------------------------------
}
 
//*******************************************
函数名称:Timer_A
功    能:定时器A中断服务子函数
参    数:无
返回值  :无
//********************************************
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
  P1OUT ^= BIT0;                          // 取反P1.0
}
 

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

热门文章 更多
用于MAX7456随屏显示器SPI