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

📄 auto.lst

📁 我的一个工程
💻 LST
📖 第 1 页 / 共 2 页
字号:
 188              for (j=0;j<N-1;j++)
 189              {
 190                 for (i=0;i<N-j;i++)
 191                 {
 192                    if ( value_buf[i]>value_buf[i+1] )
 193                    {
 194                       temp = value_buf[i];
 195                       value_buf[i] = value_buf[i+1];
 196                        value_buf[i+1] = temp;
 197                    }
 198                 }
 199              }
 200              for(count=1;count<N-1;count++)
 201                 sum += value[count];
 202              return (char)(sum/(N-2));
 203          } */
 204          
 205          /*6、限幅平均滤波法
 206               A、方法:
 207                   相当于“限幅滤波法”+“递推平均滤波法”
 208                   每次采样到的新数据先进行限幅处理,
 209                   再送入队列进行递推平均滤波处理
 210               B、优点:
 211                   融合了两种滤波法的优点
 212                   对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差
 213               C、缺点:比较浪费RAM
 214          7、一阶滞后滤波法
 215               A、方法:
 216                   取a=0~1
 217                   本次滤波结果=(1-a)*本次采样值+a*上次滤波结果
 218               B、优点:
 219                   对周期性干扰具有良好的抑制作用
 220                   适用于波动频率较高的场合
 221               C、缺点:
 222                   相位滞后,灵敏度低
 223                   滞后程度取决于a值大小
 224                   不能消除滤波频率高于采样频率的1/2的干扰信号
 225                   7、一阶滞后滤波法
 226          /* 为加快程序处理速度假定基数为100,a=0~100 */
 227          /*#define a 50
 228          char value;
 229          char filter()
 230          {
 231              char   new_value;
 232              new_value = get_ad();
 233              return (100-a)*value + a*new_value;
 234          } */
 235          /*
 236          8、加权递推平均滤波法
 237               A、方法:
 238                   是对递推平均滤波法的改进,即不同时刻的数据加以不同的权
 239                   通常是,越接近现时刻的数据,权取得越大。
 240                   给予新采样值的权系数越大,则灵敏度越高,但信号平滑度越低
 241               B、优点:
C51 COMPILER V7.06   AUTO                                                                  07/20/2008 16:34:55 PAGE 5   

 242                   适用于有较大纯滞后时间常数的对象
 243                   和采样周期较短的系统
 244               C、缺点:
 245                   对于纯滞后时间常数较小,采样周期较长,变化缓慢的信号
 246                   不能迅速反应系统当前所受干扰的严重程度,滤波效果差
 247                   8、加权递推平均滤波法
 248          /* coe数组为加权系数表,存在程序存储区。*/
 249          /*#define N 12
 250          char code coe[N] = {1,2,3,4,5,6,7,8,9,10,11,12};
 251          char code sum_coe = 1+2+3+4+5+6+7+8+9+10+11+12;
 252          
 253          char filter()
 254          {
 255              char count;
 256              char value_buf[N];
 257              int   sum=0;
 258              for (count=0,count<N;count++)
 259              {
 260                 value_buf[count] = get_ad();
 261                 delay();
 262              }
 263              for (count=0,count<N;count++)
 264                 sum += value_buf[count]*coe[count];
 265              return (char)(sum/sum_coe);
 266          } */
 267          /*9、消抖滤波法
 268               A、方法:
 269                   设置一个滤波计数器
 270                   将每次采样值与当前有效值比较:
 271                   如果采样值=当前有效值,则计数器清零
 272                   如果采样值<>当前有效值,则计数器+1,并判断计数器是否>=上限N(溢出)
 273                   如果计数器溢出,则将本次值替换当前有效值,并清计数器
 274               B、优点:
 275                   对于变化缓慢的被测参数有较好的滤波效果,
 276                   可避免在临界值附近控制器的反复开/关跳动或显示器上数值抖动
 277               C、缺点:
 278                   对于快速变化的参数不宜
 279                   如果在计数器溢出的那一次采样到的值恰好是干扰值,则会将干扰值当作有效值导入系统
 280                   9、消抖滤波法
 281          #define N 12
 282          char filter()
 283          {
 284              char count=0;
 285              char new_value;
 286              new_value = get_ad();
 287              while (value !=new_value);
 288              {
 289                 count++;
 290                 if (count>=N)    return new_value;
 291                  delay();
 292                 new_value = get_ad();
 293              }
 294              return value;
 295          }
 296          */
 297          /*10、限幅消抖滤波法
 298               A、方法:
 299                   相当于“限幅滤波法”+“消抖滤波法”
 300                   先限幅,后消抖
 301               B、优点:
 302                   继承了“限幅”和“消抖”的优点
 303                   改进了“消抖滤波法”中的某些缺陷,避免将干扰值导入系统
C51 COMPILER V7.06   AUTO                                                                  07/20/2008 16:34:55 PAGE 6   

 304               C、缺点:对于快速变化的参数不宜
 305          
 306          假定从8位AD中读取数据(如果是更高位的AD可定义数据类型为int),子程序为get_ad();
 307          
 308          */
 309          
 310           float process_t()      /*测量温度求解函数,已知R,VREF*/
 311          {
 312   1      data float vac,vab,Rt,R,T;
 313   1          vac=filter(0);
 314   1      vab=filter(3);    /*A/D转换获得VAB和VAC*/
 315   1      R=(vab+vac)*0.0326999;
 316   1      /*计算出热电阻当前值*/
 317   1            //rt=lubo(rt1); /*滑动加权滤波*/
 318   1            //rt= rt1;
 319   1        T=(R-100)*2.54;
 320   1      //首先按照400度量程线性估计当前温度
 321   1             do
 322   1      //采用试差法循环计算,刚才估计的t做初始值
 323   1              {
 324   2              if(R<100) //摄氏零度以下处理
 325   2                {
 326   3                  Rt=100+T*(0.396847-0.00005847*T-0.000000000422351*(T-100)*T*T);
 327   3      
 328   3                }
 329   2              else //摄氏零度以上处理
 330   2                {
 331   3                  Rt=100+T*(0.396847-0.00005847*T);
 332   3                }
 333   2              T=T+(R-Rt)*2.54;
 334   2              }
 335   1            while(((R-Rt)>0.0004)||(Rt-R)>0.0004);      //计算余差最终小于0.005欧
 336   1              return(T*100)  ;       //试差结束,返回浮点数温度值
 337   1      }
 338          
 339          float AD590(void )
 340              {float vac,T ;
 341   1          vac=filter(1);
 342   1          T=vac-2732;
 343   1           return(T*10);
 344   1      
 345   1          }
 346          
 347          
