久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 單片機程序編譯沒有問題,燒錄后控制不了步進電機 [打印本頁]

作者: 新手-菜鳥    時間: 2018-11-17 13:41
標題: 單片機程序編譯沒有問題,燒錄后控制不了步進電機
  1. #include "reg52.h"

  2. void delay(unsigned int t);

  3. //Motor
  4. sbit F1 = P1^0;
  5. sbit F2 = P1^1;
  6. sbit F3 = P1^2;
  7. sbit F4 = P1^3;
  8. sbit k1 =P3^0;
  9. sbit k2=P3^1;
  10. sbit RX=P0^6;                //                       
  11. sbit TX=P0^7;

  12. sbit shuidi=P0^3;
  13. sbit hongyai=P0^0;
  14. sbit yali=P0^2;
  15. bit flag1=0;
  16. bit flag2=0;
  17. signed int  time=0;
  18. unsigned int  timer=0;
  19. unsigned long S=0;
  20. unsigned char code FFW[8]={0xfe,0xfc,0xfd,0xf9,0xfb,0xf3,0xf7,0xf6}; //反轉
  21. unsigned char code FFZ[8]={0xf6,0xf7,0xf3,0xfb,0xf9,0xfd,0xfc,0xfe}; //正轉
  22. void Conut(void)
  23. {
  24.         time=TH0*256+TL0;
  25.         TH0=0;
  26.         TL0=0;
  27.         
  28.         S= (long)(time*0.17);     //算出來是CM

  29.         if((S>=4000)||flag1==1)   //
  30.         {         
  31.           flag1=0;
  32.         }         
  33. }

  34. void zd0() interrupt 1                  //T0中斷用來計數器溢出,超過測距范圍
  35. {
  36.     flag1=1;                                         //中斷溢出標志
  37.   }
  38. void panduan()

  39. {
  40.                    TMOD=0x11;                   //設T0為方式1,GATE=1;
  41.         TH0=0;
  42.         TL0=0;         
  43.         TH1=0xf8;                   //2MS定時
  44.         TL1=0x30;
  45.         ET0=1;             //允許T0中斷
  46.         ET1=1;                           //允許T1中斷
  47.         TR1=1;                           //開啟定時器
  48.         EA=1;                           //總中斷


  49.         {



  50.          while(!RX);                //當RX為零時等待
  51.          TR0=1;                            //開啟計數
  52.          while(RX);                        //當RX為1計數并等待
  53.          TR0=0;                                //關閉計數
  54.      Conut();                        //計算  
  55.          if(S<80)         
  56.           flag2=0;      
  57.         else         
  58.         flag2=0;         
  59.                   }
  60.                                   //調節轉速
  61.         }

  62. void motor_FFW()
  63.           {
  64.    unsigned char i;      
  65.     {
  66.       for (i=0; i<8; i++)  


  67.         {
  68.           if(hongyai==0) P1 = FFW[i]&0x1f;   //調取數據
  69.                   if(k2==0) P1 = FFW[i]&0x1f;
  70.           if(yali==0) P1 = FFW[i]&0x1f;
  71.                   if(flag2==0)P1 = FFW[i]&0x1f;
  72.         


  73.           delay(1);  
  74.          }
  75.          }
  76. }
  77. void  motor_FFZ()
  78. {
  79.    unsigned char i;      
  80.     {
  81.       for (i=0; i<8; i++)      
  82.         {
  83.                   if(k1==0) P1 = FFZ[i]&0x1f;
  84.                    if(shuidi==0) P1 = FFZ[i]&0x1f;
  85.                  
  86.                                                 
  87.                   delay(1);                   //調節轉速
  88.         }
  89.      }
  90. }
  91. void         main()
  92. {
  93.     while(1)
  94.         {
  95.          if(flag2==0)
  96.     motor_FFW();
  97.         
  98.          if(shuidi==0)
  99.          motor_FFZ();
  100.          if(hongyai==0)
  101.          motor_FFW();
  102.          if(yali==0)
  103.          motor_FFW();
  104. }
  105. }
復制代碼

編譯沒有問題,程序燒錄后控制不了五線四相步進電機
求大神解決!

