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

📄 uart1.c

📁 avr单片机软件模拟viic协议.嵌入式定时器。i2c编程。
💻 C
📖 第 1 页 / 共 3 页
字号:
			   u1_command_=0x00;
		     }
		     break;
		   case 0x06:	 //设置模块的身份地址
		     if (u1_acc==0x01)
		     { u1_receflag=0x07;
		       u1_count=2;
			   pu1_command=data_buf;
			   changeslave_num=0;
			   idle_time=eeidle_time;
		     }
		     else if (u1_acc==0x02)
			   { u1_receflag=30;
			     u1_count=2;
				 pu1_command=data_buf;
				 changeslave_num=0;
				 idle_time=eeidle_time;
			   }
			   else
		       { u1_command[0]=0xf4;
			     u1_command[1]=0x03;
			     u1_command[2]=ee_slave[0];
			     u1_command[3]=ee_slave[1];
			     temp_int=IEMI;
                 u1_command[4]=temp_int>>8;
                 u1_command[5]=temp_int & 0xff;
			     u1_sendlen=6;
			     u1send_command();
			   }
			 break;
		   case 0x07:	 
		     *pu1_command=u1_acc;
		     pu1_command++;
		     u1_count--;
		     if (u1_count==0)
		     { //cslave[0]=u1_command[0];
			   //cslave[1]=u1_command[1];
			   t0_rtflag=1;
			   u0_sendflag=14;
			   u1_receflag=0;
			   u1_command_=0x00;
		     }
		     break;
		   case 0x08:	 //设置模块连接数据中心的地址
		     if ((u1_acc==0x01) || (u1_acc==0x02))
		     { ip_flag=u1_acc;
			   u1_receflag=0x09;
		       u1_count=8;
			   pu1_command=data_buf;
		     }
		     else
		       { u1_command[0]=0xf5;
			     u1_command[1]=0x03;
			     for (i=2;i<10;i++)
				 { u1_command[i]=ip[i-2];
				 }
				 for (i=10;i<18;i++)
				 { u1_command[i]=ip2[i-10];
				 }
				 u1_sendlen=18;
				 u1send_command();
			   }
		     break;
		   case 0x09:
		     *pu1_command=u1_acc;
		     pu1_command++;
		     u1_count--;
		     if (u1_count==0)
		     { ee_flag=1;
			   ee_len=8;
			   u1_receflag=0;
			   u1_command_=0x00;
			   if (ip_flag==1)
			   { ee_address=IP_ID;
			     for (i=0;i<8;i++)
			     { ip[i]=data_buf[i];
			     }
			     convert_ip(ip,ip_number1); 
			   }
			   else
			     { ee_address=IP_ID+8;
				   for (i=0;i<8;i++)
			       { ip2[i]=data_buf[i];
			       }
				   convert_ip(ip2,ip_number2);
				 }
		     }
		     break;
		   case 10:	//设置模块的空闲连接时间
		     if (u1_acc==0x01)
		     { u1_receflag=11;
		       u1_count=2;
			   pu1_command=data_buf;
		     }
		     else 
		       { u1_command[0]=0xf6;
			     u1_command[1]=0x03;
			     u1_command[2]=eeidle_time >> 8;
			     u1_command[3]=eeidle_time & 0xff;
			     u1_sendlen=4;
			     u1send_command();
			   }
		     break;
		   case 11:
		     *pu1_command=u1_acc;
		     pu1_command++;
		     u1_count--;
		     if (u1_count==0)
		     { ee_flag=1;
			   ee_len=2;
			   ee_address=DELAY_ID;
			   u1_receflag=0;
			   eeidle_time=data_buf[0]*256+data_buf[1];
			   u1_command_=0x00;
		     }
		     break;
		   case 12:	 //设置模块的密码组码
		     if (u1_acc==0x01)
		     { u1_receflag=13;
		       u1_count=4;
			   pu1_command=data_buf;
		     }
		     else
		       { u1_command[0]=0xf7;
			     u1_command[1]=0x03;
				 u1_command[2]=group[0];
				 u1_command[3]=group[1];
				 u1_command[4]=group[2];
				 u1_command[5]=group[3];	  
			     u1_sendlen=6	   ;
			     u1send_command();
			   }
		     break;
		   case 13:
		     *pu1_command=u1_acc;
		     pu1_command++;
		     u1_count--;
		     if (u1_count==0)
		     { ee_flag=1;
			   ee_len=4;
			   ee_address=CIPHER_ID;
			   u1_receflag=0;
			   u1_command_=0x00;
			   group[0]=data_buf[0];
			   group[1]=data_buf[1];
			   group[2]=data_buf[2];
			   group[3]=data_buf[3];
		     }
		     break;
		   case 14:  //主被动模式选择
		     if (u1_acc==0x01)
		     { u1_receflag=15;
		     }
		     else
		       { u1_command[0]=0xf8;
			     u1_command[1]=0x03;
			     u1_command[2]=zb_mode;
			     u1_sendlen=3;
			     u1send_command();
			   }
		     break;
		   case 15:  
		     if (u1_acc==0)
			   data_buf[0]=0;
		     else
			   data_buf[0]=1; 
			 zb_mode=data_buf[0];
			 ee_flag=1;
			 ee_len=1;
			 ee_address=ZB_MODE;
			 u1_receflag=0;
			 u1_command_=0x00;
		     break;
		   case 16: //格式传输或透明传输
		     if (u1_acc==0x01)
		     { u1_receflag= 17;
		     }
		     else
		       { u1_command[0]=0xf9;
			     u1_command[1]=0x03;
			  	 u1_command[2]=gt_quomodo;//
				 u1_sendlen=3;
				 u1send_command();
			   }
		     break;
		   case 17:
		     if (u1_acc==0x00)
		       data_buf[0]=0;
		     else
		       data_buf[0]=1;
			 gt_quomodo=data_buf[0];
			 ee_flag=1;
			 ee_len=1;
			 ee_address=GT_MODE;
			 u1_receflag=0;
			 u1_command_=0x00;
		     break;
		   case 18: //确定模块是透明模式1或2
		     if (u1_acc==0x01)
		     { u1_receflag=19;
		     }
		     else
		       { u1_command[0]=0xfb;
			     u1_command[1]=0x03;
			     u1_command[2]=lucidity_mode;
			     u1_sendlen=3;
			     u1send_command();
			   }
		     break;
		   case 19:
		     if (u1_acc==0x00)
			   data_buf[0]=0;
		     else
		       data_buf[0]=1;
			 lucidity_mode=data_buf[0];
			 ee_flag=1;
			 ee_len=1;
			 ee_address=T_MODE;
			 u1_receflag=0;
			 u1_command_=0x00;
		     break;
		   case 20:  //确定模块透明方式下的地址算法
		     if (u1_acc==0x01)
		     { u1_receflag=21;
		       u1_count=4;
			   pu1_command=data_buf;
		     }  	 	 	
		     else
		       { u1_command[0]=0xe1;
			     u1_command[1]=0x03;
				 u1_command[2]=t2_para[0];
				 u1_command[3]=t2_para[1];
				 u1_command[4]=t2_para[2];
				 u1_command[5]=t2_para[3];
			     u1_sendlen=6;
			     u1send_command();
			   }
		     break;
		   case 21:
		     *pu1_command=u1_acc;
		     pu1_command++;
		     u1_count--;
		     if (u1_count==0)
		     { ee_flag=1;
			   ee_len=4;
			   ee_address=T2_PARA;
			   u1_receflag=0;
			   t2_para[0]=data_buf[0];
	           t2_para[1]=data_buf[1];
	           t2_para[2]=data_buf[2];
	           t2_para[3]=data_buf[3];
			   start_address=t2_para[0];
		       addr_len=t2_para[1];
			   u1_command_=0x00;
		     }
		     break;
		   case 22: //模块在被动模式下的地址
		     if (u1_acc==0x01)
		     { u1_receflag=23;
		       u1_count=2;
			   pu1_command=data_buf;
		     }
		     else
		       { u1_command[0]=0xe2;
			     u1_command[1]=0x03;
			     u1_command[2]=b_address[0];
			     u1_command[3]=b_address[1];
			     u1_sendlen=4;
			     u1send_command();
			   }
		     break;
		   case 23:
		     *pu1_command=u1_acc;
		     pu1_command++;
		     u1_count--;
		     if (u1_count==0)
		     { ee_flag=1;
			   ee_len=2;
			   ee_address=ADDRESS_ID;
			   u1_receflag=0;
			   b_address[0]=data_buf[0];
			   b_address[1]=data_buf[1];
			   u1_command_=0x00;
		     }
		     break;
		   case 24: //模块的端口号
		     if (u1_acc==0x01)
		     { u1_receflag=25;
		       u1_count=4;
			   pu1_command=data_buf;
		     }
		     else
		       { u1_command[0]=0xe3;
			     u1_command[1]=0x03;
			    // for (i=0;i<4;i++)
			    // { u1_command[i+2]=port[i];
			    // }
			     u1_command[2]=port[0];
				 u1_command[3]=port[1];
				 u1_command[4]=port[2];
				 u1_command[5]=port[3];
				 u1_sendlen=6;
			     u1send_command();
			   }
		     break;
		   case 25:
		     *pu1_command=u1_acc;
		     pu1_command++;
		     u1_count--;
		     if (u1_count==0)
		     { ee_flag=1;
			   ee_len=4;
			   ee_address=PORT_ID;
			   u1_receflag=0;
			   port[0]=data_buf[0];
			   port[1]=data_buf[1];
			   port[2]=data_buf[2];
			   port[3]=data_buf[3];
			   u1_command_=0x00;
		     }
		     break;
		   case 26: //设置心跳重启次数
		     if (u1_acc==0x01)
		     { u1_receflag=27;
		     }
		     else
		       { u1_command[0]=0xe4;
			     u1_command[1]=0x03;
				 u1_command[2]=eeheart_reset;
			     u1_command[3]=heart_reset;
			     u1_sendlen=4;
			     u1send_command();
			   }
		     break;
		   case 27:
		     data_buf[0]=u1_acc;
		     ee_flag=1;
			 ee_len=1;
			 ee_address=Heart_Reset;
			 eeheart_reset=data_buf[0];
			 u1_receflag=0;
	   	     u1_command_=0x00;
		     break;
		//   case 28:
		 //    if (u1_acc==0x01)
		//     { u1_receflag=29;
		 //      u1_count=2;
		//	   pu1_command=data_buf;
		 //    }
		 //    else
		   //    { u1_command[0]=0xd2;
		//	     u1_command[1]=0x03;
		//	     u1_command[2]=communication_reset>>8;
			 //    u1_command[3]=communication_reset & 0xff;
			  //   u1_sendlen=4;
			//     u1send_command();
			 //  }
		   //  break;
		 //  case 29: //设置通信延迟重启时间
		 //    *pu1_command=u1_acc;
		  //   pu1_command++;
		   //  u1_count--;
		    // if (u1_count==0)
		   //  { ee_flag=1;
		//	   ee_len=2;
	//		   ee_address=Commnu_Timeout;
	//		   u1_receflag=0;
	//		   u1_command_=0x00;
	//	     }
	//	     break;
		   case 30:
		     *pu1_command=u1_acc;
		     pu1_command++;
		     u1_count--;
		     if (u1_count==0)
		     { at[8]=data_buf[2];
			   at[9]=data_buf[3];
			   t0_rtflag=1;
			   u0_sendflag=15;
			   u1_receflag=0;
			   u1_command_=0x00;
		     }
		     break;
	     }
	   }
	   else //接收上位机要发送的数据 
	     { if (zb_mode==0) //被动模式
		   { if (gt_quomodo!=0)	 
		     { switch (u1_receflag)	  //被动模式下的格式传输
			   { case 0:			  //receive head
			       if (u1_acc=='$')
					 u1_receflag=1;
			       break;
			     case 1:			  //receive "bd" address high
				   if (u1_acc==b_address[0])
				     u1_receflag=2;
				   else
				     u1_receflag=0;
				   break;
				 case 2:			  //receive "bd" address low
				   if (u1_acc==b_address[1])
				     u1_receflag=3;
				   else
				     u1_receflag=0;
				   break;
				 case 3:			 //receive command 
				   if (u1_acc=='W')
				   { u1_receflag=4;
				     u1_count=2;
					 pu1_command=u1_datalen;
				   }
				   else if (u1_acc=='R')
					 u1_receflag=11;
				   else if (u1_acc=='M')
				     u1_receflag=13;
				   else
				     u1_receflag=100;
				   break;
				 case 4:
				   u1_count--;
				   *pu1_command=u1_acc;

⌨️ 快捷键说明

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