MSP430-定时器的寄存器介绍以及测试应用

 本文介绍的是MSP430内部的定时器1

测试代码如下:


#include "io430.h"
#include "in430.h"
//demo,led闪烁
void Init_TimeA(void);
int main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
  Init_TimeA();
  P2DIR = 0XFF;
  P2OUT = 0XFF;
  return 0;
}
void Init_TimeA(void)
{
  TACTL = TASSEL_1 + ID_3 + MC_1;//定时器的时钟源选择ACLK,增计数模式  32.768k
  CCTL0 = CCIE;//使能CCR0中断
  CCR0 = 4096;//设定周期为1s
  _EINT();//使能总中断
}

#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
 P2OUT =~P2OUT;
}

#include "io430.h"
#include "in430.h"
void Init_TimeA(void);
int main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
  Init_TimeA();
  P2DIR =0XFF;
  P2OUT =0XFF;
  return 0;
}
void Init_TimeA(void)
{
  TACTL = TASSEL_2 + ID_3 + MC_1;//定时器的时钟源选择ACLK,增计数模式 800khz
  CCTL0 = CCIE;//使能CCR0中断
  CCR0 = 50000;//设定周期为0.5s
  _EINT();//使能总中断
}

#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
 P2OUT =~P2OUT;
}

如果要精准定时则要使用外部晶振进行定时计数:

#include<msp430f149.h>
#include "clock.h"
/****************************************************************************
                初始化时钟
******************************************************************************/
void Int_Clk(void)
{
  uchar i;
  BCSCTL1&=~XT2OFF;     //开启XT2振荡器
  BCSCTL2|=SELM_2+SELS;    //选择MCLK时钟源为XT2CLK;选择SMCLK时钟源为XT2CLK
  do
  {
    IFG1&=~OFIFG;
    for(i=0;i<100;i++)
      _NOP();
  } 
  while((IFG1&OFIFG)!=0);
  IFG1&=~OFIFG;  
}

#include<msp430f149.h>
#include"DataType.h"


/****************************************************************************
                初始定时器A
******************************************************************************/
void Int_TimerA(void)
{
  TACTL = TASSEL_2 + ID_3 + MC_1;//定时器的时钟源选择ACLK,增计数模式  8M
  CCTL0 = CCIE;//使能CCR0中断
  CCR0 = 50000;//设定周期为1s
  _EINT();//使能总中断
}



#include "io430.h"
#include "Timer.h"
#include "clock.h"
int main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
  Int_Clk();
  Int_TimerA();
  P2DIR = 0XFF;
  P2OUT = 0XFF;
  return 0;
}
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
 P2OUT = ~P2OUT;
}

猜你喜欢

转载自blog.csdn.net/weixin_41445387/article/details/89790798