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

📄 switch2.lst

📁 单片机的电机控制
💻 LST
字号:
C51 COMPILER V7.50   SWITCH2                                                               08/08/2007 10:17:14 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE SWITCH2
OBJECT MODULE PLACED IN switch2.OBJ
COMPILER INVOKED BY: C:\Program Files\keil\C51\BIN\C51.EXE switch2.c DEBUG OBJECTEXTEND

line level    source

   1          #include <reg52.h>    /* 电机当前速度值 */
   2          #include <math.h>
   3          #define uchar unsigned char
   4          #define uint unsigned int
   5          sbit en1=P2^4;      /* L298的Enable A */
   6          sbit en2=P2^5;      /* L298的Enable B */
   7          sbit s1=P2^0;       /* L298的Input 1  */
   8          sbit s2=P2^1;       /* L298的Input 2  */
   9          sbit s3=P2^2;       /* L298的Input 3  */
  10          sbit s4=P2^3;       /* L298的Input 4  */
  11          sbit sensor1=P2^6;  //传感器一的输入
  12          sbit sensor2=P2^7;  //传感器二的输入
  13          sbit sensors=P3^2;
  14          sbit ch1=P0^0;
  15          sbit ch2=P0^1;
  16          sbit ch3=P0^2;
  17          
  18          
  19          
  20          char m1=0,m2=0;
  21          char n1=0,n2=0;
  22          uchar t=0,t1=0;
  23          char choose=0;
  24          char a=0,b=0,c=0;
  25          
  26          void method1();
  27          void method2();
  28          void method3();
  29          void motor(uchar index, char speed)
  30          {
  31   1        if(index==1)       /* 电机1的处理    */
  32   1          {
  33   2           en1=1;
  34   2           s2=0; 
  35   2           m1=speed;
  36   2          }
  37   1        if(index==2)       /* 电机2的处理    */
  38   1          {
  39   2           en2=1;
  40   2           s4=0;
  41   2           m2=speed;  /* 电机2的速度控制 */
  42   2          }
  43   1      }
  44          
  45          
  46          void delayz(uint j)      /* 简易延时函数 */
  47          {
  48   1       for(j;j>0;j--);
  49   1      }
  50          
  51          void stop(void)
  52          {
  53   1             ET1=0;
  54   1             TR1=0;
  55   1             en1=en2=1;
C51 COMPILER V7.50   SWITCH2                                                               08/08/2007 10:17:14 PAGE 2   

  56   1             s1=s3=0;
  57   1             s2=s4=0;                //实现快速停止
  58   1             delayz(5000);
  59   1             ET1=1;
  60   1             TR1=1;
  61   1      }
  62          
  63          void motorz(uchar index, char speed)
  64          {
  65   1           if(index==1)       /* 电机1的处理    */
  66   1             {
  67   2              en1=1; 
  68   2              n1=speed;
  69   2                      if(speed<0)
  70   2                              s1=0;
  71   2                      else
  72   2                              s2=0;
  73   2                 }
  74   1           if(index==2)       /* 电机2的处理    */
  75   1             {
  76   2              en2=1;
  77   2              n2=speed;  /* 电机2的速度控制 */
  78   2                      if(speed<0)
  79   2                              s3=0;
  80   2                      else
  81   2                              s4=0;
  82   2             }
  83   1      
  84   1      }
  85          
  86          static void timer0() interrupt 1          /* T0中断服务程序 */
  87          {
  88   1       TR0=0;
  89   1       if(t<abs(m1))
  90   1            s1=1;
  91   1       else s1=0;   /* 产生电机1的PWM信号 */
  92   1       if(t<abs(m2))
  93   1            s3=1;
  94   1       else s3=0;   /* 产生电机2的PWM信号 */
  95   1       t++;
  96   1       if(t>=60) t=0;          /* 1个PWM信号由20次中断产生 */
  97   1       TR0=1;
  98   1      }
  99          static void timer1() interrupt 3          /* T1中断服务程序 */
 100          {
 101   1         TR1=0;
 102   1       if(n1>0) 
 103   1         { 
 104   2                 if(t1<abs(n1))
 105   2                        s1=1;
 106   2             else s1=0;   /* 产生电机1的PWM信号 */
 107   2         }
 108   1       else
 109   1         {
 110   2               if(t1<abs(n1))
 111   2                        s2=1;
 112   2             else s2=0;   /* 产生电机1的PWM信号 */
 113   2         }
 114   1       if(n2>0) 
 115   1         {
 116   2                 if(t1<abs(n2))
 117   2                         s3=1;
C51 COMPILER V7.50   SWITCH2                                                               08/08/2007 10:17:14 PAGE 3   

 118   2                 else s3=0;   /* 产生电机2的PWM信号 */
 119   2         }
 120   1       else
 121   1         {
 122   2               if(t1<abs(n2))
 123   2                        s4=1;
 124   2             else s4=0;   /* 产生电机2的PWM信号 */
 125   2         } 
 126   1       t1++;
 127   1       if(t1>=60) t1=0;      /* 1个PWM信号由20次中断产生 */
 128   1       TR1=1;
 129   1      }
 130          
 131          void xunxian()
 132          {
 133   1       TR0=1;                 /* 启动定时器0         */
 134   1       while(1)               /* 电机实际控制演示    */
 135   1       {
 136   2         motor(1,60);
 137   2         motor(2,59);
 138   2       }
 139   1      }
 140          static void xint0_isr(void) interrupt 0
 141          {
 142   1        if(choose==0) 
 143   1           method1(); 
 144   1        if(choose==1)
 145   1           method2();
 146   1        if(choose==2)
 147   1           method3();
 148   1         s1=1;
 149   1         s3=1;
 150   1      }
 151          void main(void)
 152          {
 153   1         ch1=0;
 154   1         ch2=0;
 155   1         ch3=0;
 156   1       EA=0;                    //设置系统不接受任何中断
 157   1       TMOD=0x22;             /* 设定T0的工作模式为2 */
 158   1       TH0=0xC8;              /* 装入定时器的初值    */
 159   1       TL0=0xC8; 
 160   1       IT0=0;                    //设置下降延触发
 161   1       EX0=1;                    //设置接受INT0的中断 
 162   1       ET0=1;                 /* 定时器0允许中断     */
 163   1       TH1=0xC8;              /* 装入定时器的初值    */
 164   1       TL1=0xC8;
 165   1       PT1=1;
 166   1       ET1=1;
 167   1       EA=1;
 168   1        if(ch1==1)
 169   1          a=1;
 170   1        if(ch2==1)
 171   1          b=1;
 172   1        if(ch3==1)
 173   1          c=1;
 174   1        choose=c*4+b*2+a;
 175   1       xunxian();
 176   1      }
 177          
 178          
 179          void method1()
C51 COMPILER V7.50   SWITCH2                                                               08/08/2007 10:17:14 PAGE 4   

 180          {
 181   1         static uchar j=0;
 182   1         j++;
 183   1         if(j==2||j==5||j==11||j==14||j==16||j==20)
 184   1           {
 185   2              stop();
 186   2              if(j==2)
 187   2               {
 188   3               motorz(1,36);
 189   3               motorz(2,-32);
 190   3               delayz(280);
 191   3               stop();//右转45
 192   3               motorz(1,60);
 193   3               motorz(2,59);
 194   3               delayz(1600);
 195   3               stop();
 196   3               motorz(1,36);
 197   3               motorz(2,-32);
 198   3               delayz(530);
 199   3               stop();
 200   3               motorz(1,60);
 201   3               motorz(2,59);
 202   3               delayz(700);
 203   3               stop();
 204   3               motorz(1,-34);
 205   3               motorz(2,36);
 206   3               delayz(340);
 207   3               stop();
 208   3               motorz(1,60);
 209   3               motorz(2,59);
 210   3               delayz(200);
 211   3               }
 212   2               if(j==5)
 213   2               {
 214   3                   motorz(1,-40);
 215   3                   motorz(2,-31);
 216   3                   delayz(1200);
 217   3                   stop();
 218   3                   motorz(1,37);
 219   3                   motorz(2,-37);
 220   3                   delayz(430);//右转
 221   3                   stop();
 222   3                   motorz(1,40);
 223   3                   motorz(2,40);
 224   3                   delayz(250);
 225   3                   j=10; 
 226   3               }
 227   2              if(j==11||j==14||j==16)
 228   2                 {
 229   3                   motorz(1,37);
 230   3                   motorz(2,-37);
 231   3                   delayz(490);//右转
 232   3                   stop();
 233   3                   motorz(1,40);
 234   3                   motorz(2,40);
 235   3                   delayz(180); 
 236   3                 }
 237   2              if(j==20)
 238   2                {
 239   3                   motorz(1,-40);
 240   3                   motorz(2,-31);
 241   3                   delayz(1200);
C51 COMPILER V7.50   SWITCH2                                                               08/08/2007 10:17:14 PAGE 5   

 242   3                   stop();
 243   3                   while(1)
 244   3                  {
 245   4                   stop();
 246   4                   ET1=0;
 247   4                   TR1=0;
 248   4                  }
 249   3                }  
 250   2                   
 251   2           }
 252   1         else
 253   1         {
 254   2         ET1=1;
 255   2         TR1=1;
 256   2         motorz(1,60);
 257   2         motorz(2,59);
 258   2         delayz(500);
 259   2         }  
 260   1         ET1=0; 
 261   1         TR1=0; 
 262   1         s2=0;
 263   1         s4=0;
 264   1      }
 265          
 266          void method2()
 267          {
 268   1      
 269   1         static uchar j=0;
 270   1         j++;
 271   1         if(j==2||j==7)
 272   1           {
 273   2             stop();
 274   2              if(j==2)
 275   2               {
 276   3                      motorz(1,37);
 277   3                      motorz(2,-37);
 278   3                      delayz(510);
 279   3                      stop();
 280   3                      motorz(1,60);
 281   3                      motorz(2,59);
 282   3                      delayz(180);
 283   3                }
 284   2               if(j==7)
 285   2                 {
 286   3                  motorz(1,-37);
 287   3                  motorz(2,37);
 288   3                  delayz(340);
 289   3                  stop();
 290   3                  motorz(1,60);
 291   3                  motorz(2,59);
 292   3                  delayz(750);
 293   3                  stop();
 294   3                  motorz(1,36);
 295   3                  motorz(2,-32);
 296   3                  delayz(260);
 297   3                  stop();
 298   3                  motorz(1,60);
 299   3                  motorz(2,59);
 300   3                  delayz(180);
 301   3                 }
 302   2               if(j==7)
 303   2                {
C51 COMPILER V7.50   SWITCH2                                                               08/08/2007 10:17:14 PAGE 6   

 304   3                  motorz(1,-40);
 305   3                  motorz(2,-31);
 306   3                  delayz(1200);
 307   3                  while(1)
 308   3                  {
 309   4                   stop();
 310   4                   ET1=0;
 311   4                   TR1=0;
 312   4                  }
 313   3                }
 314   2           }
 315   1         else
 316   1         {
 317   2         ET1=1;
 318   2         TR1=1;
 319   2         motorz(1,m1);
 320   2         motorz(2,m2);
 321   2         delayz(500);
 322   2         }  
 323   1         ET1=0; 
 324   1         TR1=0; 
 325   1      }
 326          
 327          void method3()
 328          {
 329   1         static uchar j=0;
 330   1         j++;
 331   1         if(j==3||j==9)
 332   1           {
 333   2             stop();
 334   2              if(j==3)
 335   2               {
 336   3                      motorz(1,37);
 337   3                      motorz(2,-37);
 338   3                      delayz(510);
 339   3                      stop();
 340   3                      motorz(1,60);
 341   3                      motorz(2,59);
 342   3                      delayz(200);
 343   3                }
 344   2               if(j==9)
 345   2                 {
 346   3                  motorz(1,-40);
 347   3                  motorz(2,-31);
 348   3                  delayz(1200);
 349   3                  while(1)
 350   3                  {
 351   4                  stop();
 352   4                  ET1=0;
 353   4                  TR1=0;
 354   4                  }
 355   3                 }
 356   2           }
 357   1         else
 358   1         {
 359   2         ET1=1;
 360   2         TR1=1;
 361   2         motorz(1,m1);
 362   2         motorz(2,m2);
 363   2         delayz(500);
 364   2         }  
 365   1         ET1=0; 
C51 COMPILER V7.50   SWITCH2                                                               08/08/2007 10:17:14 PAGE 7   

 366   1         TR1=0; 
 367   1      }


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


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

⌨️ 快捷键说明

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