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

📄 motor_main.lst

📁 单片机控制的步进电机 不是很完善 但是能实现基本功能
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.02   MOTOR_MAIN                                                            04/10/2007 13:45:24 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE MOTOR_MAIN
OBJECT MODULE PLACED IN Motor_Main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Motor_Main.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #define uchar   unsigned char
   2          #define uint    unsigned int
   3          #define low_speed       10
   4          #define high_speed      100
   5          #include<reg52.h>
   6          #include<Key_Define.h>
   7          #include<Get_Key_Declare.h>
   8          #include<Lcd_Init_Declare.h>
   9          //#include<Main_Define.h>
  10          uchar    speed=50,step_length=10,thdata,tldata;
  11          #include<Start.h>       
  12          bit             SData_flag=0;
  13          bit             step_permit=0;
  14          bit             direction,sisdf;//set direction flag
  15          bit             stepflag=0;     //步进标志      
  16          bit             run=0;          //全带运行标志
  17          bit             stopflag=0;
  18          uchar   int_cnt;
  19          bit             spdset;
  20          
  21          sbit    AA=     P3^4;
  22          sbit    AB=     P3^5;
  23          sbit    BA=     P3^6;
  24          sbit    BB=     P3^7;
  25          uchar   cnt;
  26          uchar   sicnt=0;                        
  27          //产生脉冲波形
  28          void Timer0(void)interrupt 1 using 1
  29                  {
  30   1                      TL0=(tldata+10);
  31   1                      TH0=thdata;                                             
  32   1                      if(step_permit)         int_cnt++;                                                      
  33   1                      if(direction)           //反转
  34   1                              {
  35   2                                      switch(cnt)
  36   2                                              {
  37   3                                                      case 0:AA=1;AB=1;BA=0;BB=0;     break;
  38   3                                                      case 1:AA=0;AB=1;BA=1;BB=0;     break;
  39   3                                                      case 2:AA=0;AB=0;BA=1;BB=1;     break;
  40   3                                                      case 3:AA=1;AB=0;BA=0;BB=1;     break;
  41   3                                                      default:                break;
  42   3                                              }                       
  43   2                              }
  44   1                      else    {
  45   2                                      switch(cnt)
  46   2                                              {
  47   3                                                      case 0:AA=1;AB=1;BA=0;BB=0;     break;
  48   3                                                      case 1:AA=1;AB=0;BA=0;BB=1;     break;
  49   3                                                      case 2:AA=0;AB=0;BA=1;BB=1;     break;
  50   3                                                      case 3:AA=0;AB=1;BA=1;BB=0;     break;
  51   3                                                      default:                break;
  52   3                                              }                       
  53   2                              }
  54   1                      ++cnt;
  55   1                      if(cnt==4)cnt=0;        
C51 COMPILER V8.02   MOTOR_MAIN                                                            04/10/2007 13:45:24 PAGE 2   

  56   1              }
  57          void SeriCab(void)interrupt 4 using 2
  58                  {
  59   1                      uchar   sda;            
  60   1                      RI=0;                           
  61   1                      sda=SBUF;
  62   1                      if(sda>=64)
  63   1                              {
  64   2                                      if((sda<95)&&(run==0)){step_length=sda*3;stepflag=1;}
  65   2                                      else    if((sda==0x61)&&(SData_flag==1)){run=1;stopflag=0;}
  66   2                                      else    if(sda==0x63){direction=0;sisdf=1;}
  67   2                                      else    if(sda==0x64){direction=1;sisdf=1;}
  68   2                                      else    if((sda==0x62)&&(SData_flag==1)){run=0;stopflag=1;}
  69   2                                      else    if((sda==0x65)&&(SData_flag==1)){step_permit=1;}
  70   2                                                      
  71   2                              }
  72   1                      else            {speed=sda*2;spdset=1;}                                         
  73   1                      ++sicnt;                                
  74   1                      if(sicnt==2){sicnt=0;SData_flag=1;}                     
  75   1              }
  76          
  77          void    ST_Convert(void)//将转速转换为T0常数
  78                  {
  79   1                      uint    tdbuf;
  80   1                      tdbuf=(1000000/speed)/192;              
  81   1                      tdbuf=0xffff-tdbuf;
  82   1                      tldata=(uchar)(tdbuf&0xff);
  83   1                      thdata=(uchar)((tdbuf>>8)&0xff);                
  84   1              }
  85          
  86          bit     Operating(void)                                         //开机初始化程序
  87                  {               uchar   key;
  88   1                              bit             step_flag=0;                    
  89   1                              Show_Null();
  90   1                              key=0;
  91   1                              Show_Sign();                            //显示===========
  92   1                              Show_Speed_Set();                       //显示"请预置转速 "
  93   1                              speed=Get_Speed(speed);         //转速设置子程序                        
  94   1                              Show_Null();
  95   1                              Show_Operation_Model();
  96   1                      while(key!=LEFT&&key!=RIGHT)
  97   1                                      key=GetKey();
  98   1                              Show_Null();            
  99   1                       if(key==RIGHT)                                 //步进
 100   1                              {               
 101   2                                      key=0;
 102   2                                      step_flag=1;                            
 103   2                                      Show_Sign();                    //显示===========
 104   2                                      Show_Step_Length();     //显示"请预置步长: "                                    
 105   2                                      step_length=Get_Step_Length(step_length);       //预置步长                                                                                      
 106   2                              }
 107   1                      return  step_flag;      
 108   1              }
 109          
 110          void    main(void)
 111                  {
 112   1                      uchar   key,stl,stepcnt=0;
 113   1                      IntRst();               
 114   1                      Lcd_SetZ(1);    
 115   1                      Lcd_Off();      
 116   1                      Show_Null();
 117   1                      Show_Sign();    //显示===========
C51 COMPILER V8.02   MOTOR_MAIN                                                            04/10/2007 13:45:24 PAGE 3   

 118   1                      Show_Greet();
 119   1                      Lcd_On();
 120   1                      TMOD=0x21;              //T0工作在方式1,T1工作在方式2自动重装  
 121   1                      TH1=0xF3;               //波特率设置;晶振12MHz;波特率为2400
 122   1                      TL1=0xF3;               
 123   1                      SCON=0X50;              //串行口工作在方式1,八位方式,允许接收
 124   1                      PCON=0;                 //SMOD设置为0
 125   1                      EA=1;
 126   1                      ES=1;                   //串行中断允许
 127   1                      ET0=0;                  //T0中断禁止
 128   1                      TR1=1;
 129   1      
 130   1                      while((key==0)&&(SData_flag==0))
 131   1                                      key=GetKey();           
 132   1                      if(key)stepflag=Operating();

⌨️ 快捷键说明

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