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

📄 mill.lst

📁 电机控制板程序修改.机电一体化的实际应用。可操作性强
💻 LST
字号:
C51 COMPILER V7.20   MILL                         06/13/2008 11:55:35 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE MILL
OBJECT MODULE PLACED IN MILL.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE MILL.C DEBUG OBJECTEXTEND PAGEWIDT
                    -H(79) PAGELENGTH(66)

line level    source

   1          #include "math.h"
   2          sbit xyz_enb=0x96;
   3          sbit x_pulse=0x90; //2个坐标进给脉冲,一个脉冲走一步
   4          sbit y_pulse=0x92;
   5          sbit x_dir=0x91;   //2个坐标进给方向控制,=0正走
   6          sbit y_dir=0x93;
   7          //-----------------延时100us函数------------------
   8          void delay(unsigned char time)//延时时间=time*100us
   9           {
  10   1        unsigned i,j;
  11   1        for(i=0;i<time;i++)
  12   1           for(j=0;j<22;j++);
  13   1       }
  14          //----------------x方向走一步---------------------
  15          // dir为方向,0:正方向;1:负方向。每步当量=1/400 mm
  16          // dl为延时时间,100us为单位。
  17          void x_step(bit dir,unsigned char dl)
  18           {
  19   1        dl=dl/2;
  20   1        x_dir=!dir;
  21   1        x_pulse=!x_pulse;   //信号取反
  22   1        delay(dl);
  23   1        x_pulse=!x_pulse;   //信号取反
  24   1        delay(dl);
  25   1       }
  26          //----------------y方向走一步---------------------
  27          // dir为方向,0:正方向;1:负方向. 每步当量=1/400 mm
  28          // dl为延时时间,100us为单位。
  29          void y_step(bit dir,unsigned char dl)
  30           {
  31   1        dl=dl/2;
  32   1        y_dir=!dir;
  33   1        y_pulse=!y_pulse;    //信号取反
  34   1        delay(dl);
  35   1        y_pulse=!y_pulse;    //信号取反
  36   1        delay(dl);
  37   1       }
  38          //----------------- 直线插补子程序 ------------------
  39          // 起点在原点,(Xe,Ye)终点坐标
  40          void line(long Xe,long Ye)
  41          {unsigned char quadrant; //象限值=1,2,3,4。代表4个象限
  42   1       long Fi=0;              //偏差函数
  43   1       long M;                 //计数长度
  44   1      
  45   1       if (Xe>0 && Ye>=0) quadrant=1;      //判断哪个象限直线
  46   1       else if(Xe<=0 && Ye>0) quadrant=2;
  47   1       else if(Xe<0 && Ye<=0) quadrant=3;
  48   1       else quadrant=4;
  49   1      
  50   1       M=labs(Xe)+labs(Ye);     //双向计数
  51   1      
  52   1       do           //插补循环
  53   1         {
  54   2          if(Fi>=0)   //偏差判别
  55   2             {
  56   3              if(quadrant==1 ||quadrant==4) x_step(0,6); //1、4象限,X正
C51 COMPILER V7.20   MILL                         06/13/2008 11:55:35 PAGE 2   

             -方向走一步
  57   3              else x_step(1,6);                          //2、3象限,X负
             -方向走一步
  58   3              Fi=Fi-labs(Ye);
  59   3             }
  60   2          else       //偏差判别
  61   2             {
  62   3              if(quadrant==1 ||quadrant==2) y_step(0,6); //1、4象限,Y正
             -方向走一步
  63   3              else y_step(1,6);                          //2、3象限,y负
             -方向走一步
  64   3              Fi=Fi+labs(Xe);
  65   3             }
  66   2         }
  67   1       while(M-->0);//终点判断
  68   1      }
  69          //------------------ 圆弧插补子程序 -------------------
  70          // (X0,Y0)起点坐标;(Xe,Ye)终点坐标;圆心在原点
  71          //  N: 顺圆逆圆标志,N=1顺圆; N=0.逆圆
  72          //  Xf,Yf: 动点(xi,yi)的符号,=0表示正;=1表示负
  73          //  Ff: 偏差函数符号位,=0表示正;=1表示负
  74          //  Pi: 进给坐标判别位,=0走X;=1走Y
  75          //  deltaXf,deltaYf:两坐标进给方向,=0走正方向,=1走负方向
  76          void circle(bit N,long X0,long Y0,long Xe,long Ye)
  77          {
  78   1       long Fi=0;                //偏差函数
  79   1       long deltaX,deltaY;       //进给量=正负1
  80   1       long Xi=X0,Yi=Y0;         //动点坐标
  81   1       bit Ff,Pi,Xf,Yf,deltaXf,deltaYf;
  82   1      
  83   1      do
  84   1         {
  85   2          if(Fi>=0) Ff=0;       //偏差判别
  86   2          else Ff=1;
  87   2      
  88   2          if(Xi>=0) Xf=0;       //判别动点坐标符号
  89   2          else Xf=1;
  90   2          if(Yi>=0) Yf=0;
  91   2          else Yf=1;
  92   2      
  93   2          Pi=Ff^N^Xf^Yf;        //进给坐标判别位计算
  94   2          deltaXf=(!N)^Yf;      //进给方向判别
  95   2          deltaYf=  N ^Xf;
  96   2      
  97   2          if(Pi==0)             //进给deltaX
  98   2             {
  99   3              if(deltaXf==0) deltaX=1;
 100   3              else deltaX=-1;
 101   3              Fi=Fi+2*Xi*deltaX+1;  //算新的偏差
 102   3              Xi=Xi+deltaX;         //进给控制
 103   3              x_step(deltaXf,6);    //延时600us
 104   3             }
 105   2          else
 106   2             {
 107   3              if(deltaYf==0) deltaY=1;
 108   3              else deltaY=-1;
 109   3              Fi=Fi+2*Yi*deltaY+1;  //算新的偏差
 110   3              Yi=Yi+deltaY;         //进给控制
 111   3              y_step(deltaYf,6);    //延时600us
 112   3             }
 113   2         }
 114   1       while(Xi!=Xe || Yi!=Ye);     //终点判别
 115   1      }
 116          //------------------ 主程序 -------------------------
C51 COMPILER V7.20   MILL                         06/13/2008 11:55:35 PAGE 3   

 117          void main(void)
 118          {
 119   1       xyz_enb=0;
 120   1       circle(1,0,40*400L,0,40*400L);
 121   1       //line(0,80L*400L);
 122   1       line(-38L*400L,-28L*400L);
 123   1       line(15L*400L,-44L*400L);
 124   1       line(46L*400L,0L*400L);
 125   1       line(15L*400L,44L*400L);
 126   1       line(-38L*400L,28L*400L);
 127   1       while(1);
 128   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    938    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      55
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       9
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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