新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > MSP430F5529 (六)定時器Timer_A-2

        MSP430F5529 (六)定時器Timer_A-2

        作者: 時間:2016-11-28 來源:網(wǎng)絡(luò) 收藏


        實驗二:比較模式-增減模式輸出PWM波

        /*在比較和增減模式下產(chǎn)生PWM波(矩形波) */
        /*提一個PWM波的用處:驅(qū)動直流電機。我們知道對于直流電機,驅(qū)動它的電流的頻率并不影響轉(zhuǎn)速 ,只有占空比會影響轉(zhuǎn)速*/
        /*開發(fā)板上P2.0是有外接排針的,所以用這一端口輸出PWM*/
        /*看CPU引腳發(fā)現(xiàn),P2.0為TA1.1,也就是定時器A1的1號捕獲比較器輸出口*/
        #include
        void main(void)
        {
        WDTCTL=WDTPW+WDTHOLD;
        P2SEL|=BIT0; //聲明有特殊功能,不做普通I/O使用
        P2DIR|=BIT0; //輸出
        P2DS |=BIT0; //全力驅(qū)動,否則可能無法驅(qū)動電機
        P2OUT&=~BIT0; //初始化輸出低電平
        /*把SMCL配置為XT2 4MHZ*/
        P5SEL=BIT2+BIT3; //聲明特殊功能,將用作外部時鐘晶振XT2輸入
        UCSCTL6&=~XT2OFF; //開啟XT2
        while(SFRIFG1 & OFIFG)
        {
        UCSCTL7 &=~(XT2OFFG+DCOFFG+XT1LFOFFG);//清除3種時鐘錯誤標志
        SFRIFG1&=~(OFIFG);//清除時鐘錯誤標志位
        } //直到XT2從起振到振蕩正常,沒有錯誤發(fā)生
        UCSCTL4|=SELS_5; //把SMCLK的時鐘源選為XT2 4MHZ
        TA1CCTL0=CCIE; //定時器A1的捕獲比較器0開啟CCIFG位中斷
        TA1CCR0=200; //置入計數(shù)終值,則PWM頻率為10KHZ
        TA1CCTL1=CCIE; //捕獲比較器1開啟中斷
        TA1CCR1=50; //占空比為75%
        TA1CTL|=TACLR; //將計時器A1清零
        TA1CTL|=TASSEL_2+MC_3; //定時器選擇SMCLK作為時鐘源,且為增減模式
        TA1CCTL1=OUTMOD_4; //定時器A1中的捕獲比較器1,輸出模式為4翻轉(zhuǎn)
        while(1);
        }




        //呼吸燈//
        // 介紹: 該程序利用TIMER A 的 UP模式 在P1.3腳產(chǎn)生PWM輸出
        // 將CCR0設(shè)置為1500來定義PWM的周期,利用循環(huán)不斷改變CCR1的值,
        // 實現(xiàn)利用改變PWM的占空比來改變LED亮度.
        // SMCLK = MCLK = TACLK = default DCO
        #include
        void delay_nms(unsigned int n)// 延時函數(shù)
        {
        unsigned int j;
        for (j=0;j<(n);j++)
        {
        __delay_cycles(400); //太短會使LED顯得好像在常亮,太長就要等較長時間來觀察了
        }
        }
        void main(void)
        {
        unsigned const PWMPeriod = 1500; //設(shè)置PWM周期參數(shù),const聲明此值不允許改變.該數(shù)值太大,會導(dǎo)致LED閃爍
        volatile unsigned int i; //聲明變量i是隨時可變的,系統(tǒng)不要去優(yōu)化這個值
        WDTCTL = WDTPW + WDTHOLD; // 關(guān)閉看門狗
        P1DIR |=BIT3; // 設(shè)置 P1.3為輸出
        P1SEL |=BIT3; // 設(shè)置 P1.3為TA0.2輸出
        TA0CCR0 = PWMPeriod; // 設(shè)置PWM 周期
        TA0CCTL2 = OUTMOD_7; // 設(shè)置PWM 輸出模式為:7 - PWM復(fù)位/置位模式,
        // 即輸出電平在TAR的值等于CCR2時復(fù)位為0,當TAR的值等于CCR0時置位為1,改變CCR2,從而產(chǎn)生PWM。其實模式2也可以
        TA0CTL= TASSEL_2 +MC_1; // 設(shè)置TIMERA的時鐘源為SMCLK, 計數(shù)模式為up,到CCR0再自動從0開始計數(shù)
        while(1)
        {
        TA0CCR2=0;//確保最開始是暗的
        //漸亮過程:不斷設(shè)置TA0CCR2的值,使翻轉(zhuǎn)的時間變長,改變PWM的占空比
        for(i=0;i {
        TA0CCR2=i;
        delay_nms(4-(i/500)); //占空比變化的延時,調(diào)整延遲時間可改變呼吸燈變暗的速度
        //在暗的時候延長delay時間,可增強效果
        }
        //漸暗過程:不斷設(shè)置TA0CCR2的值,使翻轉(zhuǎn)的時間變短,改變PWM的占空比
        for(i=PWMPeriod;i>0;i-=1)
        {
        TA0CCR2=i;
        delay_nms(4-(i/500)); //占空比變化的延時,調(diào)整延遲時間可改變呼吸燈變暗的速度
        //在暗的時候延長delay時間,可增強效果
        }
        TA0CCR2=0; //確保燈暗
        delay_nms(250); //時間長一點,增強視覺效果
        }
        }

        上一頁 1 2 3 下一頁

        關(guān)鍵詞: MSP430F5529定時器Timer_A-

        評論


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

        關(guān)閉
        主站蜘蛛池模板: 林口县| 辛集市| 馆陶县| 鱼台县| 灯塔市| 从化市| 铁岭县| 涟源市| 宁远县| 敦煌市| 武功县| 丰台区| 阜城县| 高邑县| 宝清县| 宁蒗| 普定县| 瑞丽市| 修文县| 阳山县| 乌什县| 通海县| 沂水县| 启东市| 资阳市| 鹿邑县| 阿克苏市| 共和县| 云霄县| 白银市| 临朐县| 岗巴县| 新余市| 韶关市| 彩票| 文水县| 三门峡市| 富蕴县| 周至县| 牟定县| 区。|