新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > msp430精確測低頻

        msp430精確測低頻

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

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


        關鍵詞: msp430測低

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 喀喇沁旗| 白城市| 昭苏县| 云林县| 玛纳斯县| 怀远县| 无锡市| 商丘市| 乐业县| 舟曲县| 嘉祥县| 舞钢市| 天全县| 长葛市| 荣昌县| 理塘县| 天门市| 武平县| 顺义区| 古浪县| 康定县| 章丘市| 娱乐| 临泽县| 万年县| 林口县| 华池县| 望江县| 施甸县| 玉环县| 丹凤县| 宁武县| 富平县| 盖州市| 安乡县| 韶关市| 阿克陶县| 寿阳县| 武宁县| 六安市| 大竹县|