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

📄 modbus.lst

📁 modbus modbus modbus
💻 LST
📖 第 1 页 / 共 2 页
字号:
 206   1             StratingAddress=Rxbuf[2];
 207   1                 StratingAddress=(StratingAddress<<8)|Rxbuf[3];//取开始地址
 208   1             Numbers=Rxbuf[4];
 209   1                 Numbers=(Numbers<<8)|(Rxbuf[5]);  //写寄存器的数量
 210   1                 BytesCount=(uchar)(Numbers*2);
 211   1                 if((BytesCount + (uchar)StratingAddress)<=Parameter_Num)
 212   1                       {
 213   2                         Txbuf[0]=MBSlaveAdrress;     //取地址
 214   2                         Txbuf[1]=0x10;             //命令号
 215   2                         Txbuf[2]=Rxbuf[2];
 216   2                 Txbuf[3]=Rxbuf[3];
 217   2                 Txbuf[4]=Rxbuf[4];
 218   2                 Txbuf[5]=Rxbuf[5];
 219   2                 Send_Count=6;                  //发送数据长度
 220   2                         for(i=0;i<BytesCount;i++)
 221   2                           {
 222   3                                  temp=Rxbuf[7+i];//测试数据高位
 223   3                                      temp=(temp<<8)|Rxbuf[8+i];//测试数据高低位合并
 224   3                                  Parameter_Table[(uchar)StratingAddress+i]=temp;
 225   3                               }
 226   2                         MBSerialSendTxbuf();
 227   2                       }
 228   1                 else
 229   1                  {
 230   2                              //返回错误信息
 231   2                        Txbuf[0]=MBSlaveAdrress;             //取地址
 232   2                    Txbuf[1]=0x90;             //命令号&0x80
 233   2                        Txbuf[2]=Rxbuf[2];
 234   2                Txbuf[3]=Rxbuf[3];
 235   2                Txbuf[4]=Rxbuf[4];
 236   2                Txbuf[5]=Rxbuf[5];
 237   2                        Send_Count=6;                  //发送数据长度
 238   2                        MBSerialSendTxbuf();
 239   2                      }
 240   1      
 241   1               }
