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

📄 serial.lst

📁 一个分选系统的软件:用SmallRtos操作系统
💻 LST
📖 第 1 页 / 共 3 页
字号:
 481   7                              }
 482   6                              CommSendInfo();
 483   6                          }break;
 484   5                          case 4:// 分容
 485   5                          {
 486   6                              if(length==3)
 487   6                              {
 488   7                                  if(CurrentWorkStep == 0)
C51 COMPILER V7.06   SERIAL                                                                06/06/2005 16:32:37 PAGE 9   

 489   7                                  {
 490   8                                      i=buf[0];
 491   8                                      if((bit)(i&1)) P4|=0x01; else P4&=0xFE; i=i>>1;
 492   8                                      if((bit)(i&1)) P4|=0x02; else P4&=0xFD; i=i>>1;
 493   8                                      if((bit)(i&1)) P4|=0x04; else P4&=0xFB; i=i>>1;
 494   8                                      if((bit)(i&1)) P4|=0x08; else P4&=0xF7; i=i>>1;
 495   8                                      if((bit)(i&1)) P4|=0x10; else P4&=0xEF; i=i>>1;
 496   8                                      if((bit)(i&1)) P4|=0x20; else P4&=0xDF; i=i>>1;
 497   8                                      if((bit)(i&1)) P4|=0x40; else P4&=0xBF; i=i>>1;
 498   8                                      if((bit)(i&1)) P4|=0x80; else P4&=0x7F; i=i>>1;
 499   8                                      i=buf[1];
 500   8                                      if((bit)(i&1)) P5|=0x01; else P5&=0xFE; i=i>>1;
 501   8                                      if((bit)(i&1)) P5|=0x02; else P5&=0xFD; i=i>>1;
 502   8                                      if((bit)(i&1)) P5|=0x04; else P5&=0xFB; i=i>>1;
 503   8                                      if((bit)(i&1)) P5|=0x08; else P5&=0xF7; i=i>>1;
 504   8                                      if((bit)(i&1)) P2|=0x10; else P2&=0xEF; i=i>>1;
 505   8                                      if((bit)(i&1)) P2|=0x20; else P2&=0xDF; i=i>>1;
 506   8                                      if((bit)(i&1)) P2|=0x40; else P2&=0xBF; i=i>>1;
 507   8                                      if((bit)(i&1)) P2|=0x80; else P2&=0x7F; i=i>>1;
 508   8                                      i=buf[2];
 509   8                                      if((bit)(i&1)) P1|=0x01; else P1&=0xFE; i=i>>1;
 510   8                                      if((bit)(i&1)) P1|=0x02; else P1&=0xFD; i=i>>1;
 511   8                                      if((bit)(i&1)) P1|=0x04; else P1&=0xFB; i=i>>1;
 512   8                                      if((bit)(i&1)) P1|=0x08; else P1&=0xF7; i=i>>1;
 513   8                                      if((bit)(i&1)) P1|=0x10; else P1&=0xEF; i=i>>1;
 514   8                                      if((bit)(i&1)) P1|=0x20; else P1&=0xDF; i=i>>1;
 515   8                                      if((bit)(i&1)) P1|=0x40; else P1&=0xBF; i=i>>1;
 516   8                                      if((bit)(i&1)) P1|=0x80; else P1&=0x7F; i=i>>1;
 517   8                                  }//if(CurrentWorkStep == 0)
 518   7                                  else
 519   7                                  {
 520   8                                      rtn = LOGIC_ERROR;
 521   8                                  }
 522   7                              }//if(length==3)
 523   6                              else
 524   6                              {
 525   7                                  rtn = LENGTH_ERROR;
 526   7                              }
 527   6                              CommSendInfo();
 528   6                          }break;//case 4:// 分容
 529   5                          case 5:// 取分容信息命令
 530   5                          {
 531   6                              uint16 data temp;
 532   6                              temp = buf[0];
 533   6                              temp = temp<<8;
 534   6                              temp = temp | buf[1];
 535   6                              if(temp%100 == 0 && temp<=3800 && temp>=2600)
 536   6                              {
 537   7                                  if(CurrentWorkStep == 0)//如果当前为停止
 538   7                                  {
 539   8                                      CommSendFenRongInfo(temp);
 540   8                                  }
 541   7                                  else
 542   7                                  {
 543   8                                      rtn = LOGIC_ERROR;
 544   8                                      CommSendInfo();
 545   8                                  }
 546   7                              }//if(temp%100 == 0)
 547   6                              else
 548   6                              {
 549   7                                  rtn = DATA_ERROR;
 550   7                                  CommSendInfo();
C51 COMPILER V7.06   SERIAL                                                                06/06/2005 16:32:37 PAGE 10  

 551   7                              }//if(temp%100 == 0)
 552   6                          }break;
 553   5                          case 6:// 模块启动
 554   5                          {
 555   6                              if(CurrentWorkStep==0)
 556   6                              {
 557   7                                  CurrentWorkStep    = 1;
 558   7                                  CurrentWorkStepMax = 1;
 559   7                                  Reset              = 0;
 560   7                                  CellCheckFlag      = 0;
 561   7                                  OSSemPost(StartWorkStepSem);//发送同步工步执行信号量
 562   7                              }
 563   6                              else
 564   6                              {
 565   7                                  rtn = LOGIC_ERROR;
 566   7                              }
 567   6                              CommSendInfo();
 568   6                          }break;
 569   5                          case 7:// 工步续接
 570   5                          {
 571   6                              CommSendInfo();
 572   6                          }break;
 573   5                          case 8:// 电池对点
 574   5                          {
 575   6                              if(CurrentWorkStep==0)
 576   6                              {
 577   7                                  CellCheckUHigh = buf[0];
 578   7                                  CellCheckUHigh = CellCheckUHigh<<8;
 579   7                                  CellCheckUHigh|= buf[1];
 580   7      
 581   7                                  CellCheckULow  = buf[2];
 582   7                                  CellCheckULow  = CellCheckULow<<8;
 583   7                                  CellCheckULow |= buf[3];
 584   7                                  if((CellCheckUHigh < 5000) && (CellCheckUHigh > 500) && 
 585   7                                     (CellCheckULow  < 5000) && (CellCheckULow  > 500) &&
 586   7                                     (CellCheckUHigh > CellCheckULow))
 587   7                                  {
 588   8                                      CellCheckULow *= 10; 
 589   8                                      CellCheckUHigh*= 10;         //为了能和单片机内电池数据比较
 590   8                                      CellCheckFlag  = 1;
 591   8                                  }
 592   7                                  else
 593   7                                  {
 594   8                                      CellCheckULow  = 0; 
 595   8                                      CellCheckUHigh = 0;
 596   8                                      CellCheckFlag  = 0;
 597   8                                      rtn = DATA_ERROR;
 598   8                                  }
 599   7                              }
 600   6                              else
 601   6                              {
 602   7                                  rtn = LOGIC_ERROR;
 603   7                              }
 604   6                              CommSendInfo();
 605   6                          }break;
 606   5                          case 0xC0:// 设模块参数
 607   5                          {
 608   6                              if(length == 3)
 609   6                              {
 610   7                                  uint16 data temp;
 611   7                                  temp = buf[1];
 612   7                                  temp = temp<<8;
C51 COMPILER V7.06   SERIAL                                                                06/06/2005 16:32:37 PAGE 11  

 613   7                                  temp = temp | buf[2];
 614   7                                  if(temp < PARAMETER_MAX && temp >PARAMETER_MIN)//保证所写参数在一定数值范围内
 615   7                                  {
 616   8                                      if(OSSemPend(IICSem,10)==OS_SEM_OK)
 617   8                                      {
 618   9                                          EepromWriteByteA(CellParaIICBase+buf[0]*2,buf[1]);
 619   9                                          EepromWriteByteA(CellParaIICBase+buf[0]*2+1,buf[2]);
 620   9                                          OSSemPost(IICSem);
 621   9                                      }
 622   8                                      if(buf[0]%8 == 0 || buf[0]%8 == 2 )
 623   8                                          AdParaChanged = 1;
 624   8                                      if(buf[0]%8 == 4 || buf[0]%8 == 6 )
 625   8                                          DaParaChanged = 1;
 626   8                                  }
 627   7                                  else
 628   7                                  {
 629   8                                      rtn = DATA_ERROR;
 630   8                                  }
 631   7                              }
 632   6                              else
 633   6                              {
 634   7                                  rtn = LENGTH_ERROR;
 635   7                              }
 636   6                              CommSendInfo();
 637   6                          }break;
 638   5                          case 0xC1:// 取模块参数
 639   5                          {
 640   6                              CommSendParaInfo();
 641   6                          }break;
 642   5                          default:
 643   5                          {
 644   6                              rtn = CID_ERROR;
 645   6                              CommSendInfo(); 
 646   6                          }
 647   5                      }//switch (cid)
 648   4                  }//if(rtn==1)//如果报文的校验和,类型正确]
 649   3                  else//如果校验和或类型不正确
 650   3                  {
 651   4                      CommSendInfo();
 652   4                  }
 653   3              }//if (Address == GetCharWithCheck())
 654   2          }//while (1)
 655   1      }//void TaskReceive(void)
 656          /*********************************************************************************************************
 657          ** 函数名称: comm
 658          ** 功能描述: 串口中断处理程序
 659          ** 输 入: 无
 660          ** 输 出: 无
 661          ** 全局变量: 无
 662          ** 调用模块: 无
 663          **
 664          ** 作 者: 刘宝贵
 665          ** 日 期: 2004年4月20日
 666          **-------------------------------------------------------------------------------------------------------
 667          ** 修改人:
 668          ** 日 期:
 669          **------------------------------------------------------------------------------------------------------
 670          ********************************************************************************************************/
 671          #if EN_OS_INT_ENTER >0 
              #pragma disable                                        /* 除非最高优先级中断,否则,必须加上这一句        
             -         */
              #endif
