📄 复件 current1.c.bak
字号:
{
edge=0;
current_out=0;
if(ahf_ok==1)
{
IM=(unsigned int)(I11*0.41);
TR0=1;
}
CTCON=CTCON|0X02; //CT0下降沿
CML1=TML2+0XE2; //峰值时间
if(CML1<TML2)
CMH1=(TMH2+1)+0X04;
else
CMH1=TMH2+0X04;
c_cm1=0;
IEN1=IEN1|0X20; //允许CM1,峰、基时间
}
}
void CT2_int (void) interrupt 8 //采样保持脉冲
{
CTI2=0;
if(current_out==1&&ad_finish==1)
{
ad_finish=0; //采样进行标志
if(i_v==0)
ADCON=0x09; //启动电流采样
else
ADCON=0X08; //启动电压采样
}
}
void ADC_int (void) interrupt 10 //AD采样中断
{
ADCON=ADCON&0xEF; //清ADC中断标志
CTCON=CTCON&0XCF;
IEN1=IEN1&0XFB; //禁止CT2
c_adc++;
adh=ADCH;
adl=ADCON&0xC0;
adh=adh<<2;
adl=adl>>6;
ad=adh+adl;
da=ad;
AD5=(da*5000)/0x3FF;
if(i_v==0) //电流采样
{
ad_i=10000*AD5/4920;
if(ad_i<50) //电流小于5.0A
tab2++;
if(c_adc==1)
{
AD1=ad_i;
AD2=ad_i;
AD3=ad_i;
AD4=ad_i;
}
else
{
ad_i=(ad_i+AD1+AD2+AD3+AD4)/5;
AD1=AD2;
AD2=AD3;
AD3=AD4;
AD4=ad_i;
}
}
else //电压采样
{
ad_v=1000*AD5/4920;
if(ad_v<25)
tab3++;
if(c_adc==6)
{
AD1=ad_v;
AD2=ad_v;
AD3=ad_v;
AD4=ad_v;
}
else
{
ad_v=(ad_v+AD1+AD2+AD3+AD4)/5;
AD1=AD2;
AD2=AD3;
AD3=AD4;
AD4=ad_v;
} //电压小于2.5V
}
/*
if((tab2>=5||tab3>=5)&&work==3)
{
// err_operate();
}
else
{
*/
if(c_adc<=5) //电流采样
{
if(c_adc==5) //电流——电压
{
i_v=1; //电压采样标志
AD1=0;
AD2=0;
AD3=0;
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)
{
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;
c_cm2++;
if(c_cm2==240)
{
con_water=1; //关水
IEN1=IEN1&0xDF; //禁止CM1
c_cm2=0;
}
CML2=TML2+0x24;
if(CML2<TML2)
CMH2=TMH2+1+0xF4;
else
CMH2=TMH2+0xF4;
}
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;
BEGIN:
if(urgent_stop==1)
{
urgent_stop=0;
err_ok=0;
EX1=1;
EX0=1;
}
IEN1=IEN1&0x40;
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;
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(new_switch==1)
{
ini_sbuf(M_main,answer,S_ANSW,0,0,0,0);
s_byte_nums=4;
TR_noans();
new_switch=0;
}
*/
if(urgent_stop==1)
goto BEGIN;
}
EX1=1;
n_pulse=pp.t14%256;
n_base=pp.t15%256;
if(pp.syn_type==ON)
{
CTCON=CTCON|0x02;
IEN1=IEN1|0x01;
}
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;
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;
I2=pp.i11;
IM=(unsigned int)(I1*0.41);
IB=(unsigned int)(I2*0.41);
IM8=IM%256; //(I1*4096/10000)%256
IM4=IM/256; //(I1*4096/10000)/256
IB8=IB%256; //((I2*4096/10000)%256
IB4=IB/256; //(I2*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;
}
delay(2);
RE_IGNIT: avc_ok=P5;
avc_ok=avc_ok&0X04;
if(avc_ok==4)
goto RE_IGNIT;
else
{
if(pp.ignit==HF) //引弧方式HF
con_hf=1; //关高频
ini_sbuf(M_main,command,com_ignit_ok,0,0,0,0);
s_byte_nums=4;
TR_ans();
// answer_judge();
}
}
if(urgent_stop==1)
goto BEGIN;
I1=pp.i12;
I2=pp.i12;
IM=(unsigned int)(I1*0.41);
IB=(unsigned int)(I2*0.41);
IM8=IM%256; //(I1*10/10)%256
IM4=IM/256; //(I1*10/10)/256
IB8=IB%256; //(I2*10/10)%256
IB4=IB/256; //(I2*10/10)/256
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();
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(I1<pp.i14)
{
if((I1+10)>=pp.i14)
I1=pp.i14;
else
I1=I1+10;
}
if(pp.k1==PDC)
{
if(I2<pp.i15)
{
if((I2+10)>=pp.i15)
I2=pp.i15;
else
I2=I2+10;
}
}
IM=(unsigned int)(I1*0.41);
IB=(unsigned int)(I2*0.41);
IM8=IM%256; //(I1*10/10)%256
IM4=IM/256; //(I1*10/10)/256
IB8=IB%256; //(I2*10/10)%256
IB4=IB/256; //(I2*10/10)/256
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; //峰值电流
I2=pp.i15; //基值电流
if(pp.ahf==ON)
{
delt_ahf=pp.i16/2;
if(I1+delt_ahf<4000)
I11=I1+delt_ahf;
else
I11=4000;
I12=I1-delt_ahf;
if(I2+delt_ahf<4000)
I21=I2+delt_ahf;
else
I21=4000;
I22=I2-delt_ahf;
t=1000000/pp.f;
c_ahf_p=t*pp.t16/100/256;
c_ahf_b=t/256-c_ahf_p;
ahf_p_b=1;
ahf_ok=1;
c_t0=0;
IM=(unsigned int)(I11*0.41);
IMM=(unsigned int)(I12*0.41);
IB=(unsigned int)(I21*0.41);
IBB=(unsigned int)(I22*0.41);
IML=IM%256;
IMH=IM/256;
IMML=IMM%256;
IMMH=IMM/256;
IBL=IB%256;
IBH=IB/256;
IBBL=IBB%256;
IBBH=IBB/256;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -