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

📄 motor_dri.lst

📁 步进电机控制主机程序,与步进电机控制副机程序配合使用。
💻 LST
字号:
C51 COMPILER V7.01  MOTOR_DRI                                                              09/10/2005 15:18:13 PAGE 1   


C51 COMPILER V7.01, COMPILATION OF MODULE MOTOR_DRI
OBJECT MODULE PLACED IN motor_dri.OBJ
COMPILER INVOKED BY: C:\keil\C51\BIN\C51.EXE motor_dri.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #pragma small
   2          #include "reg66x.h"
   3          #include "motor_dri.h"
   4          #include "electromotion.h"
   5          
   6          //电机驱动器设定:400步一圈,单脉冲方式,半电流,输出电流选择最大。
   7          unsigned int motor_degree[5]={2048,1024,512,384,340};                   //五级变速调控
   8          bit motor_runing=0;                                              //==1电机在转
   9          bit timer0_end_flag=1;                                          //==1定时结束,可以走下一步
  10          bit run_next_cycle=0;                                                                                   //一个呼吸周期标志
  11          unsigned int timer_cycle = 0;                                                                   //一个呼吸周期中循环1ms的个数
  12          
  13          /************************步进电机驱动程序*****************/
  14          /*********************************************************
  15          函数名称:motor_driver()
  16          功能描述:根据提供的速度.脉冲步数和方向,做出实时的处理.
  17          被调用的函数列表:无
  18          参数说明:
  19          返 回 值:
  20          注    释:
  21          **********************************************************/
  22          bit motor_driver(unsigned int motor_speed,unsigned int motor_pulse,bit motor_direct)
  23          {
  24   1          unsigned int i,temp;
  25   1          P1_1=motor_direct;                                           //==1正转;
  26   1          P1_4=0;
  27   1          P1_5=1;
  28   1      
  29   1          if(motor_pulse>200)
  30   1          {
  31   2              motor_pulse-=200;
  32   2                      temp=65535-motor_speed-30*100;
  33   2              for(i=0;i<100;i++)
  34   2              {
  35   3                  TH0=temp/256;
  36   3                  TL0=temp%256;
  37   3                      temp+=30;
  38   3                  TR0=1;
  39   3                  timer0_end_flag=0;
  40   3                  while(!timer0_end_flag);
  41   3              }
  42   2                      temp=65535-motor_speed;
  43   2              for(i=motor_pulse;i>0;i--)
  44   2              {
  45   3                  TH0=temp/256;
  46   3                  TL0=temp%256;
  47   3                  TR0=1;
  48   3                  timer0_end_flag=0;
  49   3                  while(!timer0_end_flag);
  50   3              }
  51   2                      temp=65535-motor_speed;
  52   2              for(i=100;i>0;i--)
  53   2              {
  54   3                  TH0=temp/256;
  55   3                  TL0=temp%256;
C51 COMPILER V7.01  MOTOR_DRI                                                              09/10/2005 15:18:13 PAGE 2   

  56   3                              temp-=30;
  57   3                  TR0=1;
  58   3                  timer0_end_flag=0;
  59   3                  while(!timer0_end_flag);
  60   3              }
  61   2              motor_pulse=0;
  62   2                      return(1);
  63   2          }
  64   1          else
  65   1          {
  66   2              if(motor_speed<motor_degree[1])
  67   2              {
  68   3                  temp=65535-motor_degree[1];
  69   3                  for(i=0;i<motor_pulse;i++)
  70   3                  {
  71   4                      TH0=temp/256;
  72   4                      TL0=temp%256;
  73   4                      TR0=1;
  74   4                      timer0_end_flag=0;
  75   4                      while(!timer0_end_flag);
  76   4                  }    
  77   3              }
  78   2              else
  79   2              {
  80   3                      temp=65535-motor_speed;
  81   3                  for(i=0;i<motor_pulse;i++)
  82   3                  {
  83   4                      TH0=temp/256;
  84   4                      TL0=temp%256;
  85   4                      TR0=1;
  86   4                      timer0_end_flag=0;
  87   4                      while(!timer0_end_flag);
  88   4                  }
  89   3              }
  90   2              motor_pulse=0;
  91   2                      return(1);
  92   2          }
  93   1      }
  94          
  95          //定时器初始化
  96          void init_timer(void)
  97          {
  98   1          TMOD = 0x11;
  99   1          TR0 = 0;
 100   1          IEN0 = 0x8A;
 101   1      }
 102          
 103          //T0中断服务函数,定时步进电机每步时间
 104          void timer0_int(void) interrupt 1 using 1
 105          {
 106   1          unsigned char i;
 107   1          TR0=0;
 108   1          P1_0=1;
 109   1          for (i=0; i<30; i++);                            //极限i=20
 110   1          P1_0=0;
 111   1          timer0_end_flag=1;
 112   1      }
 113          
 114          
 115          //步进电机初始化
 116          void  init_stepmotor(void)
 117          {
C51 COMPILER V7.01  MOTOR_DRI                                                              09/10/2005 15:18:13 PAGE 3   

 118   1              motor_runing    =0;
 119   1              P1=0x00;
 120   1      }
 121          
 122          //步进电机归零
 123          void regress_stepmotor(void)
 124          {
 125   1              unsigned int i,temp;
 126   1              temp=65535-motor_degree[1];
 127   1              P1_5=1;
 128   1              for(i=0;i<10;i++);
 129   1              if(P1_5==1)
 130   1              while(P1_5==1)
 131   1          {
 132   2              P1_1=backward;
 133   2              TH0=temp/256;
 134   2              TL0=temp%256;
 135   2              TR0=1;
 136   2              timer0_end_flag=0;
 137   2              while(!timer0_end_flag);
 138   2          }
 139   1              else
 140   1          while(P1_5==0)
 141   1          {
 142   2              P1_1=forward;
 143   2              TH0=temp/256;
 144   2              TL0=temp%256;
 145   2              TR0=1;
 146   2              timer0_end_flag=0;
 147   2              while(!timer0_end_flag);
 148   2          }
 149   1      }
 150          
 151          //T1中断服务函数,定时一个呼吸周期时间
 152          void timer1_int(void) interrupt 3 using 2
 153          {
 154   1              TH1 = 0xF8;
 155   1              TL1 = 0x30;
 156   1          TR1 = 1;
 157   1          timer_cycle++;
 158   1              if(timer_cycle>time_respiration)
 159   1              {
 160   2                      timer_cycle = 0;
 161   2                      run_next_cycle = 1;
 162   2              }
 163   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    440    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     12       4
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      3       1
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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