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

📄 fuzzy_pid.lst

📁 针对被控对象存在的大惯性、纯滞后的特点,采用了模糊控制方式的控制策略,设计了一种高精度温度控制算法
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.06   FUZZY_PID                                                             01/17/2007 13:01:08 PAGE 5   

 240          {
 241   1              uint i;
 242   1              bit b;
 243   1              ddata =0;
 244   1              i++;
 245   1              ddata=1;
 246   1              i++;
 247   1              i++;
 248   1      
 249   1              b=ddata;
 250   1              i=8;
 251   1              while(i>0)
 252   1                      {
 253   2                              i--;
 254   2                      }
 255   1              return(b);
 256   1      }
 257          /**************************************************************************************************
 258                                                                                                          读取一个字节
 259          
 260          ***************************************************************************************************/
 261          uchar RdByte(void)
 262          {
 263   1              uchar i,j,b;
 264   1              b=0;
 265   1              for(i=1;i<=8;i++)
 266   1                      {
 267   2                              j=RdBit();
 268   2                              b=(j<<7)|(b>>1);
 269   2                      }
 270   1              return(b);
 271   1      }
 272          /***************************************************************************************************
 273                                                                                                  写数据的一个字节
 274          
 275          ***************************************************************************************************/
 276          void WrByte(uchar b)
 277          {
 278   1              uint i;
 279   1              uchar j;
 280   1              bit btmp;
 281   1              for(j=1;j<=8;j++)
 282   1                      {
 283   2                              btmp=b&0x01;
 284   2                              b=b>>1;
 285   2                              if(btmp)
 286   2                                      {
 287   3                                              ddata=0;
 288   3                                              i++;
 289   3                                              i++;
 290   3                                              ddata=1;
 291   3                                              i=8;
 292   3                                              while(i>0)
 293   3                                                      {
 294   4                                                              i--;
 295   4                                                      }
 296   3                                              }
 297   2                                 else
 298   2                                      {
 299   3                                              ddata=0;
 300   3                                              i=8;
 301   3                                              while(i>0)
C51 COMPILER V7.06   FUZZY_PID                                                             01/17/2007 13:01:08 PAGE 6   

 302   3                                                      {
 303   4                                                              i--;
 304   4                                                      }
 305   3                                              ddata=1;
 306   3                                              i++;
 307   3                                              i++;
 308   3                                      }
 309   2                              }
 310   1      }
 311          /**************************************************************************************************
 312                                                                                                          启动温度转换
 313          
 314          ***************************************************************************************************/
 315          void convert(void)
 316          {
 317   1              TxReset();
 318   1              RxWait();
 319   1              delay(1);
 320   1              WrByte(0xcc);
 321   1              WrByte(0x44);
 322   1      }
 323          /***************************************************************************************************
 324                                                                                                          读取温度
 325          读取温度数据 
 326          ***************************************************************************************************/
 327          void RdTemp(void)
 328          {
 329   1              uchar tlsb,thsb;                                //存储温度数据,tlsb存低位,thsb存高位  
 330   1      
 331   1              convert();                                              //开启温度转换 
 332   1      
 333   1              TxReset();
 334   1              RxWait();
 335   1              delay(1);
 336   1              WrByte(0xcc);
 337   1              WrByte(0xbe);
 338   1              tlsb=RdByte();
 339   1              thsb=RdByte();
 340   1      
 341   1              Temp[2]=ttable[(tlsb&0x0f)];                       //得到二进制小数位,在查表得到要显示的小数(保留小数点后一位)
 342   1      
 343   1              Temp[4]=((tlsb&0x0f0)>>4)|((thsb&0x0f)<<4);   //得到整数位  
 344   1              Temp[0]=Temp[4]/10;                                                     //得到十位数
 345   1              Temp[1]=Temp[4]%10;                                                     //得到个位
 346   1      
 347   1              if(Temp[4]>Temp_max)                                            //达到上限温度报警 
 348   1                      LED1=0;
 349   1              else
 350   1                      LED1=1;
 351   1      }               
 352          /***************************************************************************************************
 353                                                                                                  查表求行向量 Ec  
 354          说明:每个采样周期查表返回行值   
 355          ***************************************************************************************************/
 356          uchar table_Ec(void)
 357          {
 358   1              uchar row;
 359   1              
 360   1              uchar Ec;
 361   1              uchar Ec1;
 362   1              uchar Ec2;
 363   1              uchar Ec3;
C51 COMPILER V7.06   FUZZY_PID                                                             01/17/2007 13:01:08 PAGE 7   

 364   1      
 365   1              bit flag;
 366   1      
 367   1              Ec1=para[4];
 368   1              Ec2=2*para[4];
 369   1              Ec3=3*para[4];
 370   1      
 371   1              if(Temp[6]>=Temp[5])
 372   1                      {
 373   2                              flag=0;
 374   2                              Ec=Temp[6]-Temp[5];
 375   2                      }
 376   1              else
 377   1                      {
 378   2                              flag=1;
 379   2                              Ec=Temp[5]-Temp[6];
 380   2                      }
 381   1              if(Ec>=Ec3)
 382   1                      {
 383   2                              if(flag)
 384   2                                      row=0;
 385   2                              else
 386   2                                      row=6;
 387   2                      }
 388   1              else if(Ec>=Ec2&&Ec<=Ec3)
 389   1                      {
 390   2                              if(flag)
 391   2                                      row=1;
 392   2                              else
 393   2                                      row=5;
 394   2                      }
 395   1              else if(Ec>=Ec1&&Ec<=Ec2)
 396   1                      {
 397   2                              if(flag)
 398   2                                      row=2;
 399   2                              else
 400   2                                      row=4;
 401   2                      }
 402   1              else
 403   1                      {
 404   2                                      row=3;
 405   2                      }
 406   1      return(row);
 407   1      }
 408          /***************************************************************************************************
 409                                                                                                                                  查表求列向量 E 
 410          说明:每个采样周期查一次表返回列值  
 411          ***************************************************************************************************/
 412          uchar table_E(void)
 413          {
 414   1              uchar column;
 415   1              
 416   1              uchar E1;
 417   1              uchar E2;
 418   1              uchar E3;
 419   1              uchar E;
 420   1      
 421   1              uchar flag;
 422   1      
 423   1              E1=para[1]/2;
 424   1              E2=para[1]+E1;
 425   1              E3=2*para[1]+E1;
C51 COMPILER V7.06   FUZZY_PID                                                             01/17/2007 13:01:08 PAGE 8   

 426   1      
 427   1              if(para[3]>=Temp[4])
 428   1                      {
 429   2                              flag=1;
 430   2                              E=para[3]-Temp[4];
 431   2                      }
 432   1              else
 433   1                      {
 434   2                              flag=0;
 435   2                              E=Temp[4]-para[3];
 436   2                      }
 437   1              if(E>=E3)
 438   1                      {
 439   2                              if(flag)
 440   2                                      column=0;
 441   2                              else
 442   2                                      column=6;
 443   2                      }
 444   1              else if(E>=E2&&E<=E3)
 445   1                      {
 446   2                              if(flag)
 447   2                                      column=1;
 448   2                              else
 449   2                                      column=5;
 450   2                      }
 451   1              else if(E>=E1&&E<=E2)
 452   1                      {
 453   2                              if(flag)
 454   2                                      column=2;
 455   2                              else
 456   2                                      column=4;
 457   2                      }
 458   1              else
 459   1                      {
 460   2                                      column=3;
 461   2                      }
 462   1      return(column);
 463   1      }
 464          /***************************************************************************************************
 465                                                                                          加子程序 
 466          ***************************************************************************************************/
 467          void Add_para(void)
 468          {
 469   1                      para[parameter]++;              
 470   1      }
 471          /***************************************************************************************************
 472                                                                                            减子程序 
 473          ***************************************************************************************************/
 474          void delect_para(void)
 475          {
 476   1              para[parameter]--;
 477   1              if(para[parameter]<0)
 478   1                      para[parameter]=0;
 479   1      }
 480          /***************************************************************************************************
 481                                                                                                  参数选择子程序 
 482          ***************************************************************************************************/
 483          void select_para(void)
 484          {
 485   1              parameter++;
 486   1              if(parameter>4)
 487   1                      parameter=0;

⌨️ 快捷键说明

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