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

📄 metic.lst

📁 开发的一个温控仪完整代码
💻 LST
字号:
C51 COMPILER V7.50   METIC                                                                 09/17/2006 13:21:24 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE METIC
OBJECT MODULE PLACED IN metic.OBJ
COMPILER INVOKED BY: D:\SProgram\Keil\C51\BIN\C51.EXE metic.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include "TempCtrl.h"
   2          uint kf=0;
   3          void SamplingProcess()
   4          {
   5   1      //频率->电阻
   6   1              
   7   1              k1=TpTH0<<8;
   8   1              k1+=TpTL0;//k1:freq
   9   1      //校准处理
  10   1              k2=Read(EP_FF);
  11   1      
  12   1              if((AdmitFlag==2)||((KeySta & 0x06)==0x06))
  13   1              switch(k2)
  14   1              {
  15   2      
  16   2                      case 1000:
  17   2                      case 1001:
  18   2                      case 1002:
  19   2                      case 1003:
  20   2                      case 1004:
  21   2                      case 1005:
  22   2                      case 1006:
  23   2                      case 1007:
  24   2                              AdmitFlag=3;
  25   2                              break;
  26   2                      case 1://显示电阻大小
  27   2                              AdmitFlag=4;
  28   2                              break;
  29   2      
  30   2                      default:
  31   2                              ;
  32   2              }
  33   1      
  34   1              if((AdmitFlag==2))
  35   1              {
  36   2                      Led(k1);
  37   2                      LedBuf[0]=LedCode[C_F];
  38   2              }
  39   1              if((AdmitFlag==3))
  40   1              {
  41   2                      Led(k1);
  42   2                      LedBuf[0]=LedCode[C_H];
  43   2              }
  44   1      
  45   1      //频率-->电阻
  46   1              //k1=TpTH0<<8;
  47   1              //k1+=TpTL0;//k1:freq
  48   1      
  49   1      //      kf+=500;
  50   1      //      k1=kf;
  51   1      
  52   1              for(i=0;i<5;i++)//(6-1)次即可
  53   1                      if(k1>Fr[i])
  54   1                              break;
  55   1              if(i<5) //x1=(Rx-100)*100
C51 COMPILER V7.50   METIC                                                                 09/17/2006 13:21:24 PAGE 2   

  56   1              {
  57   2                      x2=(float)(k1-Fr[i]);
  58   2                      x2=3000*x2;
  59   2                      x3=(float)(Fr[i+1]-Fr[i]);
  60   2                      x2=x2/x3;
  61   2                      x1=3000*i+x2;//3000*i+(k1-Fr[i])*3000/(Fr[i+1]-Fr[i]); //100*
  62   2              }
  63   1              else
  64   1              {
  65   2                      x2=(float)(k1-Fr[i]);
  66   2                      x2=3000*x2;
  67   2                      x3=(float)(Fr[5]-Fr[4]);
  68   2                      x2=x2/x3;
  69   2                      x1=15000+x2;//15000+(k1-Fr[5])*3000/(Fr[5]-Fr[4]);//
  70   2              }
  71   1      
  72   1              x1+=0.5;
  73   1              k0=(unsigned int)x1;
  74   1      
  75   1      ///{{
  76   1      //      Led(k0);
  77   1      ///     LedBuf[5]+=128;
  78   1      //      LedBuf[0]=LedCode[C_r];
  79   1      ///}}
  80   1      
  81   1              if(AdmitFlag==4)
  82   1              {
  83   2                      k3=k0+10000;
  84   2                      Led(k3);//Rx=x1+100
  85   2                      LedBuf[5]+=128;
  86   2                      LedBuf[0]=LedCode[C_r];
  87   2              }
  88   1      //电阻->频率
  89   1              k3=80;//k1:low,k2:mid,k3:hig
  90   1              k1=0;
  91   1              while(k3-k1>1)
  92   1              {
  93   2                      k2=(k1+k3)>>1;
  94   2                      if(k0<Pt100_R2T[k2])
  95   2                              k3=k2;
  96   2                      else
  97   2                      {
  98   3                              k1=k2;
  99   3                              if(k0==Pt100_R2T[k2])
 100   3                                      break;
 101   3                      }
 102   2              }
 103   1              //k1为所在表中的温度位置
 104   1              if(k1<79)
 105   1                      Temperature=50*k1+(k0-Pt100_R2T[k1])*50/(Pt100_R2T[k1+1]-Pt100_R2T[k1]);
 106   1              else
 107   1                      Temperature=50*79+(k0-Pt100_R2T[79])*50/(Pt100_R2T[79]-Pt100_R2T[78]);
 108   1      
 109   1      
 110   1              if(AdmitFlag==1)
 111   1              {
 112   2                      LedH(Temperature);
 113   2                      DPA();
 114   2                      LedL(Setted_Temperature);
 115   2                      DPB();
 116   2              }
 117   1      
C51 COMPILER V7.50   METIC                                                                 09/17/2006 13:21:24 PAGE 3   

 118   1              k0=Read(EP_SH);
 119   1              k1=Read(EP_SL);
 120   1              if((Temperature>k0)||(Temperature<k1))
 121   1              {
 122   2                      ALM_ON();
 123   2                      ALM_OUT=0;//警报接通
 124   2              }
 125   1              else
 126   1              {
 127   2                      ALM_OFF();
 128   2                      ALM_OUT=1;//警报停止
 129   2              }
 130   1      
 131   1      ///控制算法
 132   1      //      PreError=LastError;     
 133   1      //      LastError=Error;
 134   1              Error=Setted_Temperature-Temperature;
 135   1              //dError=Error-LastError;
 136   1      
 137   1              //PidOutput=Kp*
 138   1              //PidOutput范围-100~0~+100,每次趋于0
 139   1              if(MeterSta!=STA_MAN)
 140   1              {
 141   2                      //delta U(k)=Ae(k)-Be(k-1)+Ce(k-2)
 142   2                      //k1=Kp,k2=
 143   2                      if(Error>10 || Error<-10)//偏差大于1度时动作
 144   2                      {
 145   3      /*                      k1=Read(EP_P);//Kp
 146   3              
 147   3                              x1=Read(EP_I);
 148   3                              k2=x1/10.0;//Ti
 149   3                              x1=Read(EP_d);
 150   3                              k3=x1/10.0;//Td
 151   3              
 152   3                              x2=(float)k2;
 153   3                              x2=1.0/x2;
 154   3                              x1=1+x2+k3;//Kp(1+T/Ti+Td/T);//A
 155   3                              x1=x1*Error;
 156   3              
 157   3                              x2=-1-2.0*k3;//Kp(1+2*Td/T)//B
 158   3                              x2=x2*LastError;
 159   3                                      
 160   3                              x3=k3;  //Kp*Td/T//C
 161   3                              x3=x3*PreError;
 162   3              
 163   3                              x1=x1+x2+x3;
 164   3                              x1=x1*k1/1000.0;                
 165   3      */      
 166   3                              //Output=x1;
 167   3                      }
 168   2              //      else if()//用这种形式分段
 169   2              //      {
 170   2      
 171   2              //      }
 172   2                      Output=Error;
 173   2                      if(Output>0)
 174   2                      {
 175   3                              PosOutput();
 176   3                      }
 177   2                      else if(Output<0)
 178   2                      {
 179   3                              PosOutput()
C51 COMPILER V7.50   METIC                                                                 09/17/2006 13:21:24 PAGE 4   

 180   3                      }
 181   2                      else
 182   2                      {
 183   3                              OffOutput();
 184   3                      }
 185   2              }
 186   1      }


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