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

📄 modbus.lst

📁 8051F_Modbus.rar是在C8051F020单片机上编写的CRC16校验的MODBUS协议.
💻 LST
📖 第 1 页 / 共 4 页
字号:
 280   4                            P7=p7pas;
 281   4                            P6=p6pas;
 282   4      
 283   4                            RX0_Ready=0;
 284   4                            break;
 285   4                       case 0XF4:        //关闭编号为1--16的12伏控制开关,遇0不变,遇1变1 
 286   4                            p7pan=RX0_Buf[3]; 
 287   4                                                p7pas=~((~p7pas)|p7pan);
 288   4                            P7=p7pas;
 289   4      
 290   4                            p6pan=RX0_Buf[2]; 
 291   4                                                p6pas=~((~p6pas)|p6pan);
 292   4                            P6=p6pas;
 293   4      
 294   4                            RX0_Ready=0;                      
 295   4                            break;
 296   4                       case 0XF5:                             //设置传感器的起始地址和终止地址
 297   4                            waddr[0]=RX0_Buf[2];              //高在前               
 298   4                                                waddr[1]=RX0_Buf[3];
 299   4                            FlashWrite(0x0000,waddr);
 300   4                            RX0_Ready=0;
 301   4                                            break;
C51 COMPILER V7.50   MODBUS                                                                02/26/2006 22:47:28 PAGE 6   

 302   4                       case 0XF6:                            //打开编号为17--20的12伏控制开关 
 303   4                            p5pan=RX0_Buf[3];
 304   4                                                p5pas=p5pas|p5pan;
 305   4                            
 306   4                                                P5=p5pas;
 307   4      
 308   4                            RX0_Ready=0;
 309   4                            break;
 310   4                       case 0XF7:        //关闭编号为17--20的12伏控制开关
 311   4                            
 312   4                            p5pan=RX0_Buf[3]; 
 313   4                                                p5pas=~((~p5pas)|p5pan);
 314   4                            P5=p5pas;
 315   4      
 316   4                            RX0_Ready=0;
 317   4                            break;
 318   4                       case 0XF8:        //打开编号为21--36的12伏控制开关
 319   4                            RX0_Ready=0;
 320   4                            break;
 321   4                       case 0XF9:        //关闭编号为21--36的12伏控制开关  
 322   4                            RX0_Ready=0;
 323   4                            break;
 324   4                      case 0XFA:        //打开编号为37--40的12伏控制开关  
 325   4                           RX0_Ready=0;
 326   4                           break;
 327   4                      case 0XFB:        //关闭编号为37--40的12伏控制开关
 328   4                           RX0_Ready=0;
 329   4                           break;
 330   4                      case 0XFC:        //远程遥控集中器复位命令*/ 
 331   4                                           RSTSRC |=0X10; 
 332   4                           RX0_Ready=0;
 333   4                           break;
 334   4                                  case 0XFD:       //读两输入开关量
 335   4                           P4=0XFF;
 336   4                                               onoff=P4;
 337   4                                           RX0_Ready=0;
 338   4                           break;
 339   4                                      case 0XFE:               //读地址范围
 340   4                                           FlashRead(0x0000,raddr);
 341   4                                               SendCgqAddr();
 342   4                                       RX0_Ready=0;
 343   4                           break;
 344   4                      case 0XD0:               //防盗1
 345   4                                           RX0_Ready=0;
 346   4                                               break;
 347   4                      case 0XD1:                 //防盗2
 348   4                                               RX0_Ready=0;
 349   4                                               break;
 350   4                      case 0XD2:                //设置继电器互锁时间
 351   4                                           temp2=*(PRX0+1);
 352   4                                               RX0_Ready=0;
 353   4                                               break;
 354   4                      case 0XD3:                 //1-16个继电器前关后开指令
 355   4                                                                
 356   4                                                p7pan=RX0_Buf[3]; 
 357   4      
 358   4                                                firstoff1_8=p7pan;
 359   4      
 360   4                                                p7pas=~((~p7pas)|p7pan);
 361   4                            P7=p7pas;
 362   4      
 363   4                            p6pan=RX0_Buf[2]; 
