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

📄 current_1027.c.bak

📁 基于485的51单片机多机通讯程序
💻 BAK
📖 第 1 页 / 共 3 页
字号:
			AD4=0;
			tab2=0;
		}
		ad_finish=1;
		CTCON=CTCON|0X20;
		IEN1=IEN1|0X04;			//允许CT2
	}
	if(c_adc>5&&c_adc<=10)
	{
		if(c_adc==10)			//电压——电流
		{
			i_v=0;			//电流采样标志
			c_adc=0;
			AD1=0;
			AD2=0;
			AD3=0;
			AD4=0;
			tab3=0;
		}
		ad_finish=1;
		CTCON=CTCON|0X20;
		IEN1=IEN1|0X04;			//允许CT2
	}
}

void CM1_int (void)   interrupt 12		//电流脉冲输出(峰、基值时间)
{
	CMI1=0;
	c_cm1++;
	if(current_out==1&&c_cm1==n_pulse||current_out==0&&c_cm1==n_base)
	{
		if(decrease==1||ahf_ok==0)
		{
			if(current_out==1)
			{
				IM8=IBL;
				IM4=IBH;
				IB8=IBL;
				IB4=IBH;
				UPD=0X00;
			}
			else
			{
				IM8=IML;
				IM4=IMH;
				IB8=IML;
				IB4=IMH;
				UPD=0X00;
			}
		}
		else
		{
			if(current_out==1)
			{
				IM8=IBL_ahf;
				IM4=IBH_ahf;
				IB8=IBBL_ahf;
				IB4=IBBH_ahf;
				UPD=0X00;
			}
			else
			{
				IM8=IML_ahf;
				IM4=IMH_ahf;
				IB8=IMML_ahf;
				IB4=IMMH_ahf;
				UPD=0X00;
			}
		}
		current_out=~current_out;
		c_cm1=0;	
	}
	CML1=TML2+0XE2;		//峰值时间
	if(CML1<TML2)
		CMH1=(TMH2+1)+0X04;
	else
		CMH1=TMH2+0X04;
}

void CM2_int (void)   interrupt 13		//关水计时
{
	CMI2=0;
	IEN1=IEN1&0XBF;			//CM2
	if(gas_stop==1)
	{
		c_cm21++;
		if(c_cm21==20)
		{
			con_gas1=1;
			gas_stop=0;
			c_cm21=0;
		}
	}
	if(con_water!=1)
	{
		c_cm2++;
		if(c_cm2==240)
		{
			con_water=1;			//关水
			IEN1=IEN1&0xDF;			//禁止CM1
			c_cm2=0;
		}
	}
	
	if(gas_stop==1||con_water!=1)
	{
		CML2=TML2+0x24;
		if(CML2<TML2)
			CMH2=TMH2+1+0xF4;
		else
			CMH2=TMH2+0xF4;
		IEN1=IEN1|0X40;			//CM2
	}
		
}

