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

📄 复件 main_stop1.c.bak

📁 基于485的51单片机多机通讯程序
💻 BAK
📖 第 1 页 / 共 5 页
字号:
									{
										sbuffer1[temp_pc]=*(point+temp_pc-temp_delt)/256;
										temp_delt++;
									}
									else
										sbuffer1[temp_pc]=*(point+temp_pc-temp_delt)%256;
								}
								sbuffer1[23]=0;
							}break;
						case 2:	{
								point=&pp.x[snum][20];
								for(temp_pc=3;temp_pc<15;temp_pc++)
								{
									if(temp_pc%2==1)
									{
										sbuffer1[temp_pc]=*(point+temp_pc-temp_delt)/256;
										temp_delt++;
									}
									else
										sbuffer1[temp_pc]=*(point+temp_pc-temp_delt)%256;
								}
								for(temp_pc=15;temp_pc<24;temp_pc++)
									sbuffer1[temp_pc]=0;
							}break;
						case 3: {
								point=&pp.x[snum][26];
								for(temp_pc=3;temp_pc<11;temp_pc++)
								{
									if(temp_pc%2==1)
									{
										sbuffer1[temp_pc]=*(point+temp_pc-temp_delt)/256;
										temp_delt++;
									}
									else
										sbuffer1[temp_pc]=*(point+temp_pc-temp_delt)%256;
								}
								for(temp_pc=11;temp_pc<24;temp_pc++)
									sbuffer1[temp_pc]=0;
							}break;
						default:break;
					}
					s_byte_nums=get_byte_nums(p_in_sec);
					TR_ans();
	RESEND4:			if(resend==1||overtime==1)
					{
						c_err++;
						resend=0;
						overtime=0;
						if(c_err<5)
						{			
							TR_ans();
							goto RESEND4;
						}
						else
						{
							c_err=0;
							main_err=1;
							err=2;
							stop=0;
							while(urgent_stop==0);
							goto END_P;
						}
					}
					else
						c_err=0;
				}
			}
		}
	}
END_P:	p_send=0;
	s_p=0;
}