C51 COMPILER V7.06   AUTO                                                                  07/20/2008 16:34:55 PAGE 7   

NAME                                    CLASS   MSPACE  TYPE    OFFSET  SIZE
====                                    =====   ======  ====    ======  ====


AD590. . . . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  vac. . . . . . . . . . . . . . . . .  AUTO     DATA   FLOAT    0000H  4
  T. . . . . . . . . . . . . . . . . .  AUTO     DATA   FLOAT    0004H  4
_AD_Conver . . . . . . . . . . . . . .  EXTERN   CODE   PROC     -----  -----
value_buf. . . . . . . . . . . . . . .  PUBLIC   DATA   ARRAY    0000H  8
process_t. . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  vac. . . . . . . . . . . . . . . . .  AUTO     DATA   FLOAT    0000H  4
  vab. . . . . . . . . . . . . . . . .  AUTO     DATA   FLOAT    0004H  4
  Rt . . . . . . . . . . . . . . . . .  AUTO     DATA   FLOAT    0008H  4
  R. . . . . . . . . . . . . . . . . .  AUTO     DATA   FLOAT    000CH  4
  T. . . . . . . . . . . . . . . . . .  AUTO     DATA   FLOAT    0010H  4
i. . . . . . . . . . . . . . . . . . .  PUBLIC   DATA   U_CHAR   0008H  1
_filter. . . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  port . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0003H  1
  sum. . . . . . . . . . . . . . . . .  AUTO     DATA   FLOAT    0000H  4
  count. . . . . . . . . . . . . . . .  AUTO     DATA   U_CHAR   0004H  1


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