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

📄 main.lst

📁 书中详细说明了多路数据采集的方法,以及怎么样用AD来采集数据哟,大家不妨看看嘛,说不定有所帮助哟?
💻 LST
📖 第 1 页 / 共 2 页
字号:
 257   6                              {
 258   7                                                          Verify_ET=3;
 259   7                                                          lcd_init();
 260   7                                  send_hz(1,1,"和校验错误");
 261   7                                  send_asc16str(0,32,"->");
 262   7                                  send_hz(1,2,"请检查从机设备");
 263   7                                  exit_sign=1;
 264   7                                                      }
 265   6                                              }
 266   5                      }
 267   4                      else //命令码错误
 268   4                                  {
 269   5                                          REN0=1;//重新允许接收
 270   5                                      UART0_TX(anew_TX,3);//请求从机重新发送上一次数据
 271   5                          Verify_ET++;
 272   5                                              if(Verify_ET==3)
 273   5                          {
 274   6                                                       Verify_ET=0;
 275   6                                                       lcd_init();
 276   6                               send_hz(1,1,"命令码错误");
 277   6                               send_asc16str(0,32,"->");
 278   6                               send_hz(1,2,"请检查从机设备");
 279   6                               exit_sign=1;
 280   6                                          }
 281   5                      }
 282   4                   }
 283   3                       }        
 284   2               }                     
 285   1      }
 286          
 287          
 288          //循环采集模式处理函数
 289          void CYC_Disp(void)
 290          {
 291   1          bit exit_sign=0; //数据处理结束标志
 292   1          unsigned char TX_time=0;//数据重发次数计数
 293   1          unsigned char Verify_data=0;//接收和检验值
 294   1              unsigned char Verify_ET=0; //和校验错误发生次数
 295   1              unsigned char anew_TX[3]={0x01,0x00,0x00};//要求从机重发指令数组
 296   1              unsigned char send_Num=0; //条码显示计数
 297   1              unsigned char delay_num=0; //超时计数
 298   1          bit RX_sign=0;//接收数据是否为第一次数据标志
 299   1              unsigned int i;//定时控制变量
 300   1          unsigned char CYC_pass=0;
 301   1          lcd_init();
 302   1              send_asc16str(2,0,"->");
 303   1          send_hz(2,0,"循环采集");
C51 COMPILER V7.50   MAIN                                                                  03/17/2007 15:33:28 PAGE 6   

 304   1          send_hz(0,1,"系统处理中请稍后");
 305   1          TX[0]=0x01; //从机地址
 306   1              TX[1]=0x01; //数据采集命令字
 307   1          TX[2]=0x02; //数据长度
 308   1          TX[3]=0x00;//采集通道值
 309   1              TX[4]=0x00;//和检验
 310   1              UART0_TX(TX,5);                                 
 311   1          while(exit_sign==0)
 312   1          {        
 313   2                       for(i=65535;i>0;i--);
 314   2                       if(ReceiveBit==0)
 315   2               {
 316   3                   UART0_TX(TX,5);
 317   3               }         
 318   2                       if(RX_sign==0)
 319   2                       {
 320   3                           send_asc16str(send_Num,32,">");//动态显示系统处理状态">>>>>>>>>>>>>>>>"
 321   3                               send_Num++;
 322   3                               if(send_Num==15)
 323   3                               {
 324   4                                   send_Num=0;
 325   4                                   send_asc16str(0,32,"                ");
 326   4                           delay_num++;
 327   4                                       if(delay_num==3)
 328   4                                       {
 329   5                                           delay_num=0;
 330   5                               lcd_init();
 331   5                               send_hz(2,1,"通讯超时");
 332   5                               send_asc16str(0,32,"->");
 333   5                               send_hz(1,2,"请检查通信网络");
 334   5                               exit_sign=1;
 335   5                                       }
 336   4                       }
 337   3                   }
 338   2               if(ReceiveBit==1) //接收到一帧数据
 339   2               {
 340   3                   ReceiveBit=0; //清除接收完成标志
 341   3                   if(RX[1]==0)  //从机要求重发数据
 342   3                   {
 343   4                                   REN0=1;//重新允许接收
 344   4                       UART0_TX(TX,5);
 345   4                       TX_time++;
 346   4                       if(TX_time==3)//重发次数超过三次报警
 347   4                       {
 348   5                           TX_time=0;
 349   5                           lcd_init();
 350   5                           send_hz(1,1,"从机通讯错误");
 351   5                           send_asc16str(0,32,"->");
 352   5                           send_hz(1,2,"请检查通讯线路");
 353   5                           exit_sign=1;
 354   5                       }   
 355   4                  }         
 356   3                  else
 357   3                  {
 358   4                      if(RX[1]==1)
 359   4                      {
 360   5                          Verify_data=Sum_verify(RX+3,4);//对接收的数据(一字节通道字节数据)进行和校验
 361   5                          if(Verify_data==RX[7]) //和校验正确,显示采集数值
 362   5                          {
 363   6                                                  if(RX_sign==0)//第一次数据发送
 364   6                                                      {
 365   7                                                          RX_sign=1;
C51 COMPILER V7.50   MAIN                                                                  03/17/2007 15:33:28 PAGE 7   

 366   7                                                          lcd_init();
 367   7                                  send_asc16str(0,0,"1");
 368   7                                  send_asc16str(1,0,":");
 369   7                                  send_asc16str(3,0,".");
 370   7                                  send_asc16str(6,0,"v");
 371   7                                  send_asc16str(9,0,"2");
 372   7                                  send_asc16str(10,0,":");
 373   7                                  send_asc16str(12,0,".");
 374   7                                  send_asc16str(15,0,"v");
 375   7      
 376   7                                  send_asc16str(0,16,"3");
 377   7                                  send_asc16str(1,16,":");
 378   7                                  send_asc16str(3,16,".");
 379   7                                  send_asc16str(6,16,"v");
 380   7                                  send_asc16str(9,16,"4");
 381   7                                  send_asc16str(10,16,":");
 382   7                                  send_asc16str(12,16,".");
 383   7                                  send_asc16str(15,16,"v");
 384   7      
 385   7                                  send_asc16str(0,32,"5");
 386   7                                  send_asc16str(1,32,":");
 387   7                                  send_asc16str(3,32,".");
 388   7                                  send_asc16str(6,32,"v");
 389   7                                  send_asc16str(9,32,"6");
 390   7                                  send_asc16str(10,32,":");
 391   7                                  send_asc16str(12,32,".");
 392   7                                  send_asc16str(15,32,"v");
 393   7      
 394   7                                  send_asc16str(0,48,"7");
 395   7                                  send_asc16str(1,48,":");
 396   7                                  send_asc16str(3,48,".");
 397   7                                  send_asc16str(6,48,"v");
 398   7                                  send_asc16str(9,48,"8");
 399   7                                  send_asc16str(10,48,":");
 400   7                                  send_asc16str(12,48,".");
 401   7                                  send_asc16str(15,48,"v");
 402   7                               }
 403   6      
 404   6                               switch(RX[3])//各通道数据显示
 405   6                                                       {
 406   7                                                          case 0x00:
 407   7                                      send_ascii8(2,7,RX[4]+0x30); 
 408   7                                      send_ascii8(4,7,RX[5]+0x30);
 409   7                                          send_ascii8(5,7,RX[6]+0x30);
 410   7                                                                      break;
 411   7                                                              case 0x01:                                                          
 412   7                                      send_ascii8(11,7,RX[4]+0x30); 
 413   7                                      send_ascii8(13,7,RX[5]+0x30);
 414   7                                          send_ascii8(14,7,RX[6]+0x30);
 415   7                                                                      break;
 416   7                                  case 0x02:
 417   7                                                                  send_ascii8(2,23,RX[4]+0x30); 
 418   7                                      send_ascii8(4,23,RX[5]+0x30);
 419   7                                          send_ascii8(5,23,RX[6]+0x30);
 420   7                                                                      break;
 421   7                                                              case 0x03:                                                          
 422   7                                      send_ascii8(11,23,RX[4]+0x30); 
 423   7                                      send_ascii8(13,23,RX[5]+0x30);
 424   7                                          send_ascii8(14,23,RX[6]+0x30);
 425   7                                                                      break;
 426   7                                  case 0x04:
 427   7                                                                  send_ascii8(2,39,RX[4]+0x30); 
C51 COMPILER V7.50   MAIN                                                                  03/17/2007 15:33:28 PAGE 8   

 428   7                                      send_ascii8(4,39,RX[5]+0x30);
 429   7                                          send_ascii8(5,39,RX[6]+0x30);
 430   7                                                                      break;
 431   7                                                              case 0x05:                                                          
 432   7                                      send_ascii8(11,39,RX[4]+0x30); 
 433   7                                      send_ascii8(13,39,RX[5]+0x30);
 434   7                                          send_ascii8(14,39,RX[6]+0x30);
 435   7                                                                      break;
 436   7                                  case 0x06:
 437   7                                                                  send_ascii8(2,55,RX[4]+0x30); 
 438   7                                      send_ascii8(4,55,RX[5]+0x30);
 439   7                                          send_ascii8(5,55,RX[6]+0x30);
 440   7                                                                      break;
 441   7                                                              case 0x07:                                                          
 442   7                                      send_ascii8(11,55,RX[4]+0x30); 
 443   7                                      send_ascii8(13,55,RX[5]+0x30);
 444   7                                          send_ascii8(14,55,RX[6]+0x30);
 445   7                                                                      break;                                            
 446   7      
 447   7                                                      }
 448   6                              TX[0]=0x01; //从机地址
 449   6                                  TX[1]=0x01; //数据采集命令字
 450   6                              TX[2]=0x02; //数据长度
 451   6                              TX[3]=(++CYC_pass)&&0x07;//采集通道值
 452   6                                  TX[4]=TX[3];//和检验
 453   6                                                      for(i=65535;i>0;i--);
 454   6                                  UART0_TX(TX,5);
 455   6                                                  REN0=1;//重新允许接收
 456   6                                                  if(key_sign==1) //有按键
 457   6                                  exit_sign=1;
 458   6                                              }
 459   5                                      else //和校验错误
 460   5                                              {
 461   6                                                  REN0=1;//重新允许接收
 462   6                                                  UART0_TX(anew_TX,3);//请求从机重新发送上一次数据
 463   6                              Verify_ET++;
 464   6                                                      if(Verify_ET==3)
 465   6                              {
 466   7                                                          Verify_ET=3;
 467   7                                                          lcd_init();
 468   7                                  send_hz(1,1,"和校验错误");
 469   7                                  send_asc16str(0,32,"->");
 470   7                                  send_hz(1,2,"请检查从机设备");
 471   7                                  exit_sign=1;
 472   7                                                      }
 473   6                                              }
 474   5                      }
 475   4                      else //命令码错误
 476   4                                  {
 477   5                                          REN0=1;//重新允许接收
 478   5                                      UART0_TX(anew_TX,3);//请求从机重新发送上一次数据
 479   5                          Verify_ET++;
 480   5                                              if(Verify_ET==3)
 481   5                          {
 482   6                                                       Verify_ET=0;
 483   6                                                       lcd_init();
 484   6                               send_hz(1,1,"命令码错误");
 485   6                               send_asc16str(0,32,"->");
 486   6                               send_hz(1,2,"请检查从机设备");
 487   6                               exit_sign=1;
 488   6                                          }
 489   5                      }
C51 COMPILER V7.50   MAIN                                                                  03/17/2007 15:33:28 PAGE 9   

 490   4                   }
 491   3                       }        
 492   2               }                     
 493   1      }
 494          
 495          //和检验函数
 496          unsigned char Sum_verify(unsigned char verify[],unsigned char ii)
 497          {
 498   1          unsigned char Verify_Sum=0;//和校验值
 499   1              unsigned char i;
 500   1          for(i=0;i<ii;i++)
 501   1              {
 502   2                  Verify_Sum^=verify[i];
 503   2          }
 504   1          return(Verify_Sum);   
 505   1      }
 506          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   2739    ----
   CONSTANT SIZE    =    339    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     22      25
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      5       4
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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