C51 COMPILER V7.50   MODBUS                                                                02/26/2006 22:47:28 PAGE 7   

 364   4      
 365   4                                                firstoff9_16=p6pan;
 366   4      
 367   4                                                p6pas=~((~p6pas)|p6pan);
 368   4                            P6=p6pas;
 369   4                           
 370   4      
 371   4                                               qkhg1_16=1;
 372   4      
 373   4                                               TR2=1;
 374   4                                               
 375   4                                               RX0_Ready=0;
 376   4                                               
 377   4                                               break;
 378   4                      case 0XD4:                 //1-16后关前开指令
 379   4                                              
 380   4                                               p7pan=RX0_Buf[3]; 
 381   4      
 382   4                                               firstoff1_8=p7pan;
 383   4      
 384   4                                               p7pas=~((~p7pas)|p7pan);
 385   4                           P7=p7pas;
 386   4      
 387   4                           p6pan=RX0_Buf[2]; 
 388   4      
 389   4                                               firstoff9_16=p6pan;
 390   4      
 391   4                                               p6pas=~((~p6pas)|p6pan);
 392   4                           P6=p6pas;
 393   4      
 394   4                                               hkqg1_16=1;
 395   4                                               
 396   4                                               TR2=1;
 397   4                                               
 398   4                                               RX0_Ready=0;
 399   4                                               break;
 400   4                       case 0XD5:                //16-20前关后开指令
 401   4                                          
 402   4                               p5pan=RX0_Buf[3];
 403   4      
 404   4                                               firstoff17_20=p5pan;
 405   4                                                
 406   4                                               p5pas=~((~p5pas)|p5pan);
 407   4                           P5=p5pas;
 408   4      
 409   4                           qkhg17_20=1;
 410   4      
 411   4                           TR2=1;
 412   4                           RX0_Ready=0;
 413   4                                               break;
 414   4                      case 0XD6:                 //16-20后关前开指令
 415   4                                                                      
 416   4                           p5pan=RX0_Buf[3];
 417   4                                               firstoff17_20=p5pan;
 418   4                                               p5pas=~((~p5pas)|p5pan);
 419   4                           P5=p5pas;
 420   4      
 421   4      
 422   4                           hkqg17_20=1;
 423   4      
 424   4                           TR2=1;
 425   4                                               
C51 COMPILER V7.50   MODBUS                                                                02/26/2006 22:47:28 PAGE 8   

 426   4                                               
 427   4                                               RX0_Ready=0;
 428   4                                               break;
 429   4                    default:          
 430   4                          RX0_Ready=0;
 431   4                                 
 432   4                }
 433   3                 
 434   3                RX0_BufClear(); 
 435   3            }
 436   2      //---------------------------------------------------------------------------------------
 437   2                if(sendinterva2)
 438   2                 {
 439   3                sendinterva2=0;
 440   3                        if(qkhg1_16)
 441   3                        {
 442   4                          p7pas=firstoff1_8;
 443   4                  p6pas=firstoff9_16;
 444   4      
 445   4                  p7pas=p7pas<<1;
 446   4                  p6pas=p6pas<<1;
 447   4      
 448   4                  P7=p7pas;
 449   4                  P6=p6pas;
 450   4      
 451   4                              qkhg1_16=0;
 452   4                        }
 453   3                       if(hkqg1_16)
 454   3                       {
 455   4                  p7pas=firstoff1_8;
 456   4                  p6pas=firstoff9_16;            
 457   4      
 458   4                              p7pas=p7pas>>1;
 459   4                  p6pas=p6pas>>1;
 460   4      
 461   4                  P7=p7pas;
 462   4                  P6=p6pas;
 463   4                              
 464   4                              hkqg1_16=0;
 465   4                       }
 466   3      
 467   3               if(qkhg17_20)
 468   3                       {
 469   4                   p5pas=firstoff17_20;
 470   4      
 471   4                               p5pas=p5pas<<1;
 472   4                   P5=p5pas;
 473   4                           qkhg17_20=0;
 474   4                       }
 475   3               if(hkqg17_20)
 476   3                       {
 477   4                   p5pas=firstoff17_20;
 478   4      
 479   4                               p5pas=p5pas>>1;
 480   4                   P5=p5pas;
 481   4      
 482   4                           hkqg17_20=0;
 483   4                       }
 484   3      
 485   3                 }       
 486   2      //--------------------------------------------------------------------------------------
 487   2            if(cdma)                     //定时采集开
