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

📄 main.lst

📁 该程序是用单片机C51语言编写的关于步进电机控制的程序
💻 LST
字号:
C51 COMPILER V7.06   MAIN                                                                  06/25/2007 11:30:50 PAGE 1   


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

stmt level    source

   1          
   2          #include<Waking_machine.h>         
   3          #include<math.h> 
   4          
   5          extern void initial(void);
   6          extern FuncRotate(bit BClockWise,uint step,int *PRegAngle);
   7          extern void send(uchar *temp,uint j);
   8          extern void delay(uint k);
   9          
  10          uint  delaycount = 20;
  11          char  XPulse=0, YPulse =0;      //记录上一个100ms中X.Y方向的脉冲值
  12          char  XPulseTemp=0,YPulseTemp=0; //累加计数脉冲值
  13          
  14           uchar  rcvdata=0;
  15          uchar debugtime=0;
  16          uchar workmode=2;
  17          
  18          bit EvRcv=FAULT;                //接收中断(串口)标志位   
  19          bit EvTimer=FAULT;                    //定时时间满标志位
  20          
  21          void main(void)
  22          {
  23   1         int RegAngle=0,RegNewAngle=0,temp=0;
  24   1         int Xtmp=0,Ytmp=0;
  25   1         int *Angle;
  26   1         Angle=&RegAngle;
  27   1      
  28   1         initial();             //初始化
  29   1      
  30   1      
  31   1         CP=VALID;           //步进脉冲信号输出有效,低电平有效
  32   1         LampNormally=FAULT;        //工作状态正常指示灯
  33   1         PinRotIndicator=FAULT;   //为1转动操作正在进行 ,转动指示灯
  34   1         LampDebug=FAULT;         //调试控制指示灯
  35   1         LampError=FAULT;         //致命错误指示灯
  36   1         LampFlood=FAULT;          //溢出指示灯
  37   1         LampComm=FAULT;          //通信指示灯   
  38   1      
  39   1         OPTO=VALID;             //总控制端
  40   1         OutFree=VALID;              //脱机电平信号输出端
  41   1      
  42   1         delay(2);
  43   1      
  44   1         while(1)
  45   1         {
  46   2           while(InFree==VALID)
  47   2               {
  48   3                  TR0=0;             //关定时器0
  49   3              OutFree=INVALID;    
  50   3              while(ClockWiseRot==VALID)    //按钮控制顺时针转动
  51   3                      {
  52   4                         OutFree=VALID; 
  53   4                         FuncRotate(ConstClockWise,1,Angle);
  54   4                         delay(500);
  55   4                       }
C51 COMPILER V7.06   MAIN                                                                  06/25/2007 11:30:50 PAGE 2   

  56   3                  while(AntiClockRot==VALID)
  57   3                   {
  58   4                  OutFree=VALID; 
  59   4                         FuncRotate(ConstAntiClock,1,Angle);
  60   4                         delay(500);
  61   4                       }
  62   3                TR0=1; 
  63   3                        EvTimer=FAULT;  
  64   3                }
  65   2      
  66   2                        OutFree=VALID; 
  67   2               if(EvRcv)
  68   2                {
  69   3                       delaycount=rcvdata&0x1f;
  70   3                   workmode=(rcvdata&0xe0)/32;
  71   3                       EvRcv=FAULT;
  72   3                 }
  73   2      
  74   2                 if(EvTimer)
  75   2                 {
  76   3                    ++debugtime;
  77   3                        if(debugtime==5)
  78   3                        {
  79   4                          LampNormally=TRUE;
  80   4                        }
  81   3                        else if(debugtime==10)
  82   3                        {
  83   4                           LampNormally=FAULT;
  84   4                   debugtime=0;
  85   4                         }
  86   3                 
  87   3                       RegNewAngle=XPulse*XPulse+ YPulse*YPulse ;
  88   3               RegNewAngle=(uint)sqrt((float)RegNewAngle);
  89   3      
  90   3                       temp=RegNewAngle-RegAngle;
  91   3                       if( temp>HALFMAXSTEPS)
  92   3                       {
  93   4                         temp=temp-HALFMAXSTEPS;
  94   4                       }
  95   3                       else if(temp<-HALFMAXSTEPS)
  96   3                       {
  97   4                         temp=temp+HALFMAXSTEPS;
  98   4                       }
  99   3                       if(temp>0)
 100   3                       {
 101   4                         FuncRotate(ConstAntiClock,temp,Angle);
 102   4                       }
 103   3                if(temp<0)
 104   3                       {
 105   4                         FuncRotate(ConstAntiClock,-temp,Angle);
 106   4                       }
 107   3                  
 108   3               if(workmode==1)
 109   3               {
 110   4                 send((uchar*)&RegAngle,2);
 111   4                 }
 112   3                else if (workmode==2)
 113   3               {
 114   4                 send((uchar*)&RegAngle,2);
 115   4                 send((uchar*)&XPulse,4);
 116   4                 send((uchar*)&YPulse,4);
 117   4                 }
C51 COMPILER V7.06   MAIN                                                                  06/25/2007 11:30:50 PAGE 3   

 118   3      
 119   3         EvTimer=FAULT;
 120   3         }
 121   2         }
 122   1      }
 123          
 124          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    433    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      9      13
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      2    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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