main.lst

来自「51单片机驱动2相步进电机程序。 keil 开发软件。」· LST 代码 · 共 138 行

LST
138
字号
C51 COMPILER V8.16   MAIN                                                                  02/13/2009 19:04:37 PAGE 1   


C51 COMPILER V8.16, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN .\OBJ\main.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE SRC\main.C BROWSE DEBUG OBJECTEXTEND PRINT(.\LST\main.lst) OBJECT(.\OBJ\mai
                    -n.obj)

line level    source

   1          //QQ:228939191.
   2          //两相5、6线步进电机,分为四拍和八拍,这里介绍输出八拍方式:A-AC-C-CB-B-BD-D-DA
   3          //四拍:A-C-B-D,因此在八拍的基础上减去中间的就可以了,不过步距角要大一倍
   4          //#include <reg51.h>
   5          #include "STC89C52.H"
   6          #include <intrins.h> 
   7          //定义两相电机的四组线, 
   8          sbit LA1=P0^0;    //为 A相
   9          sbit LB1=P0^1;    //为 B相
  10          sbit LA2=P0^2;    //为/A相
  11          sbit LB2=P0^3;    //为/B相
  12          #define uchar unsigned char 
  13            
  14          void mDelay(unsigned int DelayTime);  //延时函数
  15          
  16          
  17          //2相4拍
  18          /************************************************************************************/
  19          //两个参数代表步进步数和转速 
  20          void Right1(unsigned int BuShu,unsigned int SuDu)
  21          {
  22   1               //步进节拍:A-AC-C-CB-B-BD-D-DA
  23   1              while(1)
  24   1                      { 
  25   2                              LA1=0;LB1=1;LA2=1;LB2=1;  
  26   2                              mDelay(SuDu);                   //这里的延时就可控制转速
  27   2                              if(!BuShu--)break;              //判断步进量走完没?以下都是,每走一步,判断一次
  28   2                 
  29   2                              LA1=0;LB1=0;LA2=1;LB2=1; 
  30   2                              mDelay(SuDu);
  31   2                              if(!BuShu--)break;
  32   2                 
  33   2                              LA1=1;LB1=0;LA2=1;LB2=1; 
  34   2                              mDelay(SuDu);
  35   2                              if(!BuShu--)break;
  36   2                 
  37   2                              LA1=1;LB1=0;LA2=0;LB2=1; 
  38   2                              mDelay(SuDu);
  39   2                              if(!BuShu--)break;
  40   2                 
  41   2                              LA1=1;LB1=1;LA2=0;LB2=1; 
  42   2                              mDelay(SuDu);
  43   2                              if(!BuShu--)break;
  44   2                 
  45   2                              LA1=1;LB1=1;LA2=0;LB2=0; 
  46   2                              mDelay(SuDu);
  47   2                              if(!BuShu--)break;
  48   2                              
  49   2                              LA1=1;LB1=1;LA2=1;LB2=0; 
  50   2                              mDelay(SuDu);
  51   2                              if(!BuShu--)break;
  52   2                 
  53   2                              LA1=0;LB1=1;LA2=1;LB2=0; 
  54   2                              mDelay(SuDu);
C51 COMPILER V8.16   MAIN                                                                  02/13/2009 19:04:37 PAGE 2   

  55   2                              if(!BuShu--)break; 
  56   2              }
  57   1       //     P0=0xFF;
  58   1      }
  59          //2相4拍
  60          /************************************************************************************/
  61          void Right2(unsigned int BuShu,unsigned int SuDu)
  62          {
  63   1               //步进节拍:A1B1-B1A2-A2B2-B2A1 
  64   1              while(1)
  65   1                      { 
  66   2                              LA1=0;LB1=0;LA2=1;LB2=1; 
  67   2                              mDelay(SuDu);//这里的延时就可控制转速
  68   2                              if(!BuShu--)break;
  69   2                 
  70   2                              LA1=1;LB1=0;LA2=0;LB2=1; 
  71   2                              mDelay(SuDu);
  72   2                              if(!BuShu--)break;
  73   2                 
  74   2                              LA1=1;LB1=1;LA2=0;LB2=0; 
  75   2                              mDelay(SuDu);
  76   2                              if(!BuShu--)break;
  77   2                 
  78   2                              LA1=0;LB1=1;LA2=1;LB2=0; 
  79   2                              mDelay(SuDu);
  80   2                              if(!BuShu--)break; 
  81   2              }
  82   1              
  83   1      }  
  84          /************************************************************************************/
  85          void mDelay(unsigned int DelayTime)  //延时函数
  86          {   
  87   1              unsigned char j=0;
  88   1              while(DelayTime--)
  89   1                      {
  90   2                              for(j=0;j<20;j++){}
  91   2                      }
  92   1      } 
  93          /************************************************************************************/
  94          void main()
  95          { 
  96   1       
  97   1              while(1)
  98   1                      {
  99   2                              
 100   2                              //如果控制方式为2相4拍,一圈是200个脉冲。那一个脉冲是1.8度。
 101   2                              //如果电机连接机械运行一圈是100mm,那一个脉冲是0.5mm。
 102   2                              //如果你要电机运行248mm,知道给几个脉冲了吧?如果不知道安就撞墙了。
 103   2                              if(P1_0==0)Right2(800,12); //P1_0按下,电机运行800个脉冲。12是延时,数越大速度就越慢。
 104   2                                      else P0=0x0F;//停止后将四个脚输出置高
 105   2                      } 
 106   1      }
 107          
 108          
 109          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    364    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
C51 COMPILER V8.16   MAIN                                                                  02/13/2009 19:04:37 PAGE 3   

   DATA SIZE        =   ----       8
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?