C51 COMPILER V7.50   MODBUS                                                                02/26/2006 22:47:28 PAGE 9   

 488   2                {
 489   3                     if(sendinterval)        //间隔采集定时时间到
 490   3                    {     
 491   4                          if(addr>=addh)      //到最后一个地址
 492   4                                  {   
 493   5                                                RECEIVENUM1=0;
 494   5                                                            RX1_index=0;
 495   5                                                                address=addr;
 496   5      
 497   5                                                                modbuscgqsend(addr);
 498   5                                                    addr=addl;
 499   5                                                    addend=1;               //addend=1,发送到最后一个地址
 500   5                                            sendinterval=0;
 501   5                                            TR0=1;
 502   5                                       }
 503   4                                       else                      //没到最后一个地址
 504   4                                       {
 505   5                                                     RECEIVENUM1=0;
 506   5                                                             RX1_index=0;
 507   5                                                                 address=addr;
 508   5      
 509   5                                                                 modbuscgqsend(addr);
 510   5                                                     addr=addr+1;
 511   5                                                     addend=0;               //addend=1,发送到最后一个地址
 512   5                                             sendinterval=0;
 513   5                                             TR0=1;
 514   5                                       }
 515   4                                               
 516   4                     } 
 517   3                 }
 518   2                 if(RX1_Ready)
 519   2             {   
 520   3                      unsigned char f,temp,temp1;
 521   3                      ////////////////////////////////////
 522   3                   for(f=0;f<RX1_Buf[2];f=f+2)
 523   3                               {  
 524   4                                 temp=RX1_Buf[3+f];
 525   4                                 temp1=RX1_Buf[4+f];
 526   4                                 RX1_Buf[3+f]=temp1; 
 527   4                                 RX1_Buf[4+f]=temp;
 528   4                               }                      
 529   3                   ///////////////////////////////////
 530   3                               modbusRX1_Buf[0]=0x7e; 
 531   3                               modbusRX1_Buf[1]=RX1_Buf[0]; 
 532   3                               modbusRX1_Buf[2]=0xFF-RX1_Buf[0]+1; 
 533   3                               modbusRX1_Buf[3]=0x50;  
 534   3                               modbusRX1_Buf[4]=0x00;  
 535   3                               modbusRX1_Buf[5]=0x00; 
 536   3                               for(f=0;f<RX1_Buf[2];f++)
 537   3                               {  
 538   4                                  modbusRX1_Buf[6+f]=RX1_Buf[3+f]; 
 539   4                               }
 540   3                               temp=0;
 541   3                               for(f=1;f<6+RX1_Buf[2];f++)
 542   3                               {
 543   4                                   temp=temp+modbusRX1_Buf[f];
 544   4                               }
 545   3                   f=6+RX1_Buf[2];
 546   3                               modbusRX1_Buf[f]=0xff-temp+1;
 547   3                   modbusRX1_Buf[f+1]=0x0d;
 548   3                   
 549   3                               temp=f+1;
C51 COMPILER V7.50   MODBUS                                                                02/26/2006 22:47:28 PAGE 10  

 550   3      /////////////////////////////////////////////////////////////////////
 551   3                               for(f=0;f<temp+1;f++)
 552   3                               {
 553   4                                  ardata[packge]=modbusRX1_Buf[f];
 554   4                                      packge=packge+1;
 555   4                               }
 556   3                               
 557   3                               if(modbusRX1_Buf[1]==addh)//收到最后一个地址数据了吗
 558   3                  {
 559   4                           P4=0xff;
 560   4                       ardata[packge]=P4;
 561   4                       packge++;
 562   4                                   addrnd=1;
 563   4                  }
 564   3                  else
 565   3                  {
 566   4                      addrnd=0;
 567   4                  }                   //

⌨️ 快捷键说明

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