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

📄 pid.lst

📁 本压缩文件主要介绍温度传感芯片的应用
💻 LST
字号:
C51 COMPILER V8.08   PID                                                                   09/11/2007 22:56:15 PAGE 1   


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

line level    source

   1           #include "reg52.h"
   2          //#define unsigned char uchar
   3          //#define signed char schar
   4          #define temp_max 255   //最大输出控制量
   5          unsigned char send_data[2];
   6          unsigned int contrl_data;
   7          float temp_in[]={1,2,3,4,5,6,7,7,6,6,5};//,6,7,6,8,10,15,17,19,24};
   8                                          // 28,33,34,36,37,39,43,46,49,52,55,58,61,64,68,
   9                                          // 71,73,75,76,77,78,78,78,78,77,77,78,79,79,78};
  10          float temp_now;//保存前面时刻的温度值
  11          float temp_before;
  12          float temp_out;//输出控制量(0——255)
  13          
  14          float now_e;       //当前偏差值
  15          float old_e1;     //前面时刻的偏差值
  16          float old_e2; 
  17          //signed char old_e3; 
  18          //signed char old_e4; 
  19          //signed char old_e5; 
  20          float ep;       //比例项
  21          float ed;       //积分项
  22          float ei;       //微分项
  23          float kp;  //比例系数
  24          float kd;   //积分系数
  25          float ki;   //微分系数
  26          //unsigned char kds1=1;   //积分分离系数1,为1表示只累计负偏差,用于避免控制量长期停留在饱和区
  27          //unsigned char kds2=1;   //积分分离系数2,用于
  28          //unsigned char kis=1;   //微分分离系数
  29          
  30          
  31          extern void COM_send(unsigned char SendData);
  32          extern void URAT_init();
  33          
  34          
  35          
  36          void delay()
  37          {  unsigned char i,j,q;
  38   1          for(q=0;q<1;q++)
  39   1              for(i=0;i<255;i++)
  40   1              for(j=0;j<225;j++);
  41   1      }
  42          
  43          void ctrl_init(void)
  44          {
  45   1          temp_now=0;     //保存前面3个时刻的采样值
  46   1          temp_before=0;
  47   1          temp_out=0;  // 
  48   1          
  49   1          now_e=0;     //当前偏移量
  50   1          old_e1=0;     //前面时刻偏移量
  51   1          old_e2=0;
  52   1          kp=1.5;
  53   1          kd=0;
  54   1          ki=0;
  55   1          
C51 COMPILER V8.08   PID                                                                   09/11/2007 22:56:15 PAGE 2   

  56   1      }
  57          
  58          float temperature_ctrl(float temp_in, float temp_to)               //temp_in 当前采样值,temp_to目标温度值
  59          {//函数名:温度模糊PID控制算法
  60   1       //输入:无
  61   1       //输出:无
  62   1               temp_before=temp_now;
  63   1               temp_now=temp_in;
  64   1               old_e1=now_e;
  65   1               old_e2=old_e1;
  66   1               now_e=temp_to-temp_in;    //计算当前偏差,既比例项
  67   1               ep=now_e;
  68   1               ed=now_e+old_e1+old_e2;
  69   1               ei=now_e-old_e1;       //计算微分项; 
  70   1      
  71   1               
  72   1      /*       if(temp_out>=temp_max)  //
  73   1          {
  74   1            if(now_e<=0)
  75   1             kds1=1;
  76   1            else 
  77   1              kds1=0;          
  78   1          }*/
  79   1       
  80   1      //       if(now_e>=-5&&now_e<=5)  //设置积分分离阀值
  81   1          //  kds2=1;
  82   1      //      else
  83   1        //            kds2=0;
  84   1      
  85   1              temp_out=kp*ep+kd*ed+ki*ei;
  86   1              return temp_out;
  87   1              //return 18.93;
  88   1      }
  89          
  90          unsigned char i;  
  91          void main()
  92          {
  93   1              ctrl_init();
  94   1              UART_init();
*** WARNING C206 IN LINE 94 OF PID.C: 'UART_init': missing function-prototype
  95   1        
  96   1                      for(i=0;i<=30;i++)
  97   1                      {
  98   2                              contrl_data=temperature_ctrl(temp_in[i],6)*100;
  99   2                              //contrl_data=1234;
 100   2                              send_data[0]=contrl_data/100;
 101   2                              send_data[1]=contrl_data%100;
 102   2                              
 103   2                              COM_send(send_data[0]);
 104   2                              delay();
 105   2                              COM_send(send_data[1]);
 106   2              //      delay();
 107   2      
 108   2                      }
 109   1                      /*      for(temp_in=0;temp_in<=200;temp_in++)
 110   1                              {
 111   1                              contrl_data=temperature_ctrl(200);
 112   1                              COM_send(contrl_data);
 113   1                      delay();
 114   1                              }*/
 115   1      
 116   1      }
C51 COMPILER V8.08   PID                                                                   09/11/2007 22:56:15 PAGE 3   

 117          
 118          
 119          
 120          
 121          
 122          
 123          
 124          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    448    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     97       8
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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