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

📄 main.c

📁 书中详细说明了多路数据采集的方法,以及怎么样用AD来采集数据哟,大家不妨看看嘛,说不定有所帮助哟?
💻 C
📖 第 1 页 / 共 2 页
字号:
                        Verify_ET++;
						if(Verify_ET==3)
                        {
						    Verify_ET=3;
						    lcd_init();
                            send_hz(1,1,"和校验错误");
                            send_asc16str(0,32,"->");
                            send_hz(1,2,"请检查从机设备");
                            exit_sign=1;
						}
					}
                }
                else //命令码错误
			    {
				    REN0=1;//重新允许接收
			        UART0_TX(anew_TX,3);//请求从机重新发送上一次数据
                    Verify_ET++;
					if(Verify_ET==3)
                    {
						 Verify_ET=0;
						 lcd_init();
                         send_hz(1,1,"命令码错误");
                         send_asc16str(0,32,"->");
                         send_hz(1,2,"请检查从机设备");
                         exit_sign=1;
				    }
                }
             }
		 }        
	 }                     
}


//循环采集模式处理函数
void CYC_Disp(void)
{
    bit exit_sign=0; //数据处理结束标志
    unsigned char TX_time=0;//数据重发次数计数
    unsigned char Verify_data=0;//接收和检验值
	unsigned char Verify_ET=0; //和校验错误发生次数
	unsigned char anew_TX[3]={0x01,0x00,0x00};//要求从机重发指令数组
	unsigned char send_Num=0; //条码显示计数
	unsigned char delay_num=0; //超时计数
    bit RX_sign=0;//接收数据是否为第一次数据标志
	unsigned int i;//定时控制变量
    unsigned char CYC_pass=0;
    lcd_init();
	send_asc16str(2,0,"->");
    send_hz(2,0,"循环采集");
    send_hz(0,1,"系统处理中请稍后");
    TX[0]=0x01; //从机地址
	TX[1]=0x01; //数据采集命令字
    TX[2]=0x02; //数据长度
    TX[3]=0x00;//采集通道值
	TX[4]=0x00;//和检验
	UART0_TX(TX,5);					
    while(exit_sign==0)
    {	     
		 for(i=65535;i>0;i--);
		 if(ReceiveBit==0)
         {
             UART0_TX(TX,5);
         }         
		 if(RX_sign==0)
		 {
		     send_asc16str(send_Num,32,">");//动态显示系统处理状态">>>>>>>>>>>>>>>>"
			 send_Num++;
			 if(send_Num==15)
			 {
			     send_Num=0;
			     send_asc16str(0,32,"                ");
	             delay_num++;
				 if(delay_num==3)
				 {
				     delay_num=0;
	                 lcd_init();
	                 send_hz(2,1,"通讯超时");
	                 send_asc16str(0,32,"->");
	                 send_hz(1,2,"请检查通信网络");
	                 exit_sign=1;
				 }
	         }
	     }
         if(ReceiveBit==1) //接收到一帧数据
         {
             ReceiveBit=0; //清除接收完成标志
             if(RX[1]==0)  //从机要求重发数据
             {
			     REN0=1;//重新允许接收
                 UART0_TX(TX,5);
                 TX_time++;
                 if(TX_time==3)//重发次数超过三次报警
                 {
                     TX_time=0;
                     lcd_init();
                     send_hz(1,1,"从机通讯错误");
                     send_asc16str(0,32,"->");
                     send_hz(1,2,"请检查通讯线路");
                     exit_sign=1;
                 }   
            }         
            else
            {
                if(RX[1]==1)
                {
                    Verify_data=Sum_verify(RX+3,4);//对接收的数据(一字节通道字节数据)进行和校验
                    if(Verify_data==RX[7]) //和校验正确,显示采集数值
                    {
					    if(RX_sign==0)//第一次数据发送
						{
						    RX_sign=1;
						    lcd_init();
                            send_asc16str(0,0,"1");
                            send_asc16str(1,0,":");
                            send_asc16str(3,0,".");
                            send_asc16str(6,0,"v");
                            send_asc16str(9,0,"2");
                            send_asc16str(10,0,":");
                            send_asc16str(12,0,".");
                            send_asc16str(15,0,"v");

                            send_asc16str(0,16,"3");
                            send_asc16str(1,16,":");
                            send_asc16str(3,16,".");
                            send_asc16str(6,16,"v");
                            send_asc16str(9,16,"4");
                            send_asc16str(10,16,":");
                            send_asc16str(12,16,".");
                            send_asc16str(15,16,"v");

                            send_asc16str(0,32,"5");
                            send_asc16str(1,32,":");
                            send_asc16str(3,32,".");
                            send_asc16str(6,32,"v");
                            send_asc16str(9,32,"6");
                            send_asc16str(10,32,":");
                            send_asc16str(12,32,".");
                            send_asc16str(15,32,"v");

                            send_asc16str(0,48,"7");
                            send_asc16str(1,48,":");
                            send_asc16str(3,48,".");
                            send_asc16str(6,48,"v");
                            send_asc16str(9,48,"8");
                            send_asc16str(10,48,":");
                            send_asc16str(12,48,".");
                            send_asc16str(15,48,"v");
                         }

                         switch(RX[3])//各通道数据显示
						 {
						    case 0x00:
                                send_ascii8(2,7,RX[4]+0x30); 
                                send_ascii8(4,7,RX[5]+0x30);
	                            send_ascii8(5,7,RX[6]+0x30);
								break;
							case 0x01:							    
                                send_ascii8(11,7,RX[4]+0x30); 
                                send_ascii8(13,7,RX[5]+0x30);
	                            send_ascii8(14,7,RX[6]+0x30);
								break;
                            case 0x02:
							    send_ascii8(2,23,RX[4]+0x30); 
                                send_ascii8(4,23,RX[5]+0x30);
	                            send_ascii8(5,23,RX[6]+0x30);
								break;
							case 0x03:							    
                                send_ascii8(11,23,RX[4]+0x30); 
                                send_ascii8(13,23,RX[5]+0x30);
	                            send_ascii8(14,23,RX[6]+0x30);
								break;
                            case 0x04:
							    send_ascii8(2,39,RX[4]+0x30); 
                                send_ascii8(4,39,RX[5]+0x30);
	                            send_ascii8(5,39,RX[6]+0x30);
								break;
							case 0x05:							    
                                send_ascii8(11,39,RX[4]+0x30); 
                                send_ascii8(13,39,RX[5]+0x30);
	                            send_ascii8(14,39,RX[6]+0x30);
								break;
                            case 0x06:
							    send_ascii8(2,55,RX[4]+0x30); 
                                send_ascii8(4,55,RX[5]+0x30);
	                            send_ascii8(5,55,RX[6]+0x30);
								break;
							case 0x07:							    
                                send_ascii8(11,55,RX[4]+0x30); 
                                send_ascii8(13,55,RX[5]+0x30);
	                            send_ascii8(14,55,RX[6]+0x30);
								break;						  

						}
                        TX[0]=0x01; //从机地址
	                    TX[1]=0x01; //数据采集命令字
                        TX[2]=0x02; //数据长度
                        TX[3]=(++CYC_pass)&&0x07;//采集通道值
	                    TX[4]=TX[3];//和检验
						for(i=65535;i>0;i--);
	                    UART0_TX(TX,5);
					    REN0=1;//重新允许接收
					    if(key_sign==1) //有按键
                            exit_sign=1;
					}
			        else //和校验错误
					{
					    REN0=1;//重新允许接收
					    UART0_TX(anew_TX,3);//请求从机重新发送上一次数据
                        Verify_ET++;
						if(Verify_ET==3)
                        {
						    Verify_ET=3;
						    lcd_init();
                            send_hz(1,1,"和校验错误");
                            send_asc16str(0,32,"->");
                            send_hz(1,2,"请检查从机设备");
                            exit_sign=1;
						}
					}
                }
                else //命令码错误
			    {
				    REN0=1;//重新允许接收
			        UART0_TX(anew_TX,3);//请求从机重新发送上一次数据
                    Verify_ET++;
					if(Verify_ET==3)
                    {
						 Verify_ET=0;
						 lcd_init();
                         send_hz(1,1,"命令码错误");
                         send_asc16str(0,32,"->");
                         send_hz(1,2,"请检查从机设备");
                         exit_sign=1;
				    }
                }
             }
		 }        
	 }                     
}

//和检验函数
unsigned char Sum_verify(unsigned char verify[],unsigned char ii)
{
    unsigned char Verify_Sum=0;//和校验值
	unsigned char i;
    for(i=0;i<ii;i++)
	{
	    Verify_Sum^=verify[i];
    }
    return(Verify_Sum);   
}

⌨️ 快捷键说明

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