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

📄 motor2.lst

📁 单片机的电机控制
💻 LST
字号:
C51 COMPILER V6.12  MOTOR2                                                                 05/03/2007 16:20:04 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE MOTOR2
OBJECT MODULE PLACED IN .\motor2.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE .\motor2.c DEBUG OBJECTEXTEND

stmt level    source

   1          /* =======直流电机的PWM速度控制程序======== */ 
   2          /* 纬东工作室 robots51.51.net 2006年6月 */ 
   3          /* 晶振采用11.0592M,产生的PWM的频率约为91Hz */ 
   4          
   5          #include<reg51.h> 
   6          #include<math.h> 
   7          #define uchar unsigned char 
   8          #define uint unsigned int 
   9          sbit en1=P2^4; /* L298的Enable A */ 
  10          sbit en2=P2^5; /* L298的Enable B */ 
  11          sbit s1=P2^0; /* L298的Input 1 */ 
  12          sbit s2=P2^1; /* L298的Input 2 */ 
  13          sbit s3=P2^2; /* L298的Input 3 */ 
  14          sbit s4=P2^3; /* L298的Input 4 */ 
  15          uchar t=0; /* 中断计数器 */ 
  16          uchar m1=0; /* 电机1速度值 */ 
  17          uchar m2=0; /* 电机2速度值 */ 
  18          uchar tmp1,tmp2; /* 电机当前速度值 */ 
  19          
  20          /* 电机控制函数 index-电机号(1,2); speed-电机速度(-100—100) */ 
  21          void motor(uchar index, char speed) 
  22          { 
  23   1      if(speed>=-100 && speed<=100) 
  24   1      { 
  25   2      if(index==1) /* 电机1的处理 */ 
  26   2      { 
  27   3      m1=abs(speed); /* 取速度的绝对值 */ 
  28   3      if(speed<0) /* 速度值为负则反转 */ 
  29   3      { 
  30   4      s1=0; 
  31   4      s2=1; 
  32   4      } 
  33   3      else /* 不为负数则正转 */ 
  34   3      { 
  35   4      s1=1; 
  36   4      s2=0; 
  37   4      } 
  38   3      } 
  39   2      if(index==2) /* 电机2的处理 */ 
  40   2      { 
  41   3      m2=abs(speed); /* 电机2的速度控制 */ 
  42   3      if(speed<0) /* 电机2的方向控制 */ 
  43   3      { 
  44   4      s3=0; 
  45   4      s4=1; 
  46   4      } 
  47   3      else 
  48   3      { 
  49   4      s3=1; 
  50   4      s4=0; 
  51   4      } 
  52   3      } 
  53   2      } 
  54   1      } 
  55          
C51 COMPILER V6.12  MOTOR2                                                                 05/03/2007 16:20:04 PAGE 2   

  56          void delay(uint j) /* 简易延时函数 */ 
  57          { 
  58   1      for(j;j>0;j--); 
  59   1      } 
  60          
  61          void main() 
  62          { 
  63   1      uchar i; 
  64   1      TMOD=0x02; /* 设定T0的工作模式为2 */ 
  65   1      TH0=0x9B; /* 装入定时器的初值 */ 
  66   1      TL0=0x9B; 
  67   1      EA=1; /* 开中断 */ 
  68   1      ET0=1; /* 定时器0允许中断 */ 
  69   1      TR0=1; /* 启动定时器0 */ 
  70   1      while(1) /* 电机实际控制演示 */ 
  71   1      { 
  72   2      for(i=0;i<=100;i++) /* 正转加速 */ 
  73   2      { 
  74   3      motor(1,i); 
  75   3      motor(2,i); 
  76   3      delay(5000); 
  77   3      } 
  78   2      for(i=100;i>0;i--) /* 正转减速 */ 
  79   2      { 
  80   3      motor(1,i); 
  81   3      motor(2,i); 
  82   3      delay(5000); 
  83   3      } 
  84   2      } 
  85   1      } 
  86          
  87          
  88          void timer0() interrupt 1 /* T0中断服务程序 */ 
  89          { 
  90   1      if(t==0) /* 1个PWM周期完成后才会接受新数值 */ 
  91   1      { 
  92   2      tmp1=m1; 
  93   2      tmp2=m2; 
  94   2      } 
  95   1      if(t<tmp1) en1=1; else en1=0; /* 产生电机1的PWM信号 */ 
  96   1      if(t<tmp2) en2=1; else en2=0; /* 产生电机2的PWM信号 */ 
  97   1      t++; 
  98   1      if(t>=100) t=0; /* 1个PWM信号由100次中断产生 */ 
  99   1      } 


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