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

📄 commrs232.lst

📁 STC12C5410AD模拟串口再现多串口通讯
💻 LST
📖 第 1 页 / 共 5 页
字号:
 422   4                      rs_BUF = rs_BUF >> 1;   //接收第8位   
 423   4                      rs_BUF_bit7 = rs_RXD;
 424   4      
 425   4                                      Rs232CommTemp0 = rs_BUF;
 426   4                                      if(Rs232CommTemp0 == 0x7E)
 427   4                              {
C51 COMPILER V7.06   COMMRS232                                                             10/30/2008 13:20:06 PAGE 8   

 428   5                                  Rs232CommState     = 0;
 429   5                                  Rs232CommAscii     = 0;
 430   5                                  Rs232CommBytehilow = 0;
 431   5                              }
 432   4                                  if(Rs232CommState != 0 && Rs232CommState != 5 && Rs232CommState != 6)
 433   4                              {
 434   5                                  Rs232ComCalculChkSum += Rs232CommTemp0;
 435   5                              }
 436   4                              if(Rs232CommState != 0 && Rs232CommState != 6)
 437   4                              {
 438   5                                  if(Rs232CommAscii == 0)
 439   5                                  {
 440   6                                      Rs232CommAscii = 1;
 441   6                                      Rs232CommTemp1 = Rs232CommTemp0;
 442   6                                      if(Rs232CommTemp1 < 0x3a)
 443   6                                          Rs232CommTemp1 -= 0x30;
 444   6                                      else
 445   6                                          Rs232CommTemp1 -= 0x37;
 446   6                                  }
 447   5                                  else
 448   5                                  {
 449   6                                      Rs232CommAscii = 0;
 450   6                                      if(Rs232CommTemp0 < 0x3a)
 451   6                                          Rs232CommTemp0  -= 0x30;
 452   6                                      else
 453   6                                          Rs232CommTemp0  -= 0x37;
 454   6                                              Rs232CommTemp1 <<= 4;
 455   6                                              Rs232CommTemp1 |= Rs232CommTemp0;
 456   6                                  }
 457   5                              }
 458   4                                      if(Rs232CommAscii == 0)
 459   4                              {
 460   5                                  switch(Rs232CommState)
 461   5                                  {
 462   6                                      case 0:                    /*SOI*/
 463   6                                      {
 464   7                                          if(Rs232CommTemp0 == 0x7e)
 465   7                                          {
 466   8                                              Rs232CommState++;
 467   8                                              Rs232ComCalculChkSum = 0;
 468   8                                          }
 469   7                                      }break;
 470   6                                      case 1:                    /*ADD*/
 471   6                                      {
 472   7                                          if(Rs232CommTemp1 == (uint8)(ModeSysConfig[8]))     //BoardAddress
 473   7                                          {
 474   8                                                                      Rs232CommState++; 
 475   8                                                              }
 476   7                                                              else 
 477   7                                                              {
 478   8                                                                      Rs232CommState = 0;
 479   8                                                              }
 480   7                                      }break;
 481   6                                      case 2:                    /*CID*/
 482   6                                      { 
 483   7                                          Rs232CommCid = Rs232CommTemp1;
 484   7                                          Rs232CommState++;
 485   7                                          if(CommCid > 0x10) Rs232CommState = 0;
 486   7                      
 487   7                                      }break;
 488   6                                      case 3:                    /*LENGTH*/
 489   6                                      {
C51 COMPILER V7.06   COMMRS232                                                             10/30/2008 13:20:06 PAGE 9   

 490   7                                          if(Rs232CommBytehilow == 0 )
 491   7                                          {
 492   8                                              Rs232CommLengthH   = Rs232CommTemp1;
 493   8                                              Rs232CommBytehilow = 1;
 494   8                                          }
 495   7                                          else
 496   7                                          {
 497   8                                              Rs232CommState++;
 498   8                                              Rs232CommLengthL   = Rs232CommTemp1;
 499   8                                              Rs232CommBytehilow = 0;
 500   8                                              if(Rs232CommLengthL > 40) Rs232CommState = 0;
 501   8                                              ReceivePoint = 0;           //RxBufPointer
 502   8                                              if(Rs232CommLengthL == 0) Rs232CommState++;
 503   8                                          }
 504   7                                      }break;
 505   6                                      case 4:                     /*INFO*/
 506   6                                      {
 507   7                                          if(Rs232CommLengthL != 0)
 508   7                                          {
 509   8                                              rs232buffer[ReceivePoint] = Rs232CommTemp1;
 510   8                                              ReceivePoint++;
 511   8                                              Rs232CommLengthL--;
 512   8                                              Rs232CommLengthL--;
 513   8                                              if(Rs232CommLengthL == 0) Rs232CommState++;
 514   8                                          }
 515   7                                          else
 516   7                                              Rs232CommState++;
 517   7                                      }break;
 518   6                                      case 5:                     /*chksum*/
 519   6                                      {
 520   7                                          if(Rs232CommBytehilow == 0)
 521   7                                          {
 522   8                                              Rs232CommChksumH   = Rs232CommTemp1;
 523   8                                              Rs232CommBytehilow = 1;
 524   8                                          }
 525   7                                          else
 526   7                                          {
 527   8                                              Rs232CommBytehilow = 0;
 528   8                                              Rs232CommChksumL   = Rs232CommTemp1;
 529   8                                              //Rs232ReComCalculChkSum  = Rs232CommChksumH;
 530   8                                                                      //COMEN = CommTxden;
 531   8                                                                  //Suart_Send_Byte(Rs232CommChksumH);
 532   8                                              //Rs232ReComCalculChkSum  = Rs232ReComCalculChkSum << 8;
 533   8                                              //Rs232ReComCalculChkSum |= Rs232CommChksumL;
 534   8                                              Rs232ComCalculChkSum = (~Rs232ComCalculChkSum)+1;
 535   8                                                                      //COMEN = CommTxden;
 536   8                                                                      //Suart_Send_Byte(Rs232CommChksumL);
 537   8                                                                      //COMEN = CommTxden;
 538   8                                                                  //Suart_Send_Byte(Rs232ComCalculChkSum>>8);
 539   8                                                                      //Suart_Send_Byte(Rs232ComCalculChkSum);
 540   8                                              //if(Rs232ReComCalculChkSum == Rs232ComCalculChkSum)
 541   8                                                                      if(Rs232CommChksumH == (Rs232ComCalculChkSum >> 8)
 542   8                                                                      &&(Rs232CommChksumL == (uint8)(Rs232ComCalculChkSum)))
 543   8                                                                      {
 544   9                                                                          Rs232CommState++;
 545   9                                                                              //RunLed = ~RunLed;
 546   9                                                                      }
 547   8                                              else
 548   8                                              {
 549   9      //                                                                  COMEN = CommTxden;
 550   9      //                                                              Suart_Send_Byte(Rs232ReComCalculChkSum>>8);
 551   9      //                                                                  Suart_Send_Byte(Rs232ReComCalculChkSum);
C51 COMPILER V7.06   COMMRS232                                                             10/30/2008 13:20:06 PAGE 10  

 552   9      //                                                                  COMEN = CommTxden;
 553   9      //                                                              Suart_Send_Byte(Rs232ComCalculChkSum>>8);
 554   9      //                                                                  Suart_Send_Byte(Rs232ComCalculChkSum);
 555   9                                                  goto comrxend;                                      
 556   9                                                                      }
 557   8                                          }
 558   7                                      }break;
 559   6                                      case 6:                     /*EOI */
 560   6                                      {
 561   7                                              if(Rs232CommTemp0 == 0x0D)
 562   7                                                  {
 563   8                                                  Rs232Massageflag = 1;
 564   8                                                                      //RunLed = ~RunLed;
 565   8                                                  }
 566   7                                                  Rs232CommState = 0;
 567   7                                          }break;
 568   6                                  }
 569   5                                  comrxend:
 570   5                                  ;
 571   5                              }
 572   4      //                if( ReceivePoint < rs_RECEIVE_MAX)
 573   4      //                {                       //保存收到的字节    
 574   4      //                    rs232buffer[ReceivePoint++] = rs_BUF;
 575   4      //                }
 576   4      //                else
 577   4      //                {
 578   4      //                    rs_f_RI_enable = 0; //缓冲区满, 禁止接收   
 579   4      //                }
 580   4                  }
 581   3                  else
 582   3                  {
 583   4                      if (rs_shift_count < 9 ) //收到的是数据位 1 -- 7  
 584   4                      {
 585   5                          rs_BUF = rs_BUF >> 1;
 586   5                          rs_BUF_bit7 = rs_RXD;
 587   5                      }
 588   4                      else
 589   4                      {   //收到停止位,继续检测 PC 机发出的下一个起始位    
 590   5                          soft_receive_init(); 
 591   5                      }
 592   4                  }
 593   3              }
 594   2              TCON_TFx = 0;                  //清定时器中断标志   
 595   2          }
 596   1          else
 597   1          {
 598   2              /************************ 发送 ****************************/  
 599   2              if (rs_f_TI_enable == 1)
 600   2              {
 601   3                  rs_timerL += rs_FULL_BIT_L;//下次中断在数据位的末尾时刻   
 602   3                  rs_timerH  = rs_FULL_BIT_H;
 603   3      
 604   3                  rs_shift_count--;          //0:停止位末尾时刻到  
 605   3                                             //1:发送停止位  
 606   3                                             //2--9:发送数据位  
 607   3                  if (rs_shift_count > 9)    //错误状态  
 608   3                  {
 609   4                      rs_shift_count = 9;
 610   4                      rs_BUF = 0xFF;
 611   4                  }
 612   3      
 613   3                  if (rs_shift_count > 1)    //2--9:发送数据位  
C51 COMPILER V7.06   COMMRS232                                                             10/30/2008 13:20:06 PAGE 11  

 614   3                  {
 615   4                      ACC = rs_BUF;
 616   4                      ACC = ACC >> 1;
 617   4                      rs_TXD = CY;
 618   4                      rs_BUF = ACC;
 619   4                  }
 620   3                  else
 621   3                  {
 622   4                      if (rs_shift_count == 0) //0:停止位末尾时刻到  
 623   4                      {
 624   5                          rs_TXD = 1;
 625   5                          rs_f_TI = 1;       //已发送完毕一个字节  
 626   5                      }
 627   4                      else
 628   4                      {
 629   5                          rs_TXD = 1;        //1:发送停止位  
 630   5                      }
 631   4                  }
 632   3              }
 633   2          }
 634   1      }

⌨️ 快捷键说明

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