本文介绍的是MSP430内部的定时器1
测试代码如下:
#include "io430.h"#include "in430.h"//demo,led闪烁voidInit_TimeA(void); intmain( void ) { //StopwatchdogtimertopreventtimeoutresetWDTCTL=WDTPW+WDTHOLD; Init_TimeA(); P2DIR=0XFF; P2OUT=0XFF; return0; } voidInit_TimeA(void) { TACTL=TASSEL_1+ID_3+MC_1;//定时器的时钟源选择ACLK,增计数模式32.768kCCTL0=CCIE;//使能CCR0中断CCR0=4096;//设定周期为1s_EINT();//使能总中断} #pragma vector=TIMERA0_VECTOR__interruptvoidTimer_A (void) { P2OUT=~P2OUT; }
#include "io430.h"#include "in430.h"voidInit_TimeA(void); intmain( void ) { //StopwatchdogtimertopreventtimeoutresetWDTCTL=WDTPW+WDTHOLD; Init_TimeA(); P2DIR=0XFF; P2OUT=0XFF; return0; } voidInit_TimeA(void) { TACTL=TASSEL_2+ID_3+MC_1;//定时器的时钟源选择ACLK,增计数模式800khzCCTL0=CCIE;//使能CCR0中断CCR0=50000;//设定周期为0.5s_EINT();//使能总中断} #pragma vector=TIMERA0_VECTOR__interruptvoidTimer_A (void) { P2OUT=~P2OUT; }
如果要精准定时则要使用外部晶振进行定时计数:
#include<msp430f149.h>#include "clock.h"/****************************************************************************初始化时钟******************************************************************************/voidInt_Clk(void) { uchari; BCSCTL1&=~XT2OFF; //开启XT2振荡器BCSCTL2|=SELM_2+SELS; //选择MCLK时钟源为XT2CLK;选择SMCLK时钟源为XT2CLKdo { IFG1&=~OFIFG; for(i=0;i<100;i++) _NOP(); } while((IFG1&OFIFG)!=0); IFG1&=~OFIFG; }
#include<msp430f149.h>#include"DataType.h"/****************************************************************************初始定时器A******************************************************************************/voidInt_TimerA(void) { TACTL=TASSEL_2+ID_3+MC_1;//定时器的时钟源选择ACLK,增计数模式8MCCTL0=CCIE;//使能CCR0中断CCR0=50000;//设定周期为1s_EINT();//使能总中断}
#include "io430.h"#include "Timer.h"#include "clock.h"intmain( void ) { //StopwatchdogtimertopreventtimeoutresetWDTCTL=WDTPW+WDTHOLD; Int_Clk(); Int_TimerA(); P2DIR=0XFF; P2OUT=0XFF; return0; } #pragma vector=TIMERA0_VECTOR__interruptvoidTimer_A (void) { P2OUT=~P2OUT; }