📄 dc1.c
字号:
{
TMOD=0x22; //定时器1,方式2;
TL1=0XFD; //波特率9600
TH1=0XFD;
TR1=1; //启动定时器
PCON=0X00; //SMOD=0
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,T1=1
ES0=1; //开串口中断
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;
}
IEN1=0X00;
work=0;
send_enable=1; //关发送使能
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;
temp_pulse_num1=0;
FINISH=0;
temp_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;
c_cm2=0;
common=0;
PWMP=3; //23.5K
CTCON=CTCON|0X02; //CT0捕捉下降沿
tooth_num=10;
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=55;
rot_front=0;
r_w=0;
c_cm2=0;
CML2=TML2+0X50;
if(CML2>TML2)
CMH2=TMH2+1+0XC3;
else
CMH2=TMH2+0XC3;
IEN1=IEN1|0X40; //CM2
}
if(rot_reverse==1)
{
rot_right=0;
rot_left=1;
PWM0=55;
rot_reverse=0;
r_w=0;
c_cm2=0;
CML2=TML2+0X50;
if(CML2>TML2)
CMH2=TMH2+1+0XC3;
else
CMH2=TMH2+0XC3;
IEN1=IEN1|0X40; //CM2
}
if(wire_add==1)
{
wire_back=0;
wire_front=1;
PWM1=55;
wire_add=0;
r_w=1;
c_cm2=0;
CML2=TML2+0X50;
if(CML2>TML2)
CMH2=TMH2+1+0XC3;
else
CMH2=TMH2+0XC3;
IEN1=IEN1|0X40; //CM2
}
if(wire_dec==1)
{
wire_back=1;
wire_front=0;
PWM1=55;
wire_dec=0;
r_w=1;
c_cm2=0;
CML2=TML2+0X50;
if(CML2>TML2)
CMH2=TMH2+1+0XC3;
else
CMH2=TMH2+0XC3;
IEN1=IEN1|0X40; //CM2
}
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;
}
get_v_r();
if(r%10>=5)
pulse_num=r/10+1;
else
pulse_num=r/10;
pulse_num=pulse_num/2;
pulse_num1=r/2;
if(pp.k1==0)
K21=OFF;
else
K21=pp.k21;
if(common!=1)
{
const0=(float)(motor_v)*3.14;
const0=const0/decrease_rate; //motor_v*3.14*pp.d/减速比
}
temp_data0=const0*pp.d/10;
temp_data00=(float)(pp.dv21)/temp_data0;
delt_rot=255*temp_data00;
temp_data00=(float)(pp.v21_p)/temp_data0;
rot_vp=255*temp_data00;
if(rot_vp<13)
rot_vp=13;
else if(rot_vp>255)
rot_vp=255;
temp_rot_vp=13; //05-12-29
if(K21==ON)
{
temp_data00=(float)(pp.v21_b)/temp_data0;
rot_vb=255*temp_data00;
if(rot_vb<13)
rot_vb=13;
temp_rot_vb=13;
if(rot_vp>13&&rot_vb>13)
{
if(rot_vp>=rot_vb)
n_cm1=pp.t21*250/(rot_vp-13);
else
n_cm1=pp.t21*250/(rot_vb-13);
}
else if(rot_vp>13&&rot_vb==13)
n_cm1=pp.t21*250/(rot_vp-13);
else if(rot_vp==13&&rot_vb>13)
n_cm1=pp.t21*250/(rot_vb-13);
else if(rot_vp==13&&rot_vb==13)
n_cm1=0;
}
else
{
if(rot_vp>13)
n_cm1=pp.t21*250/(rot_vp-13);
else
n_cm1=0;
}
K3=pp.k3;
if(pp.k1==0)
K31=OFF;
else
K31=pp.k31;
const1=1799.72; //6600*10*165*314
temp_data00=(float)(pp.dv31)/const1;
delt_wire=255*temp_data00;
temp_data00=(float)(pp.v31_p)/const1;
wire_vp=255*temp_data00;
if(wire_vp<13)
wire_vp=13;
else if(wire_vp>255)
wire_vp=255;
temp_wire_vp=13;
if(K31==ON)
{
temp_data00=(float)(pp.v31_b)/const1;
wire_vb=255*temp_data00;
if(wire_vb<13)
wire_vb=13;
temp_wire_vb=13;
{
if(wire_vp>13&&wire_vb>13)
{
if(wire_vp>=wire_vb)
n_cm0=pp.t32*250/(wire_vp-13);
else
n_cm0=pp.t32*250/(wire_vb-13);
}
else if(wire_vp>13&&wire_vb==13)
n_cm0=pp.t32*250/(wire_vp-13);
else if(wire_vp==13&&wire_vb>13)
n_cm0=pp.t32*250/(wire_vb-13);
else if(wire_vp==13&&wire_vb==13)
n_cm0=0;
}
}
else
{
if(wire_vp>13)
n_cm0=pp.t32*250/(wire_vp-13);
else
n_cm0=0;
}
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; //05-12-31
if(K21==ON)
{
CTCON=CTCON|0x40;
IEN1=IEN1|0x08; //CT3
}
if(n_cm1>0)
{
CML1=TML2+0XC8;
if(CML1<TML2) //CM1,400us,旋转速度变化时间
CMH1=TMH2+1+0X00;
else
CMH1=TMH2+0X00;
IEN1=IEN1|0X20; //允许CM1
}
else
{
PWM0=13;
r_slope_ok=1;
}
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;
if(K31==ON)
{
CTCON=CTCON|0x40;
IEN1=IEN1|0x08; //CT3
}
if(n_cm0>0)
{
CML0=TML2+0xC8; //CM0,400us,送丝速度变化时间
if(CML0<TML2)
CMH0=TMH2+1+0X00;
else
CMH0=TMH2+0X00;
IEN1=IEN1|0X10; //CM0
}
else
{
PWM1=13;
w_slope_ok=1;
}
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||K21!=ON)
{
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=get_PWM(temp_rot_vp);
rot_front=0;
}
if(rot_ok==1&&rot_reverse==1&&r_slope_ok==1) //旋转速度减
{
if(delt_state==0||delt_state==1||K21!=ON)
{
if(temp_rot_vp<=delt_rot+13||temp_rot_vp<=13)
temp_rot_vp=13;
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+13||temp_rot_vb<=13)
temp_rot_vb=13;
else
temp_rot_vb=temp_rot_vb-delt_rot; //rot_vb=rot_vb+255*pp.dv21/1250
}
}
else
PWM0=get_PWM(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||K31!=ON)
{
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=get_PWM(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||K31!=ON)
{
if(temp_wire_vp<=delt_wire+13||temp_wire_vp<=13)
temp_wire_vp=13;
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+13||temp_wire_vb<=13)
temp_wire_vb=13;
else
temp_wire_vb=temp_wire_vb-delt_wire; //wire_vb=wire_vb+255*pp.dv31/2500
}
}
else
PWM1=get_PWM(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(K3==ON)
{
if(K31==OFF)
PWM1=get_PWM(temp_wire_vp);
else
IEN1=IEN1|0X08; //CT3
}
kk=1;
}
if(decrease==1&&rot_ok==1&&K21==ON)
{
CTCON=CTCON&0x3F;
IEN1=IEN1&0xF7; //CT3
PWM0=get_PWM(temp_rot_vp);
K21=OFF;
}
if(urgent_stop==1)
goto BEGIN;
if(in_sector==1&&new_sector==1) //进入区间
{
// K21=pp.x[nonce_sec][1]; //05-12-31
K3=pp.x[nonce_sec][5];
if(K3==ON) //05-12-31
{
if(pp.k31==ON)
K31=ON;
}
else
{
PWM1=0;
temp_wire_vp=0;
temp_wire_vb=0;
K31=OFF;
}
if(K21==ON||K3==ON&&K31==ON&&kk==1)
{
if(p_b==0)
CTCON=CTCON|0x40;
else
CTCON=CTCON|0x80;
IEN1=IEN1|0x08; //CT3
}
else
IEN1=IEN1&0XF7;
temp_data0=const0*pp.x[nonce_sec][0]/10;
temp_data00=(float)(pp.x[nonce_sec][2])/temp_data0;
rot_vp=255*temp_data00;
if(K21==ON) //脉动旋转开关
{
temp_data00=(float)(pp.x[nonce_sec][3])/temp_data0;
rot_vb=255*temp_data00;
}
r_slope_ok=0;
if(rot_vp!=temp_rot_vp)
{
c_cm1=0;
if(rot_vp>temp_rot_vp)
rot_slope_delt=rot_vp-temp_rot_vp;
else
rot_slope_delt=temp_rot_vp-rot_vp;
n_cm1=pp.x[nonce_sec][4]*250/rot_slope_delt;
IEN1=IEN1|0X20; //CM1
}
if(K3==ON)
{
wire_ok=1;
if(temp_wire_vp==0)
temp_wire_vp=13;
temp_data00=(float)(pp.x[nonce_sec][8])/const1;
wire_vp=255*temp_data00;
if(K31==ON)
{
if(temp_wire_vb==0)
temp_wire_vb=13;
temp_data00=(float)(pp.x[nonce_sec][9])/const1;
wire_vb=255*temp_data00;
}
w_slope_ok=0;
if(wire_vp!=temp_wire_vp)
{
c_cm0=0;
if(wire_vp>temp_wire_vp)
wire_slope_delt=wire_vp-temp_wire_vp;
else
wire_slope_delt=temp_wire_vp-wire_vp;
n_cm0=pp.x[nonce_sec][7]*250/wire_slope_delt;
IEN1=IEN1|0X10; //CM0
}
}
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;
temp_data00=(float)(pp.v32)/const1;
temp_data00=temp_data00*255;
PWM1=get_PWM(temp_data00);
IEN1=IEN1|0X10; //允许CM0,抽丝
}
stop_wire=0;
}
if(decrease==1&&K3==ON&&WIRE==ON&&wire_ok==1)
{
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;
if(CML0>TML2)
CMH0=TMH2+1+0XC3;
else
CMH0=TMH2+0XC3; //100ms
n_cm0=pp.t34;
c_cm0=0;
temp_data00=(float)(pp.v32)/const1;
temp_data00=temp_data00*255;
PWM1=get_PWM(temp_data00);
IEN1=IEN1|0X10; //允许CM0,抽丝
}
}
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;
temp_data00=(float)(pp.v32)/const1;
temp_data00=temp_data00*255;
PWM1=get_PWM(temp_data00);
IEN1=IEN1|0X10; //允许CM0,抽丝
}
}
rot_stop_ok=1;
}
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(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 + -