C51 COMPILER V8.01   MODBUS                                                                03/26/2007 20:26:46 PAGE 5   

 242          
 243          /*=================================*/
 244          /*=======定时器0中断处理函数=======*/
 245          /*          中断计时1ms            */
 246          /*=================================*/
 247          void Timer0Service(void) interrupt 1
 248               {
 249   1               TH0  = 0xdc;
 250   1           TL0  = 0x00;
 251   1               if(MBtimerT15<2)
 252   1                 {MBtimerT15++;}
 253   1               else
 254   1                 {
 255   2                 TR0=0;
 256   2                 Receive_Count=0;
 257   2                 MBFrame_OK=1; //一个消息接收完成!等待处理 
 258   2             }  
 259   1               }
 260          /*===========================*/
 261          /*======串口配置函数函数=====*/
 262          /*  bruad:波特率            */
 263          /*===========================*/
 264          void MBSerialInit(void)
 265              {
 266   1      //      SCON   = 0xDC;// SM0/PE SM1 SM2 REN TB8 RB8 TI RI
 267   1                                        //    1    1   0   1   1   1   0  0   串口工作在模式3/多机通讯SM2无效/允许接收/
 268   1      
 269   1      //  TH1    = 0xFD;//波特率为9600,11。0592 /当PCON的第8为SMOD1为1时波特率加倍
 270   1      //  TL1    = 0xFD;
 271   1          SCON=0x50;        // 串口模式1,10bit,1 Start,8 data ,1 stop
 272   1          TH1=0xfa;
 273   1          TL1=0xfa;         // 设定波特率9600 *2=19200   
 274   1          PCON|=0x80; // 两倍波特率
 275   1      //  PCON  &= 0x7F;//波特率不加倍
 276   1          TMOD   = 0x21;//定时间器0工作在模式1,16bit timer;定时器1工作在模式2,波特率发生器
 277   1          TR1    = 1;
 278   1              ES=1;             // 串口中断允许
 279   1          ET0=1;                      //定时器0允许
 280   1          EA=1;             // 全局中断允许
 281   1              E485=0;
 282   1              }
 283          
 284          
 285          
 286          /*=================================*/
 287          /*=========中断接收数据函数========*/
 288          /*=================================*/
 289          void MBSerialService(void) interrupt 4
 290              {
 291   1          ES=0;
 292   1           if (RI)
 293   1             {
 294   2                 RI=0;
 295   2                 TR0=0;
 296   2      
 297   2                 if(MBtimerT15>1) //>1.5个字符停顿,刷新不完整消息   1x2ms
 298   2                        {
 299   3                        Receive_Count=0;      //MBFrame_OK=0;
 300   3                        TH0=0xdc;TL0=0x00;MBtimerT15=0;TR0=1;
 301   3                        }
 302   2                 Rxbuf_com[Receive_Count]=SBUF;         //接收数据
 303   2                 Rxbuf[Receive_Count]=Rxbuf_com[Receive_Count];
C51 COMPILER V8.01   MODBUS                                                                03/26/2007 20:26:46 PAGE 6   

 304   2                 Receive_Count++;
 305   2                 MBFrame_Len=Receive_Count;  //消息长度
 306   2             Receive_Count&=0x0f;//最大接收16个
 307   2                 MBtimerT15=0;
 308   2             TH0=0xdc;TL0=0x00;          
 309   2                 TR0=1;//接收完数据,启动接收计时,检测是否停顿超过1.5个字符时间停顿!
 310   2                 }
 311   1           ES=1;
 312   1              }
 313          
 314          unsigned char code aucCRCHi[] = {
 315              0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
 316                  0x00, 0xC1, 0x81,
 317              0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81,
 318                  0x40, 0x01, 0xC0,
 319              0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1,
 320                  0x81, 0x40, 0x01,
 321              0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01,
 322                  0xC0, 0x80, 0x41,
 323              0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
 324                  0x00, 0xC1, 0x81,
 325              0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80,
 326                  0x41, 0x01, 0xC0,
 327              0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
 328                  0x80, 0x41, 0x01,
 329              0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00,
 330                  0xC1, 0x81, 0x40,
 331              0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
 332                  0x00, 0xC1, 0x81,
 333              0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
 334                  0x40, 0x01, 0xC0,
 335              0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1,
 336                  0x81, 0x40, 0x01,
 337              0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01,
 338                  0xC0, 0x80, 0x41,
 339              0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
 340                  0x00, 0xC1, 0x81,
 341              0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
 342                  0x40, 0x01, 0xC0,
 343              0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
 344                  0x80, 0x41, 0x01,
 345              0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01,
 346                  0xC0, 0x80, 0x41,
 347              0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
 348                  0x00, 0xC1, 0x81,
 349              0x40
 350          };
 351          
 352          unsigned char code aucCRCLo[] = {
 353              0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 0x07, 0xC7,
 354                  0x05, 0xC5, 0xC4,
 355              0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB,
 356                  0x0B, 0xC9, 0x09,
 357              0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE,
 358                  0xDF, 0x1F, 0xDD,
 359              0x1D, 0x1C, 0xDC, 0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2,
 360                  0x12, 0x13, 0xD3,
 361              0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, 0xF2, 0x32,
 362                  0x36, 0xF6, 0xF7,
 363              0x37, 0xF5, 0x35, 0x34, 0xF4, 0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E,
 364                  0xFE, 0xFA, 0x3A,
 365              0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29, 0xEB, 0x2B,
C51 COMPILER V8.01   MODBUS                                                                03/26/2007 20:26:46 PAGE 7   

 366                  0x2A, 0xEA, 0xEE,
 367              0x2E, 0x2F, 0xEF, 0x2D, 0xED, 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27,
 368                  0xE7, 0xE6, 0x26,
 369              0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, 0x61, 0xA1,
 370                  0x63, 0xA3, 0xA2,
 371              0x62, 0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD,
 372                  0x6D, 0xAF, 0x6F,
 373              0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68, 0x78, 0xB8,
 374                  0xB9, 0x79, 0xBB,
 375              0x7B, 0x7A, 0xBA, 0xBE, 0x7E, 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4,
 376                  0x74, 0x75, 0xB5,
 377              0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, 0x70, 0xB0,
 378                  0x50, 0x90, 0x91,
 379              0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94,
 380                  0x54, 0x9C, 0x5C,
 381              0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B, 0x99, 0x59,
 382                  0x58, 0x98, 0x88,
 383              0x48, 0x49, 0x89, 0x4B, 0x8B, 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D,
 384                  0x4D, 0x4C, 0x8C,
 385              0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83,
 386                  0x41, 0x81, 0x80,
 387              0x40
 388          };
 389          
 390          unsigned int
 391          usMBCRC16( unsigned char * pucFrame, unsigned char usLen )
 392          {
 393   1              unsigned char           ucCRCHi = 0xFF;
 394   1          unsigned char          ucCRCLo = 0xFF;
 395   1          unsigned int             iIndex;
 396   1      
 397   1          while( usLen-- )
 398   1          {
 399   2              iIndex = ucCRCLo ^ *( pucFrame++ );
 400   2              ucCRCLo = ucCRCHi ^ aucCRCHi[iIndex];
 401   2              ucCRCHi = aucCRCLo[iIndex];
 402   2          }
 403   1          return ucCRCHi << 8 | ucCRCLo;
 404   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    855    ----
   CONSTANT SIZE    =    512    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      4       6
   IDATA SIZE       =     54    ----
   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 + -