📄 comm.lst
字号:
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 + -