这是一个测试程序。
在适配器上运行,硬件就接32K和5M晶振
#include "msp430.h"
#define BUZCON BIT1
unsigned int timerB_intnum;
unsigned int second;
/*-----------------------------------
*函数名称:timerB_Init()
*函数说明:定时器B的初始化
*设置为1/16s中断一次
*----------------------------------*/
void TimerB_Init(void)
{
TBCTL=TBSSEL0+TBCLR; //timer_B:ACLK as the clock,stop,clear
TBCCTL0|=CCIE; //TBCCTL0 中断允许
TBCCR0=0X07FF; //中断周期1/16s
TBCTL|=MC1; // 开始定时 连续计数模式
}
/*---------------------
*延时
*
*--------------------*/
void delay(unsigned int num)
{
for(;num!=0;num--);
}
/*------------------------------------------
*函数名称:void Timer_B (void)
*函数说明:定时器B的中断服务程序
* 定时器每1/16s中断一次
*-----------------------------------------*/
#pragma vector=TIMERB0_VECTOR
__interrupt void Timer_B (void)
{
TBCCR0+=0x800;
timerB_intnum++; //定时器B中断次数加1
if(timerB_intnum>=255){timerB_intnum=0;}
if((timerB_intnum%8)==0) //0.5s时间到
{
second++;
P1OUT^=0x01;
}
}//中断end
void main(void)
{
unsigned int i;
second=0;
DCOCTL=0X60;
BCSCTL1=0X07; //开启XT2
BCSCTL2=0X88;
BCSCTL3=0X80;
WDTCTL=WDTPW+WDTHOLD;
do
{
IFG1 &= ~OFIFG; // Clear OSCFault flag
for (i = 0xFF; i > 0; i--); // Time for flag to set
}
while ((IFG1 & OFIFG) != 0); // OSCFault flag still set?
IFG1&=~(WDTIFG+OFIFG+NMIIFG); //reset the oscillator fault flag
//IE1|=OFIE+NMIIE+ACCVIE; //中断初始化设置
P1DIR |= 0x01;
TimerB_Init();//定时器B初始化
_EINT();//开总中断
LPM3;
while (1)
{
asm("NOP");
}
}