在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

    
    
    <address id="vxupu"><td id="vxupu"></td></address>

      <pre id="vxupu"><small id="vxupu"></small></pre>
      <dfn id="vxupu"></dfn>
      <div id="vxupu"><small id="vxupu"></small></div>
    1. 新聞中心

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

      MSP430F5529 (六)定時器Timer_A-2

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


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

      /*在比較和增減模式下產(chǎn)生PWM波(矩形波) */
      /*提一個PWM波的用處:驅動直流電機。我們知道對于直流電機,驅動它的電流的頻率并不影響轉速 ,只有占空比會影響轉速*/
      /*開發(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; //全力驅動,否則可能無法驅動電機
      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翻轉
      while(1);
      }




      //呼吸燈//
      // 介紹: 該程序利用TIMER A 的 UP模式 在P1.3腳產(chǎn)生PWM輸出
      // 將CCR0設置為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; //設置PWM周期參數(shù),const聲明此值不允許改變.該數(shù)值太大,會導致LED閃爍
      volatile unsigned int i; //聲明變量i是隨時可變的,系統(tǒng)不要去優(yōu)化這個值
      WDTCTL = WDTPW + WDTHOLD; // 關閉看門狗
      P1DIR |=BIT3; // 設置 P1.3為輸出
      P1SEL |=BIT3; // 設置 P1.3為TA0.2輸出
      TA0CCR0 = PWMPeriod; // 設置PWM 周期
      TA0CCTL2 = OUTMOD_7; // 設置PWM 輸出模式為:7 - PWM復位/置位模式,
      // 即輸出電平在TAR的值等于CCR2時復位為0,當TAR的值等于CCR0時置位為1,改變CCR2,從而產(chǎn)生PWM。其實模式2也可以
      TA0CTL= TASSEL_2 +MC_1; // 設置TIMERA的時鐘源為SMCLK, 計數(shù)模式為up,到CCR0再自動從0開始計數(shù)
      while(1)
      {
      TA0CCR2=0;//確保最開始是暗的
      //漸亮過程:不斷設置TA0CCR2的值,使翻轉的時間變長,改變PWM的占空比
      for(i=0;i {
      TA0CCR2=i;
      delay_nms(4-(i/500)); //占空比變化的延時,調(diào)整延遲時間可改變呼吸燈變暗的速度
      //在暗的時候延長delay時間,可增強效果
      }
      //漸暗過程:不斷設置TA0CCR2的值,使翻轉的時間變短,改變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 下一頁

      評論


      技術專區(qū)

      關閉