作者: angmall    時間: 2018-11-17 21:23
你的程序有缺陷,我給你來個程序試試

  1. /*-----------------------------------------------
  2.   名稱:步進電機
  3.   內容:本程序用于測試4相步進電機常規驅動
  4.         使用1-2相勵磁
  5.         1-2相激勵功率增倍,步進角度減半,抖動減少
  6.         順序如下 a-ab-b-bc-c-cd-d-da   又稱4相8拍
  7. ------------------------------------------------*/

  8. #include <reg52.h>



  9. sbit A1=P1^0; //定義步進電機連接端口
  10. sbit B1=P1^1;
  11. sbit C1=P1^2;
  12. sbit D1=P1^3;


  13. #define Coil_AB1 {A1=1;B1=1;C1=0;D1=0;}//AB相通電,其他相斷電
  14. #define Coil_BC1 {A1=0;B1=1;C1=1;D1=0;}//BC相通電,其他相斷電
  15. #define Coil_CD1 {A1=0;B1=0;C1=1;D1=1;}//CD相通電,其他相斷電
  16. #define Coil_DA1 {A1=1;B1=0;C1=0;D1=1;}//D相通電,其他相斷電
  17. #define Coil_A1 {A1=1;B1=0;C1=0;D1=0;}//A相通電,其他相斷電
  18. #define Coil_B1 {A1=0;B1=1;C1=0;D1=0;}//B相通電,其他相斷電
  19. #define Coil_C1 {A1=0;B1=0;C1=1;D1=0;}//C相通電,其他相斷電
  20. #define Coil_D1 {A1=0;B1=0;C1=0;D1=1;}//D相通電,其他相斷電
  21. #define Coil_OFF {A1=0;B1=0;C1=0;D1=0;}//全部斷電

  22. unsigned char Speed;
  23. bit Flag;
  24. /*------------------------------------------------
  25. uS延時函數,含有輸入參數 unsigned char t,無返回值
  26. unsigned char 是定義無符號字符變量,其值的范圍是
  27. 0~255 這里使用晶振12M,精確延時請使用匯編,大致延時
  28. 長度如下 T=tx2+5 uS
  29. ------------------------------------------------*/
  30. void DelayUs2x(unsigned char t)
  31. {   
  32. while(--t);
  33. }
  34. /*------------------------------------------------
  35. mS延時函數,含有輸入參數 unsigned char t,無返回值
  36. unsigned char 是定義無符號字符變量,其值的范圍是
  37. 0~255 這里使用晶振12M,精確延時請使用匯編
  38. ------------------------------------------------*/
  39. void DelayMs(unsigned char t)
  40. {
  41.      
  42. while(t--)
  43. {
  44.      //大致延時1mS
  45.      DelayUs2x(245);
  46.          DelayUs2x(245);
  47. }
  48. }
  49. /*------------------------------------------------
  50.                     主函數
  51. ------------------------------------------------*/
  52. main()
  53. {
  54. unsigned int i=512;//旋轉一周時間

  55. EA=1;          //全局中斷開
  56. EX0=1;         //外部中斷0開
  57. IT0=1;         //1表示邊沿觸發

  58. Speed=10;
  59. while(1){
  60. Coil_OFF
  61. while((i--)&&Flag)  //正向
  62.   {  Coil_A1      
  63.      DelayMs(Speed);
  64.      Coil_AB1                //遇到Coil_AB1  用{A1=1;B1=1;C1=0;D1=0;}代替
  65.      DelayMs(Speed);         //改變這個參數可以調整電機轉速 ,
  66.                              //數字越小,轉速越大,力矩越小
  67.          Coil_B1      
  68.      DelayMs(Speed);
  69.      Coil_BC1
  70.      DelayMs(Speed);
  71.          Coil_C1      
  72.      DelayMs(Speed);
  73.      Coil_CD1
  74.      DelayMs(Speed);
  75.          Coil_D1      
  76.      DelayMs(Speed);
  77.      Coil_DA1
  78.      DelayMs(Speed);
  79.   }
  80.   Coil_OFF
  81.   i=512;
  82.   while((i--)&&(!Flag))//反向
  83.   {  
  84.      Coil_A1      
  85.      DelayMs(Speed);
  86.      Coil_DA1                //遇到Coil_AB1  用{A1=1;B1=1;C1=0;D1=0;}代替
  87.      DelayMs(Speed);         //改變這個參數可以調整電機轉速 ,
  88.                              //數字越小,轉速越大,力矩越小
  89.          Coil_D1      
  90.      DelayMs(Speed);
  91.      Coil_CD1
  92.      DelayMs(Speed);
  93.          Coil_C1      
  94.      DelayMs(Speed);
  95.      Coil_BC1
  96.      DelayMs(Speed);
  97.          Coil_B1      
  98.      DelayMs(Speed);
  99.      Coil_AB1
  100.      DelayMs(Speed);
  101.   }
  102. }
  103. }

  104. /*------------------------------------------------
  105.                  外部中斷程序
  106. ------------------------------------------------*/
  107. void ISR_INT0(void) interrupt 0
  108. {

  109. if(!INT0)
  110.    {
  111.    DelayMs(10);//在此處可以添加去抖動程序,防止按鍵抖動造成錯誤
  112.    if(!INT0)
  113.    //while(!INT1);//等待按鍵釋放
  114.      {
  115.      Flag=!Flag;   
  116.      }
  117.    }
  118. }
復制代碼








歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 九九热免费视频在线观看 | 91天堂网 | 亚洲综合区 | 中文字幕不卡一区 | 国产精品成人一区二区三区吃奶 | 欧美9999| 国产精品99久久久久久大便 | 国产精品96久久久久久 | 日韩免费一区二区 | 国产精品一区二 | 毛片一区二区三区 | 国产福利免费视频 | 国产精品精品视频一区二区三区 | 亚洲91精品 | 888久久久| 罗宾被扒开腿做同人网站 | 免费的日批视频 | 久久www免费人成看片高清 | 中文字幕一区二区三区日韩精品 | 成人精品一区二区户外勾搭野战 | 久久久久久久久久久久亚洲 | 国产精品久久久久久久久久久久午夜片 | 欧美激情视频一区二区三区在线播放 | 伊人免费网 | 国产福利91精品一区二区三区 | 97精品国产97久久久久久免费 | 亚洲成人综合社区 | 亚洲区一区二区 | 中文字幕色站 | 中文字幕乱码一区二区三区 | 久久成人亚洲 | 久干网 | 久久亚洲精品国产精品紫薇 | 欧美jizzhd精品欧美巨大免费 | 欧美成人精品一区二区男人看 | 久久亚洲一区二区 | 国产精品久久久久久久久久久久 | 亚洲天堂一区二区 | 91精品在线播放 | 中文字幕亚洲精品在线观看 | 欧美日一区二区 |