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

📄 comm.lst

📁 Keil单片机软件开发平台下的一个51系列单片机工程
💻 LST
📖 第 1 页 / 共 3 页
字号:
 451   2          }
 452   1      }
 453          /*********************************************************************************************************
 454          ** 函数名称: bit XorCheck(void)
 455          ** 功能描述: 串口处理任务
 456          ** 输 入: 无
 457          ** 输 出: 无
 458          ** 全局变量: 无
 459          ** 调用模块: 无
 460          **
 461          ** 作 者: 刘宝贵
 462          ** 日 期: 2006年4月25日
 463          **-------------------------------------------------------------------------------------------------------
 464          ** 修改人:
 465          ** 日 期:
 466          **------------------------------------------------------------------------------------------------------
 467          ********************************************************************************************************/
 468          void TaskComm (void) _task_ 5
 469          {                  
 470   1          SCON   = 0x50;  /*page 111*/
 471   1          RCAP2H = 0xFF;
 472   1          RCAP2L = 0xE6;
 473   1          T2CON  = 0x34; 
 474   1          CommState = 0;
 475   1          CommCid = 0;
 476   1          CommRxPointer = 0;
 477   1          CommTxPointer = 0;
 478   1          ES = 1;  /*page 101*///使能串口中断
 479   1          for(;;)
 480   1          {
 481   2              os_wait (K_TMO, 10/OS_MSEL_PER_TICKS, 0);
 482   2              if(CommNewMessage==1)
 483   2              {
 484   3                  CommNewMessage = 0;
 485   3                  ReturnCode = RIGHT;
 486   3                  if(0 == XorCheck())//对所接收的数据包进行异或效验
 487   3                  {
 488   4                      ReturnCode = CHKSUM_ERROR;
C51 COMPILER V7.06   COMM                                                                  01/22/2007 09:50:04 PAGE 9   

 489   4                  }
 490   3                  if (0x0d != CommRxBuf[CommRxLength])// 判断报文尾           
 491   3                  {
 492   4                      ReturnCode = TYPE_ERROR;
 493   4                  }
 494   3                  if(ReturnCode==RIGHT)//如果报文的校验和,类型正确
 495   3                  {
 496   4                      CommCounter = 0;
 497   4                      switch (CommCid)
 498   4                      {
 499   5                          case 0:                               // 握手命令             
 500   5                          {
 501   6                              CommSendInfo();
 502   6                          }break;
 503   5                          case 1:                               // 取电池数据信息
 504   5                          {
 505   6                              CommSendCellDataInfo();
 506   6                          }break;
 507   5                          case 2:                               // 工步设置
 508   5                          {
 509   6                              if(State == STOP)//如果当前为停止状态则可以修改工步
 510   6                              {
 511   7                                  ProgramNo = CommRxBuf[0];
 512   7                                  Step      = CommRxBuf[1];
 513   7                                  Mode      = CommRxBuf[2];
 514   7                                  SetupU    = CommRxBuf[3]; SetupU    = SetupU<<8;   SetupU    |= CommRxBuf[4];
 515   7                                  SetupI    = CommRxBuf[5]; SetupI    = SetupI<<8;   SetupI    |= CommRxBuf[6];
 516   7                                  JumpTimeM = CommRxBuf[7]; JumpTimeM = JumpTimeM<<8;JumpTimeM |= CommRxBuf[8];
 517   7                                  JumpU     = CommRxBuf[9]; JumpU     = JumpU<<8;    JumpU     |= CommRxBuf[10];
 518   7                                  JumpI     = CommRxBuf[11];JumpI     = JumpI<<8;    JumpI     |= CommRxBuf[12];
 519   7                                  JumpQ     = CommRxBuf[13];JumpQ     = JumpQ<<8;    JumpQ     |= CommRxBuf[14];
 520   7                                  if(Mode==99)
 521   7                                  {
 522   8                                      SetupCurrentDirection = SetupU;
 523   8                                  }
 524   7                                  if(CheckSingleStep() == 0)//检测读取的工步是否合法 0:不合法。
 525   7                                  {
 526   8                                      ReturnCode = DATA_ERROR;
 527   8                                  }
 528   7                                  CommSendInfo();
 529   7                                  if(ReturnCode==RIGHT)
 530   7                                  {
 531   8                                      SaveSingleStep();
 532   8                                  }
 533   7                              }
 534   6                              else
 535   6                              {
 536   7                                  ReturnCode = LOGIC_ERROR;
 537   7                                  CommSendInfo();
 538   7                              }
 539   6                          }break;
 540   5                          case 3:// 模块停止
 541   5                          {
 542   6                              if(State == RUN || State == PAUSE )
 543   6                              {
 544   7                                  State = STOP;
 545   7                              }
 546   6                              else
 547   6                              {
 548   7                                  ReturnCode = LOGIC_ERROR;
 549   7                              }
 550   6                              CommSendInfo();
C51 COMPILER V7.06   COMM                                                                  01/22/2007 09:50:04 PAGE 10  

 551   6                          }break;
 552   5                          case 4:// 模块启动
 553   5                          {
 554   6                              if(State==STOP)
 555   6                              {
 556   7      //                            ProgramNo = CommRxBuf[0];
 557   7                                  Step = CommRxBuf[0];
 558   7                                  if(Step<=STEP_MAX)
 559   7                                  {
 560   8                                      ProgramNo = 0;
 561   8                                      State = RUN;
 562   8                                      ReadLoopTimes();
 563   8                                  }
 564   7                                  else
 565   7                                  {
 566   8                                      ReturnCode = DATA_ERROR;
 567   8                                  }
 568   7                              }
 569   6                              else
 570   6                              {
 571   7                                  ReturnCode = LOGIC_ERROR;
 572   7                              }
 573   6                              CommSendInfo();
 574   6                          }break;
 575   5                          case 5:// 工步续接
 576   5                          {
 577   6                              CommSendInfo();
 578   6                          }break;
 579   5                          case 6:// 模块暂停
 580   5                          {
 581   6                              if(State==RUN)
 582   6                              {
 583   7                                  State = PAUSE;
 584   7                                  EepromWriteByte(E2State ,State);
 585   7                              }
 586   6                              else
 587   6                              {
 588   7                                  ReturnCode = LOGIC_ERROR;
 589   7                              }
 590   6                              CommSendInfo();
 591   6                          }break;
 592   5                          case 7:// 模块由暂停恢复运行
 593   5                          {
 594   6                              if(State==PAUSE)
 595   6                              {
 596   7                                  State = RUN;
 597   7                                  EepromWriteByte(E2State ,State);
 598   7                              }
 599   6                              else
 600   6                              {
 601   7                                  ReturnCode = LOGIC_ERROR;
 602   7                              }
 603   6                              CommSendInfo();
 604   6                          }break;
 605   5                          case 8:// 读取工步
 606   5                          {
 607   6                              CommSendWorkStepInfo();
 608   6                          }break;
 609   5                          case 0xC0:// 设模块参数
 610   5                          {
 611   6                              uint16 idata temp16;
 612   6                              temp16 = CommRxBuf[1];temp16 = temp16<<8;temp16 = temp16 | CommRxBuf[2];
C51 COMPILER V7.06   COMM                                                                  01/22/2007 09:50:04 PAGE 11  

 613   6                              if(temp16 <= PARAMETER_MAX && temp16 >=PARAMETER_MIN && CommRxBuf[0]<8)
 614   6                              {
 615   7                                  switch(CommRxBuf[0])
 616   7                                  {
 617   8                                      case 0:temp16 = E2Uk ;break;
 618   8                                      case 1:temp16 = E2Ub ;break;
 619   8                                      case 2:temp16 = E2Ik ;break;
 620   8                                      case 3:temp16 = E2Ib ;break;
 621   8                                      case 4:temp16 = E2DAk;break;
 622   8                                      case 5:temp16 = E2DAb;break;
 623   8                                      case 6:temp16 = E2Tk ;break;
 624   8                                      case 7:temp16 = E2Tb ;break;
 625   8                                  }
 626   7                                  EepromWriteByteA(temp16,CommRxBuf[1]);
 627   7                                  EepromWriteByteA(temp16+1,CommRxBuf[2]);
 628   7                                  switch(CommRxBuf[0])
 629   7                                  {
 630   8                                      case 0:Uk  = EepromReadWordA(E2Uk) ;break;
 631   8                                      case 1:Ub  = EepromReadWordA(E2Ub) ;break;
 632   8                                      case 2:Ik  = EepromReadWordA(E2Ik) ;break;
 633   8                                      case 3:Ib  = EepromReadWordA(E2Ib) ;break;
 634   8                                      case 4:DAk = EepromReadWordA(E2DAk);break;
 635   8                                      case 5:DAb = EepromReadWordA(E2DAb);break;
 636   8                                      case 6:Tk  = EepromReadWordA(E2Tk) ;break;
 637   8                                      case 7:Tb  = EepromReadWordA(E2Tb) ;break;
 638   8                                  }
 639   7                              }
 640   6                              else
 641   6                              {
 642   7                                  ReturnCode = DATA_ERROR;
 643   7                              }
 644   6                              CommSendInfo();
 645   6                          }break;
 646   5                          case 0xC1:// 取模块参数
 647   5                          {
 648   6                              CommSendParaInfo();
 649   6                          }break;
 650   5                          default:
 651   5                          {
 652   6                              ReturnCode = CID_ERROR;
 653   6                              CommSendInfo(); 
 654   6                          }
 655   5                      }//switch (CommCid)
 656   4                  }//if(ReturnCode==1)//如果报文的校验和,类型正确]
 657   3                  else//如果校验和或类型不正确
 658   3                  {
 659   4                      CommSendInfo();
 660   4                  }
 661   3              }//if(CommNewMessage==1)
 662   2          }//for(;;)
 663   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   2460    ----
   CONSTANT SIZE    =      4    ----
   XDATA SIZE       =   ----      13
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       1
   IDATA SIZE       =   ----       9
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.

C51 COMPILER V7.06   COMM                                                                  01/22/2007 09:50:04 PAGE 12  


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

⌨️ 快捷键说明

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