⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 step motor.lst

📁 这是一个简单的步进电机的程序,用C51编写,主要可以定时控制电机进行180度的旋转
💻 LST
字号:
C51 COMPILER V7.06   STEP_MOTOR                                                            12/04/2007 01:27:32 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE STEP_MOTOR
OBJECT MODULE PLACED IN step motor.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE step motor.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include<reg51.h>
   2          #define uchar unsigned char
   3          
   4          #define positive 0
   5          #define minus 1
   6          sbit direction_select=P3^6;
   7          bit dir_flag=1;
   8          uchar code Pulse_table[4]={0xf8,0xf4,0xf2,0xf1};//{0xfc,0xf6,0xf3,0xf9};
   9          uchar code Pulse_table_m[4]={0xf1,0xf2,0xf4,0xf8};//{0xf9,0xf3,0xf6,0xfc};
  10          extern bit reset_flag;
  11          sbit key_cycleless=P3^3;
  12          sbit key_pause=P3^5;
  13          sbit key_start=P3^4;
  14          extern delay();
  15          extern bit Glint_enable_flag;
  16          extern bit Pause_flag;
  17          
  18          /*
  19          void delaymotorf()//////////////////////////////////////////
  20          {
  21           int k;
  22           for(k=0;k<3000;k++);
  23          }
  24          */
  25          void delaymotor()//////////////////////////////////////////
  26          {
  27   1       int k;
  28   1       for(k=0;k<4000;k++);
  29   1      }
  30          
  31          
  32          
  33          void step_motor()///////////////////////////转90度
  34          {
  35   1       bit direction;
  36   1       uchar i,j;
  37   1       TR0=0;
  38   1       if(direction_select==0&&dir_flag==1)
  39   1       {
  40   2        direction=positive;
  41   2        dir_flag=0;
  42   2       }
  43   1        if(direction_select==1&&dir_flag==1)
  44   1       {
  45   2        direction=minus;
  46   2        dir_flag=0;
  47   2       }
  48   1       if(direction==positive)
  49   1       {
  50   2        
  51   2        for(j=0;j<24;j++)//13
  52   2        {
  53   3         for(i=0;i<4;i++)
  54   3         {
  55   4          
C51 COMPILER V7.06   STEP_MOTOR                                                            12/04/2007 01:27:32 PAGE 2   

  56   4          P0=Pulse_table[i];
  57   4          /*
  58   4          if(j<2||j>22)
  59   4          delaymotor();
  60   4              else 
  61   4              */
  62   4              delaymotor();
  63   4      
  64   4              if(key_pause==0)
  65   4              {
  66   5               delay();
  67   5               if(key_pause==0)
  68   5               {
  69   6                Pause_flag=1;
  70   6            Glint_enable_flag=1;
  71   6                TR0=0;
  72   6               while(1)
  73   6               {
  74   7                if(key_start==0)
  75   7                {
  76   8             Pause_flag=0;
  77   8             Glint_enable_flag=0;
  78   8                //TR0=1;
  79   8                break;
  80   8                }
  81   7            if(reset_flag==1)
  82   7            {
  83   8             //reset_flag=0;
  84   8             break;
  85   8            }
  86   7               }
  87   6               }
  88   5              }
  89   4          
  90   4         }
  91   3        }
  92   2        P0=0;
  93   2        direction=minus;
  94   2       }
  95   1       else
  96   1       if(direction==minus)
  97   1       {
  98   2       /*
  99   2        P0=0xf3;//@@@@@@@@@@@@@@@@@@@@@2
 100   2        delaymotor();
 101   2        P0=0xf6;
 102   2        delaymotor();
 103   2        P0=0xfc;
 104   2        delaymotor();
 105   2        */
 106   2        for(j=0;j<24;j++)//12
 107   2        {
 108   3         for(i=0;i<4;i++)
 109   3         {
 110   4          P0=Pulse_table_m[i];
 111   4          /*
 112   4              if(j<2||j>22)
 113   4          delaymotor();
 114   4              else 
 115   4          */
 116   4              delaymotor();
 117   4        
C51 COMPILER V7.06   STEP_MOTOR                                                            12/04/2007 01:27:32 PAGE 3   

 118   4      
 119   4              if(key_pause==0)
 120   4              {
 121   5               delay();
 122   5               if(key_pause==0)
 123   5               {
 124   6                 Pause_flag=1;
 125   6             Glint_enable_flag=1;
 126   6                TR0=0;
 127   6               while(1)
 128   6               {
 129   7                if(key_start==0)
 130   7                {
 131   8             Pause_flag=0;
 132   8             Glint_enable_flag=0;
 133   8                //TR0=1;
 134   8                break;
 135   8                }
 136   7            if(reset_flag==1)
 137   7            {
 138   8             //reset_flag=0;留待外面置0
 139   8             break;
 140   8            }
 141   7               }
 142   6               }
 143   5              }
 144   4      
 145   4         }
 146   3        }
 147   2      P0=0;//@@@@@@@@@@@22
 148   2        direction=positive;
 149   2       }
 150   1       if(reset_flag==1)
 151   1       {
 152   2        TR0=0;
 153   2        if(key_cycleless==1)//不是无限循环状态,则外面不会用到reset_flag,置0
 154   2        reset_flag=0;
 155   2       }
 156   1       else
 157   1       TR0=1;//正常,开启计时
 158   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    193    ----
   CONSTANT SIZE    =      8    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       2
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1       1
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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