新聞中心

msp430精確測低頻

作者: 時間:2016-11-11 來源:網(wǎng)絡(luò) 收藏
//******************************************************************************
// Date: 2009.8.16
// Author: xurafreedom
// Email: freedomxura@gmail.com / mxh20999@163.com
// Blog: http://xurafreedom.cublog.cn
// 基本原理:1s定時,在此時間內(nèi)計數(shù)捕獲到的信號上升沿個數(shù),考慮到msp430的中斷優(yōu)先級// 已經(jīng)固定,所以用高優(yōu)先級的Timer_B產(chǎn)生50ms定時,低優(yōu)先級的Timer_A捕獲信號的上升沿
//******************************************************************************
#include
void InitSys();
unsigned int upflag = 0;
unsigned int f_50ms = 0;
/*******************************************
主函數(shù)
********************************************/
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
InitSys(); // MCLK , SMCLK----8M

//---------------------------------------------------------------------
//Timer_B的設(shè)置,用于產(chǎn)生定時中斷,中斷時間為50000us
P1DIR |= BIT3; // Set P1.3 to output direction
TBCCTL0 = CCIE; // TBCCR0 interrupt enabled
TBCCR0 = 50000;
TBCTL = TBSSEL_2 + ID_3 + MC_1; // SMCLK,1M, upmode

//---------------------------------------------------------------------
//Timer_A的設(shè)置,用于捕獲外部信號的邊沿觸發(fā),可以設(shè)置為上升沿觸發(fā),或者下降沿觸發(fā)
P1DIR&=~BIT2;
P1SEL = BIT2; //==設(shè)置P1.2端口為功能模塊使用,即:做捕獲源==
TACTL = TASSEL_2+TACLR+TAIE+MC1;//==定時器A時鐘信號選擇ACLK,
CCTL1 = CM_1+SCS+CAP+CCIE; //==輸入上升沿捕獲,CCI0A為捕獲信號源==
_EINT();
while(1);
}
/*******************************************
函數(shù)名稱:InitSys
功 能:初始化時鐘函數(shù)
參 數(shù):無
返回值 :無
********************************************/
void InitSys()
{
unsigned int i;
BCSCTL1&=~XT2OFF; //==打開XT2振蕩器==
do
{
IFG1 &= ~OFIFG; //==清除振蕩器失效標(biāo)志==
for (i = 0xFF; i > 0; i--); //==延時,等待XT2起振==
}
while ((IFG1 & OFIFG) != 0); //==判斷XT2是否起振==
BCSCTL2 =SELM_2+SELS; //==選擇MCLK、SMCLK為XT2,8M==
}
/*******************************************
函數(shù)名稱:Timer_B
功 能:定時器B中斷服務(wù)子函數(shù),產(chǎn)生50ms定時
參 數(shù):無
返回值 :無
********************************************/
// Timer B0 interrupt service routine
#pragma vector=TIMERB0_VECTOR
__interrupt void Timer_B (void)
{
P1OUT ^= BIT3; // 定時50ms
f_50ms = upflag;
upflag = 0;
}
/*******************************************
函數(shù)名稱:Timer_A
功 能:捕獲待測信號上升沿
參 數(shù):無
返回值 :無
********************************************/
#pragma vector=TIMERA1_VECTOR //==定時器A中斷處理==
__interrupt void Timer_A(void)
{
switch(TAIV) //向量查詢
{ case 2: //捕獲中斷
if(CCTL1&CM0) //捕獲到上升沿
upflag++;
break;
default:
break;
}
}


關(guān)鍵詞: msp430測低

評論


技術(shù)專區(qū)

關(guān)閉