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

📄 feedback.lst

📁 电机PID调速程序
💻 LST
字号:
C51 COMPILER V7.06   FEEDBACK                                                              11/14/2008 21:02:37 PAGE 1   


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

stmt level    source

   1          #include <ADUC842.H>
   2          #include <math.h>
   3          #include "feedback.h"
   4          #include "lcd.h"
   5          
   6          sbit  FB_DIR_L = P1^6;                          //用于反馈电机转向,根据需要调整 MOTOR_FEEDBACK()鉴向函数
   7          sbit  FB_DIR_R = P1^7;                          //顺时针时 FB_DIR_L = 1
   8          
   9          
  10          //反馈参数定义
  11          int fb_V_L;                                                     //反馈当前速度
  12          int fb_V_R;
  13          
  14          long xdata rea_all_num_l;
  15          long xdata rea_all_num_r;
  16          
  17          /*****************************************延时函数************************************************/
  18          //输入值为延时模式mode和延时长度time,无返回值
  19          //调用函数:无
  20          
  21          void DELAY(unsigned char mode,unsigned char time)
  22          {
  23   1              unsigned int m,n;
  24   1              unsigned char k;
  25   1              switch(mode)                                                            //mode为延时模式,time为延时长度        
  26   1              {
  27   2                      case 0:                                                         //2.68毫秒,此时对应电机速度100--1.2m/s
  28   2                      {
  29   3                                      for(k=0;k<time;k++)
  30   3                                      for(m=0;m<2;m++)
  31   3                                      for(n=0;n<2450;n++);
  32   3                      }break;
  33   2      
  34   2                      case 1:                                                                 //一秒
  35   2                      {       
  36   3                                      for(k=0;k<time;k++)
  37   3                                      for(m=0;m<400;m++)
  38   3                                      for(n=0;n<4000;n++);
  39   3      
  40   3                      }break;
  41   2      
  42   2                      case 2:                                                                 //一分钟
  43   2                      {
  44   3                                      for(k=0;k<time;k++)
  45   3                                      for(m=0;m<24000;m++)
  46   3                                      for(n=0;n<4000;n++);
  47   3                      }break;
  48   2      
  49   2                      default:                                                                 //其他
  50   2                      break;
  51   2              } 
  52   1      }
  53          
  54          
  55          /*******************************速度反馈*********************************/
C51 COMPILER V7.06   FEEDBACK                                                              11/14/2008 21:02:37 PAGE 2   

  56          //反馈捕获函数
  57          //获得反馈速度和反馈电流
  58          
  59          void GET_FEEDBACK()
  60          {
  61   1          int speed_num_l=0;                                          //用于获得当前速度
  62   1              int speed_num_r=0;
  63   1      
  64   1              TL0 = 0;
  65   1              TH0 = 0;
  66   1              TL1 = 0;
  67   1              TH1 = 0;
  68   1              TR0 = 1;                                                            //计数器接通工作
  69   1              TR1 = 1;
  70   1          
  71   1              DELAY(0,1);                                                        //the sampling cycle根据所选电机实际测得,
  72   1              
  73   1              speed_num_l    = ((int)TH0<<8)+TL0;        //可以加上个防止溢出的中断程序                                  
  74   1              speed_num_r    = ((int)TH1<<8)+TL1;
  75   1      
  76   1              
  77   1          TR0 = 0;                                                        //关闭计数器
  78   1              TR1 = 0;
  79   1      
  80   1      /***********************位置控制**************************/
  81   1                      TR0 = 1;
  82   1        
  83   1             if(FB_DIR_L)                     //鉴向
  84   1                    {
  85   2                          rea_all_num_l -= (((int)TH0<<8)+TL0);
  86   2                }                                                                                                                                      
  87   1                 else
  88   1                    {
  89   2                          rea_all_num_l += (((int)TH0<<8)+TL0);                       //可以加上个防止溢出的中断程序  
  90   2                }
  91   1       
  92   1                 TR1 = 1;
  93   1                         
  94   1             if(FB_DIR_R)
  95   1                   {
  96   2                 rea_all_num_r += (((int)TH1<<8)+TL1);                                
  97   2                   }
  98   1                 else
  99   1                   {
 100   2                         rea_all_num_r -= (((int)TH1<<8)+TL1);                
 101   2                   }       
 102   1      
 103   1          TL0 = 0;
 104   1              TH0 = 0;
 105   1              TL1 = 0;
 106   1              TH1 = 0;
 107   1              //---------------check the direction-------------------------------------------------
 108   1          if(FB_DIR_L)                        //鉴向
 109   1              {
 110   2                      speed_num_l = 0 - speed_num_l;
 111   2              }                                                                                                                                        
 112   1              else
 113   1              {
 114   2                      speed_num_l = speed_num_l;      
 115   2              }
 116   1              
 117   1              if(FB_DIR_R)
C51 COMPILER V7.06   FEEDBACK                                                              11/14/2008 21:02:37 PAGE 3   

 118   1              {
 119   2              speed_num_r = speed_num_r;                              
 120   2              }
 121   1              else
 122   1              {
 123   2                      speed_num_r = 0 - speed_num_r;          
 124   2              }
 125   1      
 126   1              fb_V_L   =      speed_num_l;
 127   1              fb_V_R   =  speed_num_r;
 128   1      }


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