void send_param1()
{
	unsigned char	axis[]={M_current_P,M_RW_P,M_OA_P},temp_pc,temp_delt,snum,anum,c_err;

	p_send=1;
	s_p=1;
	c_err=0;
	if(existent[0]==1)
	{
		point=&pp.t01;
		temp_delt=2;
		sbuffer1[0]=M_current_P;		//电流和面板接收
		sbuffer1[1]=p_out_sec;			//电流区间外参数
		sbuffer1[52]=0;
		sbuffer1[53]=0;
		sbuffer1[54]=0;
		for(temp_pc=2;temp_pc<52;temp_pc++)
		{
			if(temp_pc%2==0)
			{
				sbuffer1[temp_pc]=*(point+temp_pc-temp_delt)/256;
				temp_delt++;
			}
			else
				sbuffer1[temp_pc]=*(point+temp_pc-temp_delt)%256;
		}
		s_byte_nums=55;
		TR_ans();
	RESEND:	if(resend==1||overtime==1)
		{
			c_err++;
			resend=0;
			overtime=0;
			if(c_err<5)
			{			
				TR_ans();
				goto RESEND;
			}
			else
			{
				c_err=0;
				err=2;
				stop=0;
				while(urgent_stop==0);
					goto END_P1;
			}
		}
		else
			c_err=0;
	}
	if(existent[1]==1)
	{	
		s_p=1;
		point=&pp.k2;
		temp_delt=2;
		sbuffer1[0]=M_RW_P;			//旋转/送丝和面板接收
		sbuffer1[1]=p_out_sec;			//旋转/送丝区间外参数
		for(temp_pc=2;temp_pc<50;temp_pc++)
		{
			if(temp_pc%2==0)
			{
				sbuffer1[temp_pc]=*(point+temp_pc-temp_delt)/256;
				temp_delt++;
			}
			else
				sbuffer1[temp_pc]=*(point+temp_pc-temp_delt)%256;
		}
		for(temp_pc=50;temp_pc<55;temp_pc++)
			sbuffer1[temp_pc]=0;
		s_byte_nums=55;
		TR_ans();
	RESEND1: if(resend==1||overtime==1)
		{
			c_err++;
			resend=0;
			overtime=0;
			if(c_err<5)
			{			
				TR_ans();
				goto RESEND1;
			}
			else
			{
				c_err=0;
				err=2;
				stop=0;
				while(urgent_stop==0);
					goto END_P1;
			}
		}
		else
			c_err=0;
	}
	if(existent[2]==1)
	{
		s_p=1;
		point=&pp.k4;
		temp_delt=2;
		sbuffer1[0]=M_OA_P;			//横摆和面板接收
		sbuffer1[1]=p_out_sec;			//横摆区间外参数
		for(temp_pc=2;temp_pc<52;temp_pc++)
		{
			if(temp_pc%2==0)
			{
				sbuffer1[temp_pc]=*(point+temp_pc-temp_delt)/256;
				temp_delt++;
			}
			else
				sbuffer1[temp_pc]=*(point+temp_pc-temp_delt)%256;
		}
		for(temp_pc=52;temp_pc<55;temp_pc++)
			sbuffer1[temp_pc]=0;
		s_byte_nums=55;
		TR_ans();
	RESEND2: if(resend==1||overtime==1)
		{
			c_err++;
			resend=0;
			overtime=0;
			if(c_err<5)
			{			
				TR_ans();
				goto RESEND2;
			}
			else
			{
				c_err=0;
				err=2;
				stop=0;
				while(urgent_stop==0);
					goto END_P1;
			}
		}
		else
			c_err=0;
	}
	if(pp.sec_num>0)
	{
		for(anum=0;anum<3;anum++)
		{
			s_p=1;
			for(snum=0;snum<pp.sec_num;snum++)
			{
				if(existent[anum]==1||(anum==2&&(existent[anum]==1||existent[anum+1]==1)))
				{
				s_p=1;
				switch(anum)
				{
					case 0:	point=&pp.x[snum][0];break;
					case 1:	point=&pp.x[snum][10];break;
					case 2:	point=&pp.x[snum][20];break;
					default:break;
				}
				temp_delt=3;
				sbuffer1[0]=axis[anum];
				sbuffer1[1]=p_in_sec;
				sbuffer1[2]=snum;

				for(temp_pc=3;temp_pc<23;temp_pc++)
				{
					if(temp_pc%2==1)
					{
						sbuffer1[temp_pc]=*(point+temp_pc-temp_delt)/256;
						temp_delt++;
					}
					else
						sbuffer1[temp_pc]=*(point+temp_pc-temp_delt)%256;
				}
				sbuffer1[23]=0;

				s_byte_nums=get_byte_nums(p_in_sec);
				TR_ans();
RESEND3:			if(resend==1||overtime==1)
				{
					c_err++;
					resend=0;
					overtime=0;
					if(c_err<5)
					{			
						TR_ans();
						goto RESEND3;
					}
					else
					{
						c_err=0;
						err=2;
						stop=0;
						while(urgent_stop==0);
							goto END_P1;
					}
				}
				else
					c_err=0;

			}
		}
	}
END_P1:	p_send=0;
	s_p=0;
}

void ini_ram()
{
	for(times=0;times<6;times++)
	{
		readEEP_page();
		delay(13);
	}
}

void switch_state()
{
	ini_sbuf(M_P_RC,program,PRG,0,0,0,0);
	s_byte_nums=4;
	TR_noans();
	ini_sbuf(M_RC,command,com_weld_simu,0,0,0,0);
	s_byte_nums=4;
	wait_ans=1;
	TR_ans();
	wait_ans=0;
	YOUHU=rbuffer[3];
	new_switch11=0;
	ini_sbuf(M_current,infor,com_weld_simu,YOUHU,0,0,0);
	s_byte_nums=6;
	TR_noans();
//	TR_ans();

	ini_sbuf(M_RC,command,com_wire_on_off,0,0,0,0);
	s_byte_nums=4;
	wait_ans=1;
	TR_ans();
	wait_ans=0;
	WIRE=rbuffer[3];
	new_switch22=0;
	ini_sbuf(M_RW,infor,com_wire_on_off,WIRE,0,0,0);
	s_byte_nums=6;
	TR_noans();
//	TR_ans();

	ini_sbuf(M_RC,command,com_delt_switch,0,0,0,0);
	s_byte_nums=4;
	wait_ans=1;
	TR_ans();
	wait_ans=0;
	delt_state=rbuffer[3];
	delt_switch=0;
	ini_sbuf(M_ALL,infor,com_delt_switch,delt_state,0,0,0);
	s_byte_nums=6;
	TR_noans();
//	TR_ans();
}

void edit()
{
	while(editing==1)
	{
			if(edit_finish==1)
			{
				p_name=76;
				param=1;
				para_table();
				param=0;
				edit_finish=0;
				editing=0;
			}
			else if(param==1)
			{
				p_name=rbuffer[2];
				para_table();
				if(temp_edit_finish==1)
				{
					edit_finish=1;
					temp_edit_finish=0;
					delay(10);
				}
			}	
		while(in_sector==1)
		{
			get_SLA();
			point=&pp.x[nonce_sec][0];	
			for(p_sec=0;p_sec<30;p_sec++)
			{
				*(point+p_sec)=rbuffer[p_sec*2+3]*256+rbuffer[p_sec*2+4];
				COMM=(mainDDR+152+nonce_sec*60+p_sec*2)/256;
				writeEEP_word();
				delay(5);
			}
			in_sector=0;
		}
	}
}

void start_t2()
{
	TM2CON=0x8D;    /*16位溢出,分频系数8,f/12*/
	EA=1;
	TM2IR=0;
}

void count()
{
	n_t01=pp.t01;
	n_t02=pp.t02;
	if(pp.gas2==ON)
	{
		n_t03=pp.t03;
		n_t04=pp.t04;
	}
	n_t12=pp.t12;
	n_t17=pp.t17;
	n_t34=pp.t34;

	if(pp.t13_sd==0)
		n_t13=pp.t13;
	if(pp.n11_sd==0)
		n_n11=pp.n11;
	if(pp.t21_sd==0)
		n_t21=pp.t21;
	if(pp.t31_sd==0)
		n_t31=pp.t31;
	if(pp.t32_sd==0)
		n_t32=pp.t32;
	if(pp.t33_sd==0)
		n_t33=pp.t33;
	if(pp.t41_sd==0)
		n_t41=pp.t41;
	if(pp.t43_sd==0)
		n_t43=pp.t43;
	if(pp.t51_sd==0)
		n_t51=pp.t51;
	if(pp.t52_sd==0)
		n_t52=pp.t52;
}

void start_woa()		//送丝、横摆、弧长哪个时间短先启动哪个
{
	if(pp.k3==1&&WIRE==ON&&t31OK==0&&wire_stoped==0)
	{
		if((pp.t31_sd==0&&c_flow>=c_current+n_t31)||(pp.t31_sd==1&&FINISH>=pp.t31))
		{
			ini_sbuf(M_RW,command,com_wire,0,0,0,0);
			s_byte_nums=4;
			wait_ans=1;
			TR_ans();
			wait_ans=0;
			t31OK=1;
		}
	}
	if(pp.k4==1&&t41OK==0)
	{
		if((pp.t41_sd==0&&c_flow>=c_current+n_t41)||(pp.t41_sd==1&&FINISH>=pp.t41))
		{
			ini_sbuf(M_OSC,command,com_osc,0,0,0,0);
			s_byte_nums=4;
			wait_ans=1;
			TR_ans();
			wait_ans=0;
			t41OK=1;
		}
	}
	if(YOUHU&&pp.k5==1&&t51OK==0&&avc_stoped==0)
	{
		if((pp.t51_sd==0&&c_flow>=c_current+n_t51)||(pp.t51_sd==1&&FINISH>=pp.t51))
		{
			ini_sbuf(M_AVC,command,com_avc,0,0,0,0);
			s_byte_nums=4;
			wait_ans=1;
			TR_ans();
			wait_ans=0;
			t51OK=1;
		}
	}
}

void EX0_INT (void) interrupt 0			//急停
{
	EX0=0;
	EA=0;
	POINTER0=0;
	SSUM=0;
	POINTER1=0;
	RSUM=0;
	s_p=0;
	if(rc_err==1)
	{
		rc_err=0;
		last_FINISH=FINISH;
		delay(5);
		EA=1;
		stop=1;
	}
	else if(main_err==1)
	{	
		main_err=0;			//清主板出错标志
		EA=1;
		ini_sbuf(M_P_RC,err_infor,M_main,err,0,0,0);
		s_byte_nums=5;
		TR_noans();
		err=0;
		stop=1;
		urgent_stop=1;
	}
	else
	{
		EA=1;
		ini_sbuf(M_current,command,com_calling,0,0,0,0);
		s_byte_nums=4;
		TR_ans();		// 对方给正常时应答类型,出错时错误信息类型
		if(rbuffer[1]==answer)
		{
			ini_sbuf(M_RW,command,com_calling,0,0,0,0);
			s_byte_nums=4;
			TR_ans();
			if(rbuffer[1]==answer)
			{
				ini_sbuf(M_OSC,command,com_calling,0,0,0,0);
				s_byte_nums=4;
				TR_ans();
				if(rbuffer[1]==answer)
				{
					ini_sbuf(M_AVC,command,com_calling,0,0,0,0);
					s_byte_nums=4;
					TR_ans();
					if(rbuffer[1]==err_infor)
					{
						if(work!=0)
						{
							ini_sbuf(M_P_RC,err_infor,M_AVC,err,0,0,0);
							s_byte_nums=5;
							TR_noans();
						}
						else
						{
							if(err==18)
							{
								ini_sbuf(M_AVC,command,com_lift,0,0,0,0);
								s_byte_nums=4;
								TR_noans();
							}
						}
						
					}
				}
				else
				{
					ini_sbuf(M_P_RC,err_infor,M_OSC,err,0,0,0);
					s_byte_nums=5;
					TR_noans();
				}
			}
			else
			{
				ini_sbuf(M_P_RC,err_infor,M_RW,err,0,0,0);
				s_byte_nums=5;
				TR_noans();
			}
		}
		else
		{
			ini_sbuf(M_P_RC,err_infor,M_current,err,0,0,0);
			s_byte_nums=5;
			TR_noans();
		}
		urgent_stop=1;
	}
	delay(5);
	ini_sbuf(M_ALL,command,com_err_ok,0,0,0,0);
	s_byte_nums=4;
	TR_noans();
	POINTER1=64;
	wait_ans=0;
}

void EX1_INT(void) interrupt 2		//响应线控器申请
{
	EX1=0;
	c_ex1++;
	if(c_ex1==3)
	{
		EX1=0;
		c_ex1=0;
		rc_demand=1;
	}
	else
		EX1=1;
}

void T1_INT (void) interrupt 3
{
	c_t1++;
	if(send==1)
	{
		if(c_t1==7)
		{
			if(s_p==0)
				S0BUF=sbuffer[POINTER0];
			else
				S0BUF=sbuffer1[POINTER0];
			c_t1=0;
		}
	}
	else
	{
			if(p_send==1)
			{
				if(c_t1==4000)
				{
					TR1=0;
					c_t1=0;
					overtime=1;
				}
				
			}
			else
			{
				if(c_t1==100)
				{
					TR1=0;
					c_t1=0;
					overtime=1;
				}
			}
	}
}

void TR_INT (void) interrupt 4					//串行口中断
{								//关中断
	if(TI==1)						//发送完成
	{
		TI=0;
		POINTER0++;					//发送缓冲指针加1
		if(POINTER0==1)
			TB8=0;
		if(POINTER0<s_byte_nums)
		{
			if(POINTER0<s_byte_nums-1)
			{
				if(s_p==1)
					SSUM=SSUM+sbuffer1[POINTER0];
				else
					SSUM=SSUM+sbuffer[POINTER0];	//6个数据字节求和
			}
			else
			{
				if(s_p==1)
					sbuffer1[s_byte_nums-1]=SSUM+sbuffer1[0];
				else
					sbuffer[s_byte_nums-1]=SSUM+sbuffer[0];	//数据和加地址生成校验码
			}
		}
	}

	if(RI==1)						//接收完成
	{
		RI=0;
		POINTER1++;				//接收缓冲指针加1
		rbuffer[POINTER1-1]=S0BUF;		//从接收缓冲读出数据
		if(rbuffer[0]==M_main)
		{
			if(POINTER1==2)
				r_byte_nums=get_byte_nums(rbuffer[1]);
			if(POINTER1<r_byte_nums)
				RSUM=RSUM+rbuffer[POINTER1-1];	//生成校验码
			else
			{
				if(rbuffer[r_byte_nums-1]==RSUM)
				{
					if(ans==0)
					{
						POINTER1=0;
						RSUM=0;
					}
					S_ANSW=OK;
					data_type();
				}
				else
				{
					S_ANSW=FAIL;
					if(resend==0)
						resend=1;
				}
			}
		}
		else
			POINTER1=0;
	}
}

⌨️ 快捷键说明

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