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

📄 dc.c.bak

📁 基于485的51单片机多机通讯程序
💻 BAK
📖 第 1 页 / 共 2 页
字号:
	ET0=1;
	ET1=1;
	ES1=1;				//I2C
	EAD=1;				//AD中断允许
 	EA=1;				//中断总允许
 	start_t2();

	urgent_stop=0;
	rw_err=0;
	err_ok=0;
	err=0;
	
BEGIN:	if(urgent_stop==1)
	{
		urgent_stop=0;
		err_ok=0;
		EX1=1;
		EX0=1;
	}
	work=0;
	send_enable=0;				//关发送使能
	start=0;
	start_rot=0;
	start_wire=0;
	stop_wire=0;
	decrease=0;
	need_para=0;
	nonce_sec=0;
	in_sector=0;
	new_sector=0;
	noans_ok=1;
	S_ANSW=0;
//	R_ANSW=0;
	POINTER0=0;
	SSUM=0;
	POINTER1=0;
	RSUM=0;
	r_byte_nums=4;
	send=0;
	overtime=0;
	receive_p_out=0;
	receive_p_in=0;
	demand=0;
	resend=0;
	ans=0;
	p_b=0;				//基值
	temp_pulse_num=0;
	FINISH=0;
	rot_front=0;
	rot_reverse=0;
	rot_ok=0;
	rot_stop=0;
	rot_stop_ok=0;
	wire_add=0;
	wire_dec=0;
	wire_ok=0;
	r_slope_ok=1;
	w_slope_ok=1;
	motor_stop=0;
	retract=0;
	c_cm0=0;
	c_cm1=0;
	k_r_p_add=0;
	k_r_b_add=0;
	k_r_p_dec=0;
	k_r_b_dec=0;
	temp_rot_vp=0;
	temp_rot_vb=0;
	temp_wire_vp=0;
	temp_wire_vb=0;
	retract_ok=0;
	auto_return=0;
	return_ok=0;
	ask_return_ok=0;
	to_begin=0;

        PWMP=3;				//23.5K
	CML0=TML2+0xC8;			//CM0,400us,送丝速度变化时间
	if(CML0<TML2)
		CMH0=TMH2+1+0X00;
	else
		CMH0=TMH2+0X00;
	CML1=TML2+0XC8;
	if(CML1<TML2)			//CM1,400us,旋转速度变化时间
		CMH1=TMH2+1+0X00;
	else
		CMH1=TMH2+0X00;

	CTCON=CTCON|0X02;		//CT0捕捉下降沿
	tooth_num=11;
	EX1=1;
	EX0=1;
	while(start==0)
	{
		if(called==1)
		{
			ini_sbuf(M_main,infor,com_calling,S_ANSW,0,0);
			s_byte_nums=get_byte_nums(infor);
			TR_noans();
			called=0;
		}

		if(receive_p_out==1)
		{
			point=&pp.k2;
			for(p_sec=0;p_sec<24;p_sec++)
				*(point+p_sec)=rbuffer[p_sec*2+2]*256+rbuffer[p_sec*2+3];
			pp.k1=rbuffer[50];
			
			ini_sbuf(M_main,answer,S_ANSW,0,0,0);
			s_byte_nums=4;
			TR_noans();
			demand=0;
			receive_p_out=0;
		}

		if(receive_p_in==1)
		{
			point=&pp.x[nonce_sec][0];
			for(p_sec=0;p_sec<10;p_sec++)
				*(point+p_sec)=rbuffer[p_sec*2+3]*256+rbuffer[p_sec*2+4];

			ini_sbuf(M_main,answer,S_ANSW,0,0,0);
			s_byte_nums=4;
			TR_noans();
			demand=0;
			receive_p_in=0;
		}

		if(rot_front==1)
		{
			rot_right=1;
			rot_left=0;
			PWM0=255;
			rot_front=0;
		}

		if(rot_reverse==1)
		{
			rot_right=0;
			rot_left=1;
			PWM0=255;
			rot_reverse=0;
		}

		if(wire_add==1)
		{
			wire_back=0;
			wire_front=1;
			PWM1=255;
			wire_add=0;
		}

		if(wire_dec==1)
		{
			wire_back=1;
			wire_front=0;
			PWM1=255;
			wire_dec=0;
		}

		if(motor_stop==1)
		{
			PWM0=0;
			PWM1=0;
			wire_back=1;
			wire_front=1;
			rot_right=1;
			rot_left=1;
			rot_front=0;
			rot_reverse=0;
			wire_add=0;
			wire_dec=0;
			motor_stop=0;
		}

		if(resend==1)
		{
			ini_sbuf(M_main,answer,S_ANSW,0,0,0);
			s_byte_nums=4;
			TR_noans();
			resend=0;
		}

		if(urgent_stop==1)
			goto BEGIN;
	}
	
	pulse_num=pp.rn*tooth_num/20;	//pp.rn*tooth_num/2/10, 0.1度的脉冲数
	if(pp.k1==0)
		K21=OFF;
	else
		K21=pp.k21;
        delt_rot=51*pp.dv21/250;
	rot_vp=pp.v21_p*51/250;	//pp.v21_p*255/1250
	temp_rot_vp=0;
	if(K21==ON)
	{
		rot_vb=pp.v21_b*51/250;
		temp_rot_vb=0;
	}
	n_cm1=pp.t21*1250/pp.v21_p;		//pp.t21*100*1000*5/400/pp.v21_p

	K3=pp.k3;
	if(pp.k1==0)
		K31=OFF;
	else
		K31=pp.k31;
	delt_wire=51*pp.dv31/500;
	wire_vp=pp.v31_p*51/500;
	temp_wire_vp=0;
	if(K31==ON)
	{
		wire_vb=pp.v31_b*51/500;
		temp_wire_vb=0;
	}
	n_cm0=pp.t32*2500/pp.v31_p;		//pp.t32*100*1000*10/400/pp.v31_p

	work=3;
	if(WIRE==ON)
		kk=1;
	else
		kk=0;
	nonce_sec=0;
	if(K31==ON||K21==ON)
		IEN1=IEN1|0X08;			//允许CT3,电流脉冲
	do
	{
		if(urgent_stop==1)			//急停后返回
			goto BEGIN;
			
		if(rot_ok==0&&start_rot==1)	//开始旋转
		{
			ini_sbuf(M_main,answer,S_ANSW,0,0,0);
			s_byte_nums=4;
			TR_noans();
			if(pp.k2==CW)
			{
				rot_right=0;
				rot_left=1;
			}
			else
			{
				rot_right=1;
				rot_left=0;
			}
			rot_ok=1;
			if(K21==ON)
			{
				CTCON=CTCON|0x40;
				IEN1=IEN1|0x08;		//CT3
			}
			IEN1=IEN1|0X20;			//允许CM1
			IEN1=IEN1|0x01;			//允许CT0
			start_rot=0;
		}

		if(pp.k3==ON&&wire_ok==0&&start_wire==1)//开始送丝
		{
			ini_sbuf(M_main,answer,S_ANSW,0,0,0);
			s_byte_nums=4;
			TR_noans();
			wire_back=0;
			wire_front=1;
			wire_ok=1;
			IEN1=IEN1|0X10;			//CM0
			start_wire=0;
		}

		if(need_para==1)			//显示焊接角度
		{
			ini_sbuf(M_main,parameter1,0,0,0,0);
			sbuffer[2]=FINISH/256;
			sbuffer[3]=FINISH%256;
			s_byte_nums=5;
			TR_noans();
			need_para=0;
		}

		if(urgent_stop==1)
				goto BEGIN;
		if(rot_ok==1&&rot_front==1&&r_slope_ok==1)	//旋转速度加
		{

			if(delt_state==0||delt_state==1)
			{
				if(temp_rot_vp+delt_rot>=255)
					temp_rot_vp=255;
				else
					temp_rot_vp=temp_rot_vp+delt_rot;		//rot_vp=rot_vp-255*pp.dv21/1250
			}
			if(K21==ON)
			{
				if(delt_state==1||delt_state==2)
				{
					if(temp_rot_vb+delt_rot>=255)
						temp_rot_vb=255;
					else
						temp_rot_vb=temp_rot_vb+delt_rot;		//rot_vb=rot_vb-255*pp.dv21/1250
	
				}
			}
			else
				PWM0=temp_rot_vp;
			rot_front=0;
		}

		if(rot_ok==1&&rot_reverse==1&&r_slope_ok==1)	//旋转速度减
		{
			if(delt_state==0||delt_state==1)
			{
				if(temp_rot_vp<=delt_rot)
					temp_rot_vp=0;
				else
					temp_rot_vp=temp_rot_vp-delt_rot;		//rot_vp=rot_vp+255*pp.dv21/1250
			}
			if(K21==ON)
			{
				if(delt_state==1||delt_state==2)
				{
					if(temp_rot_vb<=delt_rot)
						temp_rot_vb=0;
					else
						temp_rot_vb=temp_rot_vb-delt_rot;		//rot_vb=rot_vb+255*pp.dv21/1250
	
				}
			}
			else
				PWM0=temp_rot_vp;
			rot_reverse=0;
		}

		if(urgent_stop==1)
				goto BEGIN;
		if(K3==ON&&WIRE==ON&&wire_ok==1&&wire_add==1&&w_slope_ok==1)//送丝速度加
		{
			if(delt_state==0||delt_state==1)
			{
				if(temp_wire_vp+delt_wire>=255)
					temp_wire_vp=255;
				else
					temp_wire_vp=temp_wire_vp+delt_wire;		//wire_vp=wire_vp-255*pp.dv31/2500
			}
			
			if(K31==ON)
			{
				if(delt_state==1||delt_state==2)
				{
					if(temp_wire_vb+delt_wire>=255)
						temp_wire_vb=255;
					else
						temp_wire_vb=temp_wire_vb+delt_wire;	//wire_vb=wire_vb-255*pp.dv31/2500
				}
			}
			else
				PWM1=temp_wire_vp;
			wire_add=0;
		}

		if(K3==ON&&WIRE==ON&&wire_ok==1&&wire_dec==1&&w_slope_ok==1)//送丝速度减
		{
			if(delt_state==0||delt_state==1)
			{
				if(temp_wire_vp<=delt_wire)
					temp_wire_vp=0;
				else
					temp_wire_vp=temp_wire_vp-delt_wire;		//wire_vp=wire_vp+255*pp.dv31/2500
			}
			if(K31==ON)
			{
				if(delt_state==1||delt_state==2)
				{
					if(temp_wire_vb<=delt_wire)
						temp_wire_vb=0;
					else
						temp_wire_vb=temp_wire_vb-delt_wire;		//wire_vb=wire_vb+255*pp.dv31/2500
				}
			}
			else
				PWM1=temp_wire_vp;
			wire_dec=0;
		}

		if(urgent_stop==1)
				goto BEGIN;
		if(wire_ok==1&&WIRE==OFF)		//手动关丝
		{
			PWM1=0;
			wire_back=1;
			wire_front=1;
			kk=0;
		}

		if(wire_ok==1&&kk==0&&WIRE==ON)	//手动开丝
		{
			wire_back=0;
			wire_front=1;
			if(K31==OFF)
				PWM1=temp_wire_vp;			
			kk=1;
		}

		if(decrease==1&&rot_ok==1&&K21==ON)	
		{
			CTCON=CTCON&0x3F;
			IEN1=IEN1&0xF7;			//CT3
			PWM0=temp_rot_vp;
			K21=OFF;
		}

		if(urgent_stop==1)
			goto BEGIN;
		if(in_sector==1&&new_sector==1)		//进入区间
		{
			K21=pp.x[nonce_sec][1];
			K3=pp.x[nonce_sec][5];
			K31=pp.x[nonce_sec][6];
			if(K21==ON||K3==ON&&K31==ON&&kk==1)
			{
				if(p_b==0)
					CTCON=CTCON|0x40;
				else
					CTCON=CTCON|0x80;
				IEN1=IEN1|0x08;		//CT3
			}
			rot_vp=pp.x[nonce_sec][2]*51/250;
			if(K21==ON)					//脉动旋转开关
				rot_vb=pp.x[nonce_sec][3]*51/250;
			r_slope_ok=0;
			c_cm1=0;
			n_cm1=pp.x[nonce_sec][4]*1250/rot_vp;
			IEN1=IEN1|0X20;			//CM1

			if(K3==ON&&kk==1)
			{
				wire_ok=1;
				wire_vp=pp.x[nonce_sec][8]*51/500;
				if(K31==ON)
					wire_vb=pp.x[nonce_sec][9]*51/500;
				w_slope_ok=0;
				c_cm0=0;
				n_cm0=pp.x[nonce_sec][7]*2500/wire_vp;
				IEN1=IEN1|0X10;		//CM0
			}
//			else
//			{
//				PWM0=0;
//				rot_right=1;
//				rot_left=1;
//				wire_ok=0;
//			}
			
			new_sector=0;
		}

		if(K3==ON&&WIRE==ON&&wire_ok==1&&stop_wire==1)		//停止送丝
		{
			ini_sbuf(M_main,answer,S_ANSW,0,0,0);
			s_byte_nums=4;
			TR_noans();
			PWM1=0;
			wire_back=1;
			wire_front=1;
			wire_ok=0;			//抽丝时没有脉动
			delay(2);				//79um
			if(pp.t34>0)
			{
				retract=1;			//抽丝标志
				wire_back=1;
				wire_front=0;
				CML0=TML2+0X50;			//100ms
				if(CML0<TML2)
					CMH0=TMH2+1+0XC3;
				else
					CMH0=TMH2+0XC3;
				n_cm0=pp.t34;
				c_cm0=0;
				PWM1=(127500-51*pp.v32)/500;	//PWM1=255*(2500-pp.v32)/2500
				IEN1=IEN1|0X10;			//允许CM0,抽丝
			}
			stop_wire=0;
		}

		if(urgent_stop==1)
				goto BEGIN;
		if(rot_stop==1)			//停止旋转
		{
			PWM0=0;
			rot_right=1;
			rot_left=1;
			IEN1=IEN1&0XF7;		//禁止CT3,电流脉冲
			IEN1=IEN1&0XFE;		//禁止CT0,焊接角度
			if(wire_ok==1&&WIRE==ON)
			{
				PWM1=0;
				wire_back=1;
				wire_front=1;
				wire_ok=0;			//抽丝时没有脉动
				delay(2);				//79us
				if(pp.t34>0)
				{
					retract=1;			//抽丝标志
					wire_back=1;
					wire_front=0;
					CML0=TML2+0X50;			//100ms
					if(CML0<TML2)
						CMH0=TMH2+1+0XC3;
					else
						CMH0=TMH2+0XC3;
					n_cm0=pp.t34;
					c_cm0=0;
					PWM1=51*(2500-pp.v32)/500;	//PWM1=255*(2500-pp.v32)/2500
					IEN1=IEN1|0X10;			//允许CM0,抽丝
				}
			}
			rot_stop_ok=1;
		}
/*
		if(resend==1)
		{
			ini_sbuf(M_main,answer,S_ANSW,0,0,0);
			s_byte_nums=4;
			TR_noans();
			resend=0;
		}
*/
		if(urgent_stop==1)
				goto BEGIN;

	}while(rot_stop_ok==0);

	while(need_para==0)
	{
		if(urgent_stop==1)
				goto BEGIN;
	}
	ini_sbuf(M_main,parameter1,0,0,0,0);
	sbuffer[2]=FINISH/256;
	sbuffer[3]=FINISH%256;
	s_byte_nums=5;
	TR_noans();
	need_para=0;
	if(retract==1)
	{
		while(retract_ok==0)
		{
			if(urgent_stop==1)
				goto BEGIN;
		}
	}

	if(pp.b==ON)
	{
		while(auto_return==0)
		{
			if(urgent_stop==1)
				goto BEGIN;
		}
		ini_sbuf(M_main,answer,S_ANSW,0,0,0);
		s_byte_nums=4;
		TR_noans();
		if(pp.k2==CW)
		{
			rot_right=1;
			rot_left=0;
		}
		else
		{
			rot_right=0;
			rot_left=1;
		}
		PWM0=255;
		IEN1=IEN1|0X01;				//允许CT0,焊接角度

		while(return_ok==0)
		{
			if(urgent_stop==1)
				goto BEGIN;
			if(need_para==1)
			{
				sbuffer[0]=M_main;
				sbuffer[1]=parameter1;
				sbuffer[2]=FINISH/256;
				sbuffer[3]=FINISH%256;
				sbuffer[4]=0;
				s_byte_nums=5;
				TR_noans();
				need_para=0;
			}
		}
		ini_sbuf(M_main,answer,S_ANSW,0,0,0);
		s_byte_nums=4;
		TR_noans();
	}

	while(to_begin==0)
	{
		if(urgent_stop==1)
			goto BEGIN;
	}
	goto BEGIN;
}

⌨️ 快捷键说明

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