<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 機器人教程1:如何利用51單片機輸出PWM波

          機器人教程1:如何利用51單片機輸出PWM波

          作者: 時間:2016-12-01 來源:網絡 收藏

          /************電機正反向控制**************/

          void Motor_turn(void)

          {

          if(key_turn==0)

          {

          delayxms(2);//此處時間不能太長,否者會的中斷產生沖突

          if(key_turn==0)

          {

          flag=~flag;

          }

          while(!key_turn);

          }

          }

          /***********定時器0初始化***********/

          void timer0_init(void)

          {

          TMOD=0x01; //定時器0工作于方式1

          TH0=(65536-10)/256;

          TL0=(65536-10)%256;

          TR0=1;

          ET0=1;

          EA=1;

          }

          /**************定時0中斷處理******************/

          void timer0_int(void) interrupt 1

          {

          TR0=0;//設置定時器初值期間,關閉定時器

          TH0=(65536-10)/256;

          TL0=(65536-10)%256;

          TR0=1;

          if(flag==1)//電機正轉

          {

          PWM1=0;

          time++;

          if(time{

          PWM2=1;

          }

          else

          PWM2=0;

          if(time>=100)

          {

          time=0;

          }

          }

          else //電機反轉

          {

          PWM2=0;

          time++;

          if(time{

          PWM1=1;

          }

          else

          PWM1=0;

          if(time>=100)

          {

          time=0;

          }

          }

          }

          4、程序4、使單片機輸出PWM,并能控制正反轉和實現調速

          為了使大家徹底掌握此方面,下面再給出一個復雜一點的程序,實現的功能為通過一個按鍵控制正反轉并通過另外兩個按鍵使之可以在0到20級之間調速的程序。

          /*******************************************************************/

          /*程序名:PWM直流電機調速*/

          /*晶振:11.00592 MHz CPU型號:STC89C52 */

          /*直流電機的PWM波控制,可以通過按鍵控制正反轉并在0到20級之間調速*/

          /*****************************************************************/

          #include

          #define uint unsigned int

          #define uchar unsigned char

          uchar time,count=50,flag=1;//低電平的占空比

          sbit PWM1=P2^0;//PWM通道1,反轉脈沖

          sbit PWM2=P2^1;//PWM通道2,正轉脈沖

          sbit key_add=P3^5;//電機加速

          sbit key_dec=P3^6;//電機減速

          sbit key_turn=P3^7;//電機換向

          /************函數聲明**************/

          void delayxms(uint z);

          void Motor_turn();

          void Motor_add();

          void Motor_dec();

          void timer0_init();

          /*********主函數********************/

          void main()

          {

          timer0_init();

          while(1)

          {

          Motor_turn();

          Motor_add();

          Motor_dec();

          }

          }

          /****************延時處理**********************/

          void delayxms(uint z)//延時xms程序

          {

          uint x,y;

          for(y=z;x>0;x--)

          for(y=110;y>0;y--);

          }

          /************電機正反向控制**************/

          void Motor_turn()

          {

          if(key_turn==0)

          {

          delayxms(2);//此處時間不能太長,否者會的中斷產生沖突

          if(key_turn==0)

          {

          flag=~flag;

          }

          while(!key_turn);

          }

          }

          void Motor_add()//電機加速

          {

          if(key_add==0)

          {

          delayxms(2);//此處時間不能太長,否者會的中斷產生沖突

          if(key_add==0)

          {

          count+=5;

          if(count>=100)

          {

          count=0;

          }

          }

          while(!key_add);

          }

          }

          void Motor_dec()//電機加減速

          {

          if(key_dec==0)

          {

          delayxms(2);//此處時間不能太長,否者會的中斷產生沖突

          if(key_dec==0)

          {

          count-=5;

          if(count>=100)

          {

          count=0;

          }

          }

          while(!key_dec);

          }

          }

          /***********定時器0初始化***********/

          void timer0_init()

          {

          TMOD=0x01; //定時器0工作于方式1

          TH0=(65536-10)/256;

          TL0=(65536-10)%256;

          TR0=1;

          ET0=1;

          EA=1;

          }



          評論


          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();