#include <msp430x15x.h>
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; //关看门狗
Clock_Init();
io_init();
TB_dingshi();
TA_init();
_EINT();
while(1);
}
void io_init()
{
P1DIR|=BIT7;//测试用I/o
}
void TA_init()
{
TACTL = TASSEL_2 + TACLR+ MC_1; // SMCLK, upmode
TACCTL0 = CCIE; // TACCR0 interrupt enabled
TACCR0 = TA_CCR0;
}
/*==================================TB的初始化设置=========================================
函数名称: void TB_dingshi()
函数功能:定时器A捕获设置,用于捕获上升沿
函数参数:
===========================TBCTLTBCTL==============================================================*/
void TB_dingshi()
{
TBCCR0 = TB_CCR0;
TBCTL = TBSSEL_2 + TBCLR+ MC_1; // SMCLK 8M, upmode
}
// Timer A0 interrupt service routine
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
P1OUT |= BIT7;
TACCTL0 &=~ CCIE;
TBCCTL0 |= CCIE;
}
/*==================================TB的中断服务程序=========================================
函数名称: Timer_BISR
函数功能: 定时器B中断服务子函数,定时
函数参数:
=========================================================================================*/
#pragma vector=TIMERB0_VECTOR
__interrupt void Timer_B0 (void)
{
P1OUT &=~ BIT7;
TBCCTL0 &=~ CCIE;
TACCTL0 |= CCIE;
}
/******************************时钟模块*****************************************
函数功能:初始化XT2时钟函数
*******************************************************************************/
void Clock_Init()
{
uint iq0;
BCSCTL1 &= ~XT2OFF; //打开XT2振荡器
do
{
IFG1 &= ~OFIFG;//清除振荡器失效标志
for (iq0 = 0xFF; iq0 > 0; iq0--); //延时,等待XT2起振
}
while ((IFG1 & OFIFG) != 0);//判断XT2是否起振
BCSCTL2 = SELM_2 + SELS; //选择MCLK、SMCLK为XT2
//为高速时钟 不分频,均为8M
}