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

📄 main.lst

📁 用Keil C51写的步进电机驱动程序。
💻 LST
字号:
C51 COMPILER V7.06   MAIN                                                                  10/13/2004 11:05:16 PAGE 1   


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

stmt level    source

   1          #include <reg51.h>
   2          #define XTAL 22118400
   3          #define baudrate 9600
   4          #define INLEN 6
   5          #define LAMPSPEED 20    //控制CPU灯闪速度,每秒5次
   6          
   7          sbit cpulamp=P3^7;              //CPU灯控制
   8          bit newnum;                             //有新的数据标识
   9          char is_aa;
  10          
  11          bit key;                                //调试用***
  12          char lamp_speed;
  13          char inbuf[INLEN];
  14          char getbuf[INLEN];
  15          char buf_sit;
  16          char Timer_num;
  17          int angel_gd;
  18          int angel_fw;
  19          int angel_gd_get;
  20          int angel_fw_get;
  21          
  22          /*串口接收程序*/
  23          static void comm_get (void) interrupt 4 using 1 
  24          {
  25   1              char i;
  26   1              char get_buf;
  27   1              get_buf=SBUF;
  28   1              RI=0;
  29   1              TI=0;
  30   1              if(inbuf[0]==is_aa)
  31   1              {
  32   2                      inbuf[buf_sit]=get_buf;
  33   2                      buf_sit++;
  34   2                      if(buf_sit>=6)
  35   2                      {
  36   3                              for(i=0;i<INLEN;i++)getbuf[i]=inbuf[i];
  37   3                              buf_sit=0;
  38   3                              inbuf[0]=0;
  39   3                              newnum=1;
  40   3                      }
  41   2              }
  42   1              else
  43   1              {
  44   2                      if(get_buf==is_aa) 
  45   2                      {
  46   3                              inbuf[0]=is_aa;
  47   3                              buf_sit++;
  48   3                      }
  49   2              }
  50   1      }
  51          
  52          /*初始化串行口*/
  53          void ini_comm (void)
  54          {
  55   1              buf_sit=0;
C51 COMPILER V7.06   MAIN                                                                  10/13/2004 11:05:16 PAGE 2   

  56   1              newnum=0;
  57   1              is_aa=0xAA;
  58   1      
  59   1              PCON|=0x80;
  60   1              TMOD|=0x20;
  61   1              TH1=(unsigned char)(256-(XTAL/(16L*12L*baudrate)));
  62   1              TR1=1;
  63   1              SCON=0x50;
  64   1              ES=1;
  65   1      }
  66          
  67          
  68          /* 初始化定时器0*/
  69          void ini_time(void)
  70          {
  71   1              cpulamp=1;
  72   1              TMOD&=0xF0;
  73   1              TMOD|=0x01;
  74   1              TH0=0xB7;
  75   1              TL0=0xFd;
  76   1              ET0=1;
  77   1              TR0=1;
  78   1              Timer_num=0;
  79   1              lamp_speed=LAMPSPEED;
  80   1      }
  81          
  82          /*10ms定时器中断程序*/
  83          time0() interrupt 1 using 2
  84          {
  85   1              if(Timer_num>=lamp_speed)    //lamp_speed控制指示灯闪速
  86   1              {
  87   2                      cpulamp=!cpulamp;
  88   2                      Timer_num=0;
  89   2              }
  90   1              Timer_num++;
  91   1              TH0=0xB7;
  92   1              TL0=0xFD;
  93   1      }
  94          
  95          /****调试用外部中断****/
  96          void ex0_int() interrupt 0 using 3
  97          {
  98   1              if(key==0)
  99   1              {
 100   2                      angel_gd=30;
 101   2                      angel_fw=30;
 102   2              }
 103   1              else
 104   1              {
 105   2                      angel_gd=-30;
 106   2                      angel_fw=-30;   
 107   2              }
 108   1              key=!key;
 109   1      }
 110          
 111          
 112          /*主程序*/
 113          main()
 114          {
 115   1              char temp;
 116   1              char i;
 117   1              unsigned char p1_img;
C51 COMPILER V7.06   MAIN                                                                  10/13/2004 11:05:16 PAGE 3   

 118   1              EA=1;
 119   1                              /*调试用程序*/
 120   1                              EX0=1;
 121   1              angel_gd=0;
 122   1              angel_fw=0;
 123   1              angel_gd_get=0;
 124   1              angel_fw_get=0;
 125   1              ini_time();
 126   1              ini_comm();
 127   1              p1_img=0x20;
 128   1              P1=p1_img;                                                      //给电机解锁,初始化
 129   1              do
 130   1              {
 131   2                      if(newnum)                                              //如果有新的接收数据
 132   2                      {
 133   3                              newnum=0;
 134   3                              temp=0;
 135   3                              for(i=0;i<INLEN-1;i++)          //求校验和
 136   3                              {
 137   4                                      temp+=getbuf[i];
 138   4                              }
 139   3                              if(temp==getbuf[INLEN-1])       //如果校验正确,取出高低方位角
 140   3                              {
 141   4                                      lamp_speed=2;                   //加快灯闪速度
 142   4                                      angel_gd_get=getbuf[1];
 143   4                                      angel_gd_get=angel_gd_get<<8;
 144   4                                      angel_gd_get=angel_gd_get+getbuf[2];
 145   4                                      angel_fw_get=getbuf[3];
 146   4                                      angel_fw_get=angel_fw_get<<8;
 147   4                                      angel_fw_get=angel_fw_get+getbuf[4];
 148   4                                      if(angel_gd_get<0);
 149   4                                      {
 150   5                                              angel_gd_get&=0x7f;
 151   5                                              angel_gd_get=~angel_gd_get;
 152   5                                              angel_gd_get++;
 153   5                                      }
 154   4                                      if(angel_fw_get<0)
 155   4                                      {
 156   5                                              angel_fw_get&=0x7f;
 157   5                                              angel_fw_get=~angel_fw_get;
 158   5                                              angel_fw_get++;
 159   5                                      }
 160   4                                      angel_gd_get*=6;
 161   4                                      angel_fw_get*=6;
 162   4                                      angel_gd+=angel_gd_get;
 163   4                                      angel_fw+=angel_fw_get;
 164   4                              }
 165   3                      }
 166   2                      if(angel_gd!=0||angel_fw!=0)    //驱动电机
 167   2                      {
 168   3                              p1_img&=0xde;                           //打开电机开关;两电机同时打开
 169   3                              P1=p1_img;
 170   3                              if(angel_gd>0)
 171   3                              {
 172   4                                      p1_img|=0x06;
 173   4                                      angel_gd--;
 174   4                              }
 175   3                              if(angel_gd<0)
 176   3                              {
 177   4                                      p1_img&=0xfd;
 178   4                                      p1_img|=0x04;
 179   4                                      angel_gd++;
C51 COMPILER V7.06   MAIN                                                                  10/13/2004 11:05:16 PAGE 4   

 180   4                              }
 181   3                              if(angel_fw>0)
 182   3                              {
 183   4                                      p1_img|=0x18;
 184   4                                      angel_fw--;
 185   4                              }
 186   3                              if(angel_fw<0)
 187   3                              {
 188   4                                      p1_img&=0xef;
 189   4                                      p1_img|=0x08;
 190   4                                      angel_gd++;
 191   4                              }
 192   3                              P1=p1_img;
 193   3                              for(i=0;i<77;i++)                       //延时,大约0.25ms;每一循环用时1.6275μs2个机器周期
 194   3                              {;}
 195   3                              for(i=0;i<77;i++)               
 196   3                              {;}
 197   3                              p1_img&=0xf3;
 198   3                              P1=p1_img;
 199   3                              for(i=0;i<93;i++)                       //延时,大约0.15ms
 200   3                              {;}
 201   3                              p1_img&=0x21;
 202   3                              P1=p1_img;                                      //关电机
 203   3                      }
 204   2                      else
 205   2                      {
 206   3                              lamp_speed=LAMPSPEED;
 207   3                      }
 208   2              }while(1);
 209   1              
 210   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    583    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     24    ----
   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 + -