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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)控制18路舵機(jī)的C程序

          單片機(jī)控制18路舵機(jī)的C程序

          作者: 時(shí)間:2016-12-01 來(lái)源:網(wǎng)絡(luò) 收藏
          關(guān)于本程序:

          問(wèn):定時(shí)器1控制著9路pwm 以前聽(tīng)高手幫我講解 一般8路之內(nèi)是合適的 因?yàn)楹孟袷前讯鏅C(jī)的一個(gè)周期分成8分來(lái)分別控制 超出8路的話 好像周期就有可能改變

          本文引用地址:http://www.ex-cimer.com/article/201612/324215.htm

          答:是的,每路PWM有大約2.5ms是要獨(dú)立侵占timer時(shí)間的,8*2.5剛好20ms,每路舵機(jī)范圍我只用到0.7~2.0左右,所以9路之間沒(méi)有干擾。但是個(gè)timer之間有干擾。

          問(wèn):看到個(gè)小bug pwm0到pwm8再到pwm0可能不是20ms的一個(gè)周期

          答:嘿嘿,我把每路的低電平時(shí)間合在一起了,然后看它的匯編代碼,修正中斷中語(yǔ)句用去的時(shí)間,上位機(jī)算好,用keil的仿真出來(lái)是很準(zhǔn)的。 在兩個(gè)timer沒(méi)有同時(shí)中斷的情況下精度為0.5us,一旦同時(shí)中斷,有一路PWM的誤差將達(dá)到7、8us。

          恩 這個(gè)中斷程序沒(méi)有結(jié)束另外的中斷有發(fā)生 就會(huì)造成后面的中斷打失 所以得用性能好的單片機(jī)哈哈

          注意本程序在編譯的時(shí)候要選擇pdata模式不然會(huì)失敗這是工程文件下載已經(jīng)設(shè)置好了模式的:http://www.51hei.com/f/duoji_c.rar

          程序源碼:

          /**************************************************************************
          文 件 名:pwm_18out.c
          功能描述:利用STC89C52RC做下位機(jī),控制18路舵機(jī)PWM
          雙倍速,機(jī)器周期0.5us
          日 期:2012-3-19
          作 者:cazy peach-ATP
          備 注: 18路舵機(jī)控制下位機(jī)
          **************************************************************************/
          #define uint unsigned int
          #define uchar unsigned char
          #include
          sbit pwm9=P1^0;
          sbit pwm10=P1^1;
          sbit pwm11=P1^2;
          sbit pwm12=P1^3;
          sbit pwm13=P1^4;
          sbit pwm14=P1^5;
          sbit pwm15=P1^6;
          sbit pwm16=P1^7;
          sbit pwm17=P0^7;
          sbit pwm0=P2^7;
          sbit pwm1=P2^6;
          sbit pwm2=P2^5;
          sbit pwm3=P2^4;
          sbit pwm4=P2^3;
          sbit pwm5=P2^2;
          sbit pwm6=P2^1;
          sbit pwm7=P2^0;
          sbit pwm8=P0^6;
          //***************************參數(shù)申明******************************
          //指令格式:兩byte為一路PWM,前一個(gè)為PWM高電平定時(shí)器TH值、后一個(gè)為T(mén)L的值,由上位機(jī)計(jì)算所得,共20組。最后兩組分別為每9路PWM低電平和。
          uintdatapwm_val[40]={
          0XF4, 0XF0, 0XF7, 0X9B, 0XF6, 0XAE,
          0XF4, 0XF9, 0XF8, 0X01, 0XF6, 0X8F,
          0XF5, 0X02, 0XF7, 0X2B, 0XF6, 0X9D,
          0XF4, 0XF0, 0XF3, 0X1D, 0XF3, 0X16,
          0XF4, 0XF9, 0XF2, 0X8B, 0XF3, 0XB0,
          0XF5, 0X02, 0XF2, 0XE9, 0XF3, 0X9B,
          0XBB, 0X55, 0XD3, 0X04};
          uchar zhilin[61];
          uchar *point;
          uchar data pwm_select=0;
          uchar data pwm_scan=0; //timer1使用
          uchar data pwm_scan1=0; //timer2使用
          uchardataSCI_get=0;
          //**************************函數(shù)聲明****************************
          void SCI_INT(void) ;
          void timer_INT(void) ;
          //***************************主函數(shù)*****************************
          void main()
          {
          uchar j;
          P0=0X00;
          P1=0x00;
          P2=0X00;
          point=zhilin;
          SCI_INT();
          timer_INT();
          for(j=0;j<61;j++){zhilin[j]=0;}
          while(1)
          {
          for(;;) //指令接收
          {
          if(RI){RI=0;SCI_get=SBUF;*point++=SCI_get;j++;}else{continue;}
          if(SCI_get==0xff){point=zhilin;break;} //0xff指令結(jié)束符
          }

          for(j=0;j<21;j++) //指令處理
          {
          if(zhilin[j*3]==255){break;} //判斷是否為指令結(jié)束符
          pwm_select=zhilin[j*3];
          pwm_val[pwm_select]=zhilin[j*3+1];
          pwm_val[pwm_select+1]=zhilin[j*3+2];
          }
          }
          }


          上一頁(yè) 1 2 下一頁(yè)

          評(píng)論


          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁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); })();