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