main()
{
	unsigned char k,k1,k2;
	unsigned int temp_delt_p,temp_delt_b;
	
	current_enable=0;
	TMOD=0x22;			//定时器1,方式2;
	TL1=0XFD;			//波特率9600
	TH1=0XFD;
	TR1=1;				//启动定时器
	PCON=0X00;			//SMOD=1
	TMOD=0x23;			//定时器0,方式3,两个8位定时器;
	TR1=0;
	TF1=0;
	S0CON=0XF8;			//串口方式3,SM2=0,REN=1,TB8=1,RB8=0,TI=0,RI=0
	IP0=0X98;			//S0=1
	IP1=IP1|0X20;
	ES0=1;				//开串口中断
	ET0=1;
	ET1=1;
	ES1=1;				//I2C
	EAD=1;				//AD中断允许
 	EA=1;				//中断总允许
 	start_t2();
 	
 	urgent_stop=0;
	current_err=0;
	err_ok=0;
	err=0;
	gas_stop=0;
BEGIN:		
	if(urgent_stop==1)
	{
		urgent_stop=0;
		err_ok=0;
//		EX1=1;
		EX0=1;
	}	
	IEN1=IEN1&0x40;	
	gate=0;
	COM=0X76;
	COUNT1=0;
	COUNT1=0;
	COM=0XB2;
	COUNT2=0;
	COUNT2=0;
	current_out=1;
	current_enable=0;
	con_hf=1;
//	con_gas1=1;
	con_gas2=1;
	work=0;				//等待状态	
	called=0;
	start=0;
	need_para=0;
	open_gas1=0;
	open_gas2=0;
	ignit_ok=0;
	decrease=0;
	igniting=0;
	pre_melt_ok=0;
	R_ANSW=0;
	S_ANSW=0;
	POINTER1=0;
	RSUM=0;
	POINTER0=0;
	SSUM=0;
	r_byte_nums=4;
	demand=0;
	overtime=0;
	resend=0;
	ans=0;
	receive_p_out=0;
	receive_p_in=0;
	edge=0;
	ad_v=0;
	ad_i=0;
	AD1=0;
	AD2=0;
	AD3=0;
	AD4=0;
	AD5=0;
	tab2=0;
	tab3=0;
	IM8=0;
	IM4=0;
	IB8=0;
	IB4=0;
	UPD=0;
	ahf_ok=0;
	ad_finish=0;
	i_slope_ok=0;
	nonce_sec=0;
	in_sector=0;
	new_sec=0;
	close_gas1=0;
	close_gas2=0;
	close_gas1_ok=0;
	close_gas2_ok=0;
	close_gas_ok=0;
	c_cm1=0;
	to_begin=0;
	tight=0;
	lose=0;
	

	PWMP=51;			//产生采样保持脉冲,1K
	PWM0=128;
	PWM1=128;
	EX0=1;
	while(start==0)
	{
		if(called==1)
		{
			ini_sbuf(M_main,infor,com_calling,S_ANSW,0,0,0);
			s_byte_nums=6;
			TR_noans();
			called=0;
		}
		if(receive_p_out==1)
		{
			point=&pp.t01;
			for(p_sec=0;p_sec<25;p_sec++)
				*(point+p_sec)=rbuffer[p_sec*2+2]*256+rbuffer[p_sec*2+3];
			pp.syn_type=rbuffer[52];
			
			ini_sbuf(M_main,answer,OK,0,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,OK,0,0,0,0);
			s_byte_nums=4;
			TR_noans();
			demand=0;
			receive_p_in=0;
		}
		if(tight==1)
		{
			tight_lose=0;
			tight=0;
		}
		if(lose==1)
		{
			tight_lose=1;
			lose=0;
		}
		if(urgent_stop==1)
			goto BEGIN;
	}
	EX1=1;
	n_pulse=pp.t14%256;
	n_base=pp.t15%256;

	work=3;					//进入焊接过程
	IEN1=IEN1&0xBF;				//禁止CM2,停水计时
	CML1=TML2+0XE2;		//峰值时间
	if(CML1<TML2)
		CMH1=(TMH2+1)+0X04;
	else
		CMH1=TMH2+0X04;
	CML2=TML2+0x24;
	if(CML2<TML2)
		CMH2=TMH2+1+0xF4;
	else
		CMH2=TMH2+0xF4;
	if(pp.k1==PDC)					//05-12-28
	{
		if(pp.i14>pp.i12)
		{
			if(pp.i15>=pp.i12)
				delt1=pp.i14-pp.i12;
			else if(pp.i14-pp.i12>=pp.i12-pp.i15)
				delt1=pp.i14-pp.i12;
			else
				delt1=pp.i12-pp.i15;
		}
		else if(pp.i14==pp.i12)
		{
			if(pp.i15>=pp.i12)
				delt1=pp.i15-pp.i12;
			else
				delt1=pp.i12-pp.i15;
		}
		else 
		{
			if(pp.i15>pp.i12)
			{
				if(pp.i15-pp.i12>=pp.i12-pp.i14)
					delt1=pp.i15-pp.i12;
				else
					delt1=pp.i12-pp.i14; 
			}
			else if(pp.i15==pp.i12)
				delt1=pp.i12-pp.i14;
			else
			{
				if(pp.i12-pp.i14>=pp.i12-pp.i15)
					delt1=pp.i12-pp.i14;
				else
					delt1=pp.i12-pp.i15;
			}
		}			
	}
	if(delt1>0)
	{
		delt1=1000000/delt1;
		delt1=delt1*pp.t13;
	//	delt1=(pp.t13*1000000)/(pp.i14-pp.i12);
		if(delt1%256>=200)
			delt1=delt1/256+1;
		else
			delt1=delt1/256;
	}
	
	if(YOUHU==1)
	{
		while(igniting==0)
		{
			if(urgent_stop==1)
				goto BEGIN;
			if(open_gas1==1)
			{
				ini_sbuf(M_main,answer,S_ANSW,0,0,0,0);
				s_byte_nums=4;
				TR_noans();
				con_gas1=0;		//开气1
				con_water=0;		//开水
				open_gas1=0;
			}
			if(open_gas2==1)
			{
				ini_sbuf(M_main,answer,S_ANSW,0,0,0,0);
				s_byte_nums=4;
				TR_noans();
				con_gas2=0;		//开气2
				con_water=0;		//开水
				open_gas2=0;
			}
			if(resend==1)
			{
				ini_sbuf(M_main,answer,S_ANSW,0,0,0,0);
				s_byte_nums=4;
				TR_noans();
				resend=0;
			}
		}
	}
	else
	{
		while(ignit_ok==0)
		{
			if(urgent_stop==1)
				goto BEGIN;
			if(open_gas1==1)
			{
				ini_sbuf(M_main,answer,S_ANSW,0,0,0,0);
				s_byte_nums=4;
				TR_noans();
				con_gas1=0;		//开气1
				con_water=0;		//开水
				open_gas1=0;
			}
			if(open_gas2==1)
			{
				ini_sbuf(M_main,answer,S_ANSW,0,0,0,0);
				s_byte_nums=4;
				TR_noans();
				con_gas2=0;		//开气2
				con_water=0;		//开水
				open_gas2=0;
			}
			if(resend==1)
			{
				ini_sbuf(M_main,answer,S_ANSW,0,0,0,0);
				s_byte_nums=4;
				TR_noans();
				resend=0;
			}
		}
	}
	ini_sbuf(M_main,answer,S_ANSW,0,0,0,0);
	s_byte_nums=4;
	TR_noans();

	I1=pp.i11;
	IM=(unsigned int)(I1*0.41);
	IM8=IM%256;			//(I1*4096/10000)%256
	IM4=IM/256;			//(I1*4096/10000)/256
	UPD=0X00;			//引弧电流

	if(YOUHU==1)
	{
		current_enable=1;				//开电源使能
		if(pp.ignit==HF)
			con_hf=0;		//开高频
		avc_ok=P5;
		avc_ok=avc_ok&0X04;
		while(avc_ok==4)
		{
			avc_ok=P5;
			avc_ok=avc_ok&0X04;
			if(urgent_stop==1)
				goto BEGIN;
		}
		if(pp.ignit==HF)		//引弧方式HF
			con_hf=1;		//关高频

		delay(1);
RE_IGNIT:	avc_ok=P5;
		avc_ok=avc_ok&0X04;
		if(avc_ok==4)
		{
			if(pp.ignit==HF)
				con_hf=0;		//开高频
			goto RE_IGNIT;
		}
		else
		{
/*			
			delay(1);
			avc_ok=P5;
			avc_ok=avc_ok&0X04;
			if(avc_ok==4)
			{
				if(pp.ignit==HF)
					con_hf=0;		//开高频
				goto RE_IGNIT;
			}
			else
			{
*/
				if(pp.ignit==HF)		//引弧方式HF
					con_hf=1;		//关高频

				while(ignit_ok==0)
				{
					if(urgent_stop==1)
						goto BEGIN;
				}
				ignit_ok=0;
				ini_sbuf(M_main,command,com_ignit_ok,0,0,0,0);
				s_byte_nums=4;
				TR_noans();
//			}
		}
	}
	if(urgent_stop==1)
		goto BEGIN;
	I1=pp.i12;
	IM=(unsigned int)(I1*0.41);
	IML=IM%256;				//(I1*10/10)%256
	IMH=IM/256;				//(I1*10/10)/256
	IM8=IML;
	IM4=IMH;
	UPD=0X00;				//预熔电流
	ad_finish=1;
	if(YOUHU==1)				//焊接时进行电压、电流采样
	{
		c_adc=0;
		i_v=0;
		CTCON=CTCON|0X20;		//捕捉下降沿
		IEN1=IEN1|0X04;			//允许CT2
	}

	while(pre_melt_ok==0)			//预熔时间
	{
		if(urgent_stop==1)
			goto BEGIN;
		if(need_para==1)		//显示焊接电流、焊接电压
		{
			sbuffer[0]=M_main;
			sbuffer[1]=parameter2;
			sbuffer[2]=ad_i/256;
			sbuffer[3]=ad_i%256;
			sbuffer[4]=ad_v/256;
			sbuffer[5]=ad_v%256;
			s_byte_nums=7;
			TR_noans();
			need_para=0;
		}
	}
	ini_sbuf(M_main,answer,S_ANSW,0,0,0,0);
	s_byte_nums=4;
	TR_noans();
	
	if(pp.k1==PDC)
	{
		I2=pp.i12;
		IB=(unsigned int)(I2*0.41);
		IBL=IB%256;
		IBH=IB/256;
		c_cm1=0;
		IEN1=IEN1|0X20;
	}
	if(delt1>0)
	{
		c_t0=0;
		while(i_slope_ok==0)			//电流上升
		{
			TR0=1;
			while(c_t0<delt1)		//电流增加1A
			{
				if(urgent_stop==1)
					goto BEGIN;
			}
			TR0=0;
			c_t0=0;
			if(pp.k1==PDC)
			{
				if(pp.i14>pp.i12)
				{
					if(I1<pp.i14)
					{
						if((I1+10)>=pp.i14)
							I1=pp.i14;
						else
							I1=I1+10;
					}
				}
				if(pp.i14<pp.i12)
				{
					if(I1>pp.i14)
					{
						if(I1>=pp.i14+10)
							I1=I1-10;
						else
							I1=pp.i14;
					}
				}
				if(pp.i15>pp.i12)
				{
					if(I2<pp.i15)
					{
						if((I2+10)>=pp.i15)
							I2=pp.i15;
						else
							I2=I2+10;
					}
				}
				if(pp.i15<pp.i12)
				{
					if(I2>pp.i15)
					{
						if(I2>=pp.i15+10)
							I2=I2-10;
						else
							I2=pp.i15;
					}
				}
			}
			else
			{
				if(I1<pp.i14)
				{
					if((I1+10)>=pp.i14)
						I1=pp.i14;
					else
						I1=I1+10;
				}
			}
	
			IM=(unsigned int)(I1*0.41);
			IML=IM%256;
			IMH=IM/256;
			if(pp.k1==PDC)
			{
				IB=(unsigned int)(I2*0.41);
		        	IBL=IB%256;
		        	IBH=IB/256;
		        }
			if(pp.k1==DC)
			{
				IM8=IML;
				IM4=IMH;
				IB8=IML;
				IB4=IMH;
				UPD=0X00;
			}
			if(urgent_stop==1)
				goto BEGIN;
	
		}
	}
        ini_sbuf(M_main,answer,S_ANSW,0,0,0,0);
        s_byte_nums=4;
        TR_noans();

        I1=pp.i14;				//峰值电流
        IM=(unsigned int)(I1*0.41);
        IML=IM%256;
        IMH=IM/256;
        if(pp.k1==PDC)
        {
        	I2=pp.i15;				//基值电流
        	IB=(unsigned int)(I2*0.41);
        	IBL=IB%256;
        	IBH=IB/256;
	        if(pp.ahf==ON)
	        {
	        	delt_ahf=pp.i16/2;
	        	if(I1+delt_ahf<4000)
	        		I11=I1+delt_ahf;
	        	else
	        		I11=4000;
	        	if(I1>delt_ahf+pp.i17)
	        		I12=I1-delt_ahf;
	        	else
	        		I12=pp.i17;
			if(I2+delt_ahf<4000)
				I21=I2+delt_ahf;
			else
				I21=4000;
			if(I2>delt_ahf+pp.i17)
				I22=I2-delt_ahf;
			else
				I22=pp.i17;
			ahf_p_b=1;
			ahf_ok=1;
			IM_ahf=(unsigned int)(I11*0.41);
			IMM_ahf=(unsigned int)(I12*0.41);
			IB_ahf=(unsigned int)(I21*0.41);
			IBB_ahf=(unsigned int)(I22*0.41);
			IML_ahf=IM_ahf%256;
			IMH_ahf=IM_ahf/256;
			IMML_ahf=IMM_ahf%256;
			IMMH_ahf=IMM_ahf/256;
			IBL_ahf=IB_ahf%256;
			IBH_ahf=IB_ahf/256;
			IBBL_ahf=IBB_ahf%256;
			IBBH_ahf=IBB_ahf/256;

			IM8=IML_ahf;
			IM4=IMH_ahf;
			IB8=IMML_ahf;
			IB4=IMMH_ahf;
			UPD=0X00;
			out1=4000000/pp.f;
			out2=out1*(100-pp.t16)/100;
			COM=0X76;
			COUNT1=out1%256;
			COUNT1=out1/256;
			COM=0XB2;
			COUNT2=out2%256;
			COUNT2=out2/256;
			gate=1;

⌨️ 快捷键说明

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