📄 slave.lst
字号:
-**/
609 void SetBodeRate(uchar boderate)
610 {
611 1 switch(boderate)
612 1 {
613 2 case 0x01: //2400
614 2 TH1=0xE6;
615 2 break;
616 2 case 0x02: //4800
617 2 TH1=0xF3;
618 2 break;
619 2 case 0x03: //9600
620 2 TH1=0xF9;
621 2 break;
622 2 default:
623 2 break;
624 2 }
C51 COMPILER V7.50 SLAVE 03/17/2008 11:04:03 PAGE 12
625 1
626 1 TR1=1;//定时器1开
627 1 }
628
629 /*********************************************************************************************************
-**
630 功能:Send7017Order,发送7017外设数据采集命令。
631 描述:通过外设号给7017类型的外设发送采集数据的命令。
632 参数:wsaddress---外设编号
633 返回:无
634 **********************************************************************************************************
-**/
635 void Send7017Order(uchar wsaddress)
636 {
637 1 switch(wsaddress)
638 1 {
639 2 case 01: //外设1
640 2 {
641 3 SendBuff[0]=0x23; SendBuff[1]=0x30; SendBuff[2]=0x31; SendBuff[3]=0x0D; //#01
642 3 }
643 2 break;
644 2
645 2 case 02: //外设2
646 2 {
647 3 SendBuff[0]=0x23; SendBuff[1]=0x30; SendBuff[2]=0x32; SendBuff[3]=0x0D; //#02
648 3 }
649 2 break;
650 2
651 2 case 03: //外设3
652 2 {
653 3 SendBuff[0]=0x23; SendBuff[1]=0x30; SendBuff[2]=0x33; SendBuff[3]=0x0D; //#03
654 3 }
655 2 break;
656 2
657 2 case 04: //外设4
658 2 {
659 3 SendBuff[0]=0x23; SendBuff[1]=0x30; SendBuff[2]=0x34; SendBuff[3]=0x0D; //#04
660 3 }
661 2 break;
662 2
663 2 case 05: //外设5
664 2 {
665 3 SendBuff[0]=0x23; SendBuff[1]=0x30; SendBuff[2]=0x35; SendBuff[3]=0x0D; //#05
666 3 }
667 2 break;
668 2
669 2 default:
670 2 break;
671 2
672 2 }
673 1 SendStringCom(SendBuff,4);
674 1 }
675
676 /*********************************************************************************************************
-**
677 功能:Send7053Order,发送7053外设数据采集命令。
678 描述:通过外设号给7053类型的外设发送采集数据的命令。
679 参数:wsaddress---外设编号
680 返回:无
681 **********************************************************************************************************
-**/
682 void Send7053Order(uchar wsaddress)
C51 COMPILER V7.50 SLAVE 03/17/2008 11:04:03 PAGE 13
683 {
684 1 switch(wsaddress)
685 1 {
686 2 case 01: //外设1
687 2 {
688 3 SendBuff[0]=0x40; SendBuff[1]=0x30; SendBuff[2]=0x31; SendBuff[3]=0x0D; //@01
689 3 }
690 2 break;
691 2
692 2 case 02: //外设2
693 2 {
694 3 SendBuff[0]=0x40; SendBuff[1]=0x30; SendBuff[2]=0x32; SendBuff[3]=0x0D; //@02
695 3 }
696 2 break;
697 2
698 2 case 03: //外设3
699 2 {
700 3 SendBuff[0]=0x40; SendBuff[1]=0x30; SendBuff[2]=0x33; SendBuff[3]=0x0D; //@03
701 3 }
702 2 break;
703 2
704 2 case 04: //外设4
705 2 {
706 3 SendBuff[0]=0x40; SendBuff[1]=0x30; SendBuff[2]=0x34; SendBuff[3]=0x0D; //@04
707 3 }
708 2 break;
709 2
710 2 case 05: //外设5
711 2 {
712 3 SendBuff[0]=0x40; SendBuff[1]=0x30; SendBuff[2]=0x35; SendBuff[3]=0x0D; //@05
713 3 }
714 2 break;
715 2
716 2 default:
717 2 break;
718 2 }
719 1 SendStringCom(SendBuff,4);
720 1 }
721
722 /*********************************************************************************************************
-**
723 功能:WsSerialRecieve,接收外设发送来的数据。
724 描述:通过串口中断接收外设发送过来的数据,保存在RecvDataBuff数组里,数据接收完毕时通过标识FlagProcessRecvDa
-ta
725 通知Process7017RecvData或者Process7053RecvData函数来打包接收的数据。
726 参数:无
727 返回:无
728 **********************************************************************************************************
-**/
729 void WsSerialRecieve() interrupt 4 using 3
730 {
731 1 if(RI)
732 1 {
733 2 uchar ch;
734 2 RI = 0;
735 2 ch = SBUF;
736 2 if(ch==0x3E) //若第一个字符为数据开始字符">"。
737 2 {
738 3 FlagStartRecv=1; //开始接收标志置位。
739 3 RecvDataCount = -1; //第一个字符不接收。
740 3 }
741 2
C51 COMPILER V7.50 SLAVE 03/17/2008 11:04:03 PAGE 14
742 2 if(FlagStartRecv) //若可以开始接收
743 2 {
744 3 if(RecvDataCount >=0) //若接收的个数大于0,验证接收个数的有效性。
745 3 {
746 4 RecvDataBuff[RecvDataCount]=ch; //保存接收的数据
747 4 }
748 3 RecvDataCount++; //接收的个数加一
749 3 if(RecvDataCount > (RecvDataSize-1)) //如果接收的数据已经接收完毕
750 3 {
751 4 FlagProcessRecvData=1; //FlagProcessRecvData置位,通知函数来打包该数据。
752 4 FlagStartRecv=0; //开始接收标识复位,暂时不接受外设数据。
753 4 RecvDataCount=-1; //接收个数也复位为-1.
754 4 }
755 3 }
756 2 }
757 1 }
758
759 /*********************************************************************************************************
-**
760 功能:Process7017RecvData,打包7017的外设数据。
761 描述:当外设为7017,且FlagProcessRecvData==1时,调用该函数来打包外设7017的数据,并且保存在相应的存储器中。
762 参数:wsaddress---外设编号
763 返回:无
764 **********************************************************************************************************
-*/
765 void Process7017RecvData(uchar wsaddress)
766 {
767 1 uchar j=0,len=0; //通道值
768 1 uchar Output = 0; //保存输出动作号。
769 1 uchar TempH,TempL; //TempH---用来保存整数,TempL---用来保存小数
770 1 uint Max,Min;
771 1 uint length;
772 1 uint Temp1;
773 1 uint address1; //原来的外设的最大最小等信息的存储地址
774 1 uint address2; //从机的数据存储地址 ;
775 1 uint address3; //报警值存储地址。
776 1 xdata uchar TempBuff[WsChannelParaLen];
777 1 xdata uchar TiJiaoDataBuff[7];
778 1 for(j = Channel1 ;j <= Channel8;j++)
779 1 {
780 2 TempH=(RecvDataBuff[j*7+1]-0x30)*10+(RecvDataBuff[j*7+2]-0x30);//取出2为整数,并且转化为数值。
781 2 if(RecvDataBuff[j*7] == 0x2D)//判断数据的符号,若为负。
782 2 TempH=TempH|0x80; //将最高位置1,标识该值为负。
783 2
784 2 TempL=(RecvDataBuff[j*7+4]-0x30)*10+(RecvDataBuff[j*7+5]-0x30); //除掉小数点,取出2位小数位(有3位)。
785 2
786 2 address1=Ws1channel1 +(wsaddress-1)* 0x100+ j * 0x10;
787 2
788 2 MyReadBytes(address1,TempBuff,WsChannelParaLen);//读原来的最大,最小值等信息
789 2
790 2 //通道j的参数 最大值整数,最大值小数,最小值整数,最小值小数,超高报警高,超高报警低,超低报警高,超低
-报警低,使能,超低报警动作号,超低报警动作号。
791 2 // TempBuff[i] 0 1 2 3 4 5 6 7
- 8 9 10
792 2 if(1/*TempBuff[8]*/) //使能位为1,提交数据包
793 2 {
794 3 TiJiaoDataBuff[0]=StartFlag; //包开始标识
795 3 TiJiaoDataBuff[1]=CmdSendSlave; //包标志
796 3 TiJiaoDataBuff[2]=SlaveCode; //从机编号
797 3 TiJiaoDataBuff[3]=wsaddress; //外设编号
798 3 TiJiaoDataBuff[4]=j; //通道编号
799 3 TiJiaoDataBuff[5]=TempH; //整数数值
C51 COMPILER V7.50 SLAVE 03/17/2008 11:04:03 PAGE 15
800 3 TiJiaoDataBuff[6]=TempL; //小数数值
801 3
802 3 length=GetMyDataBytes(MyDataLenAdd); //取出当前已保存的数据长度,用来计算下一次的保存地址。
803 3 if((length +7) > DataLen7017)
804 3 {
805 4 address2 = MyDataStart;
806 4 MyWriteBytes(address2,TiJiaoDataBuff,LenCmdSendSlave); //以数据包的形式存储到存储器。
807 4 MyWriteOneByte(MyDataLenAdd,(DataLen7017%256)); //设置新的数据长度。
808 4 MyWriteOneByte(MyDataLenAdd+1,(DataLen7017/256)); //设置新的数据长度。
809 4 }
810 3 else
811 3 {
812 4 address2 = MyDataStart + length; //计算保存的地址。
813 4 MyWriteBytes(address2,TiJiaoDataBuff,LenCmdSendSlave); //以数据包的形式存储到存储器。
814 4 SetMyDataBytes(MyDataLenAdd,LenCmdSendSlave); //设置新的数据长度。
815 4 }
816 3
817 3 //通道j参数 最大值整数,最大值小数,最小值整数,最小值小数,超高报警高,超高报警低,超低报警高,超
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -