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

📄 pcckmodbus.lst

📁 lpc932芯片 用于modbus通讯的范例
💻 LST
📖 第 1 页 / 共 5 页
字号:
 313   3                  {
 314   4                       modbjda=0;
 315   4                      }
 316   3      /*         else
 317   3                  {
 318   3                        for (i=0;i<=18;i++)      //debug++++++++++++++++========================
 319   3                              {
 320   3                               TXbuf[i+4]=RXbuf[i];
 321   3                              }
 322   3                              TXbuf[0]=0xeb;
 323   3                              TXbuf[1]=0x90;
 324   3                              TXbuf[2]=dembug[0];
C51 COMPILER V7.01  PCCKMODBUS                                                             07/23/2004 15:55:57 PAGE 10  

 325   3                              TXbuf[3]=dembug[1];
 326   3                              tfbok=0;
 327   3                          tsleng=18; 
 328   3                                   puc=&TXbuf[0];
 329   3               i=CRC16(puc,tsleng-2);
 330   3               lm=i/0x100;
 331   3               lk=i%0x100;
 332   3           TXbuf[tsleng-2]=lm;
 333   3               TXbuf[tsleng-1]=lk;
 334   3               tsbufr=1;
 335   3           rsbufr=0;
 336   3           sipm=1;
 337   3               tsbbb=1;
 338   3               SBUF=TXbuf[0];
 339   3               modbjda=0;
 340   3                      }    */ //debug++++++++++++++++========================
 341   3                }            
 342   2         if (Rx12==1)
 343   2          {
 344   3               switch (RXbuf[1])
 345   3                {
 346   4                 case 0x01:TXbuf[1]=0x01;TXbuf[2]=1;
 347   4                           TXbuf[3]=((R2buf[2]>>1) & 1);
 348   4                                       tfbok=1;
 349   4                                       tsleng=6;break;
 350   4                 case 0x02:TXbuf[1]=0x02;lm=RXbuf[5];
 351   4                                       lk=RXbuf[3];
 352   4                                       if ((lk>26) || ((lm+lk) >27))
 353   4                                        {
 354   5                                                TXbuf[1]=0x82;
 355   5                                                TXbuf[2]=0x02;
 356   5                                                tfbok=1;
 357   5                                                tsleng=5;
 358   5                                        }
 359   4                                       else
 360   4                                        {
 361   5                                           bbiitt=R2buf[3] * 0x1000000 + R2buf[2] * 0x10000 + R2buf[1] *0x100 + R2buf[0];
 362   5                                               bbiitt=bbiitt>>lk;
 363   5                                               lk=lm/8;
 364   5                                               if (lm%8 != 0) lk++;
 365   5                                               TXbuf[2]=lk;
 366   5                                               k=3;
 367   5                                               for (j=0;j<lk;j++)
 368   5                                               {
 369   6                                                TXbuf[k]=bbiitt & 0xff;
 370   6                                                bbiitt=bbiitt>>8;
 371   6                                                k++;
 372   6                                               }
 373   5                                   tfbok=1;
 374   5                                               tsleng=lk+5;
 375   5                                        }
 376   4                                       break;
 377   4                 case 0x04:TXbuf[1]=0x04;lm=RXbuf[5];
 378   4                                       lk=RXbuf[3];
 379   4                                       if ((lk>17) || ((lm+lk) >18))
 380   4                                        {
 381   5                                                TXbuf[1]=0x84;
 382   5                                                TXbuf[2]=0x02;
 383   5                                                tfbok=1;
 384   5                                                tsleng=5;
 385   5                                        }
 386   4                                       else
C51 COMPILER V7.01  PCCKMODBUS                                                             07/23/2004 15:55:57 PAGE 11  

 387   4                                        {
 388   5                                              lm=lm*2;
 389   5                                              lk=lk*2;
 390   5                                              TXbuf[2]=lm;
 391   5                                              for(j=0;j<lm;j++)
 392   5                                              {
 393   6                                               TXbuf[j+3]=R2buf[j+lk+7];
 394   6                                              }
 395   5                                              tfbok=1;
 396   5                                              tsleng=lm+5;
 397   5                                        }
 398   4                                       break;
 399   4                 case 0x05:lm=RXbuf[3];
 400   4                                       if (lm>3)
 401   4                                   {
 402   5                                        TXbuf[1]=0x85;
 403   5                                        TXbuf[2]=0x02;
 404   5                                        tfbok=1;
 405   5                                        tsleng=5;
 406   5                                        }
 407   4                                       else
 408   4                                        {
 409   5                                               if (lm==0)
 410   5                                                      {
 411   6                                                                       lk=RXbuf[4];
 412   6                                                                       if (lk==0xff)
 413   6                                                                       {
 414   7                                                                        lk=1;
 415   7                                                                        T2buf[0]=(T2buf[0] & 0xfc) | lk;
 416   7                                                                       }
 417   6                                                                       else
 418   6                                                                       {
 419   7                                                                        lk=2;
 420   7                                                                        T2buf[0]=(T2buf[0] & 0xfc) | lk;
 421   7                                                                       }  
 422   6                                                      }       
 423   5                            else
 424   5                                                      {
 425   6                                                                       lk=RXbuf[4];
 426   6                                                                       if (lk==0xff)
 427   6                                                                       {
 428   7                                                                        T2buf[0]=T2buf[0] | 4;
 429   7                                                                       }
 430   6                                                                       else
 431   6                                                                       {
 432   7                                                                        T2buf[0]=T2buf[0] & 0xfb;
 433   7                                                                       }
 434   6                                                      }
 435   5                                               I2cwr=0;
 436   5                                               for (i=0;i<=rlend;i++)      //++控制ok
 437   5                                                      {
 438   6                                                       TXbuf[i]=RXbuf[i];
 439   6                                                      }
 440   5                                               tfbok=1;
 441   5                                       tsleng=rlend+1;
 442   5                                        }
 443   4                                   break;
 444   4                 default:     TXbuf[1]=RXbuf[1] | 0x80;TXbuf[2]=1;
 445   4                          tfbok=1;
 446   4                                      tsleng=5;break;
 447   4                }  
 448   3          }