C51 COMPILER V7.06   SERIAL                                                                06/06/2005 16:32:37 PAGE 12  

 674                          void comm(void) interrupt 4
 675          {
 676   1          uint8 data temp;
 677   1          if(EN_485 == 1)//EN_485==1:通信处于接收状态
 678   1          {
 679   2              if (RI0 == 1)
 680   2              {
 681   3      #if EN_OS_INT_ENTER >0
                          OS_INT_ENTER();
              #endif
 684   3                      RI0 = 0;
 685   3                  OSQIntPost(SerialInData,SBUF0);
 686   3                  OSIntExit();
 687   3                      return;
 688   3              }
 689   2          }
 690   1          else
 691   1          {
 692   2              RI0 = 0;
 693   2          }
 694   1              if (TI0 == 1)
 695   1              {
 696   2                      TI0 = 0;
 697   2                      if (OSQAccept(&temp,SerialOutData) == OS_Q_OK)
 698   2                      {
 699   3                          SBUF0 = temp;
 700   3                      }
 701   2                      else
 702   2                      {
 703   3                          SerialCanSend = 1;
 704   3                  EN_485 = 1;
 705   3                      }
 706   2              }
 707   1      }
 708          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   3215    ----
   CONSTANT SIZE    =      4    ----
   XDATA SIZE       =    460       2
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      4      14
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      2    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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