C51 COMPILER V7.01  PCCKMODBUS                                                             07/23/2004 15:55:57 PAGE 12  

 449   2         if (tfbok==1)
 450   2          {
 451   3               TXbuf[0]=modadder;
 452   3           puc=&TXbuf[0];
 453   3               i=CRC16(puc,tsleng-2);
 454   3               lm=i/0x100;
 455   3               lk=i%0x100;
 456   3           TXbuf[tsleng-2]=lm;
 457   3               TXbuf[tsleng-1]=lk;
 458   3               tsbufr=1;
 459   3           rsbufr=0;
 460   3           sipm=1;
 461   3               tsbbb=1;
 462   3               ACC=TXbuf[0];
 463   3               TB8=P;
 464   3               SBUF=ACC;
 465   3               modbjda=0;
 466   3              }
 467   2       }
 468   1      }
 469          //=============================================================================
 470          void chushihua()
 471          {
 472   1       //unsigned char presc;
 473   1       IEN0=0x0;
 474   1       IEN1=0x0;
 475   1       DIVM=0;
 476   1       SSTAT=0x44; // separate Rx/Tx
 477   1       BRGCON=0;              
 478   1      //AUXR1=AUXR1 | 0x40;   //debug-------- ; setb the EBRR
 479   1      //SSTAT=SSTAT&0xfa;     //debug------------     //; clr the BR, it is SSTAT.2
 480   1       SCON=0xd0;     //      ; setup UART mode 1, enables serial reception.
 481   1       BRGR1=0x01;     //  串口波特率发生器0x2f0-->9600((7372800/n)-16)
 482   1       BRGR0=0x70;     //170-->19200,2f0-->9600,5f0-->4800,bf0-->2400,17f0-->1200
 483   1       BRGCON=0x03;   //      ; Baud Rate Generator Enable.
 484   1      // EA=1;
 485   1       P0M1=0xff;
 486   1       P0M2=0;
 487   1       P1M1=0xfc;
 488   1       P1M2=0x0c;
 489   1       P2M1=0xff;                                                                                               
             -                                                                                                                        
             -                                                                                                                        
             -                                                                                                                        
             -                                                                                                                        
             -                                                                                                                        
             -                                                                                                    
 490   1       P2M2=0x00;
 491   1       P3M1=0x03;
 492   1       P3M2=0;
 493   1      /* if (led1==0)
 494   1       {
 495   1         chusua();
 496   1        }   */
 497   1       P2M1=0xff;                                                                                               
             -                                                                                                                        
             -                                                                                                                        
             -                                                                                                                        
             -                                                                                                                        
             -                                                                                                                        
             -                                                                                                    
 498   1       P2M2=0xc0;
C51 COMPILER V7.01  PCCKMODBUS                                                             07/23/2004 15:55:57 PAGE 13  

 499   1       sipm=0;
 500   1       EA=0;
 501   1       //wdcon
 502   1       WDL=0xff;
 503   1       WDCON=0x11000101b;
 504   1       WFEED1=0xa5;
 505   1       WFEED2=0x5a;
 506   1       //I2SCLH=75;/*设置IIC波特率*/
 507   1      // I2SCLL=75;  //75-->25k;50-->37k;25-->74k;19-->100k;5-->369k
 508   1      // I2CON=0x44;//IIC使能使用内部SCL发生器
 509   1      // EI2C =1;
 510   1       I2cwr=0;
 511   1       DIVM=0;
 512   1       ES=1;
 513   1       TMOD=1;
 514   1       TL0 = 0;
 515   1       TH0 = 0;
 516   1       TR0 = 1;
 517   1       ET0 = 1;
 518   1      // EA = 1;
 519   1      // iicerrror=0;
 520   1      // iiccaozuo=0;
 521   1       tsleng=0;
 522   1       modbjda=0;
 523   1      }
 524          //-----------------------------------------
 525          /*****************************
 526          申请总线
 527          功能:进行I2C总线的初始化包括
 528          时钟速率,使能,发送起始信号等
 529          ******************************/
 530          void GetBus()
 531          {
 532   1      I2CON=0x44;//01000100B
 533   1      STA=1;
 534   1      while(SI==0);
 535   1      }
 536          /**************************
 537          发送数据
 538          ***************************/
 539          void SendByte(uchar c)
 540          {
 541   1      I2DAT=c;
 542   1      I2CON=0x44;
 543   1      while(SI==0);
 544   1      }
 545          /*******************************************************************
 546          向无子地址器件发送字节数据函数
 547          函数原型: bit IRcvByte(uchar sla,ucahr *c);
 548          功能:从启动总线到发送地址读数据结束总线的全过程,从器件地址sla 返
 549          回值在c 如果返回1 表示操作成功否则操作有误
 550          ********************************************************************/
 551          /*bit ISendByte(uchar sla,uchar c)
 552          {
 553           GetBus();
 554           SendByte(sla); 
 555                if(I2STAT!=0x18)
 556                    {
 557                     I2CON=0x54;
 558                     return(0);
 559                     }
 560          SendByte(c);
C51 COMPILER V7.01  PCCKMODBUS                                                             07/23/2004 15:55:57 PAGE 14  

 561                 if(I2STAT!=0x28)
 562                    {
 563                     I2CON=0x54;
 564                     return(0);
 565                     }
 566          I2CON=0x54;
 567          return(1);
 568          } */
 569          /**********************************************************************
 570          向有子地址器件发送多字节数据函数
 571          函数原型: bit ISendStr(uint sla,ucahr *s,uchar no);
 572          功能:从启动总线到发送地址子地址,读数据结束总线的全过程,从器件地址sla

⌨️ 快捷键说明

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