📄 driver0425.c.bak
字号:
{
out1=out1+pp.dc41*10;
judge_ok=1;
center_excursion=0;
}
}
else if(judge_ok==1)
{
out1=out1-pp.dc41*10;
judge_ok=0;
}
out2=2*out1;
COM=0X76;
COUNT1=out1%256;
COUNT1=out1/256;
COM=0XB6;
COUNT2=out2%256;
COUNT2=out2/256;
P4_2=0; //开横摆使能
IEN1=IEN1|0X10; //允许CM0,边缘停留时间
}
}
void CT2_int (void) interrupt 8 //电压采样保持脉冲/弧长脉冲
{
CTI2=0;
if(decrease==0)
{
if(sample_avc==0) //采样
{
CTCON=CTCON&0xCF;
IEN1=IEN1&0XFB; //禁止CT2
ad_finish=0; //AD转换及处理过程
ADCON=0X08; //启动AD采样
}
else
{
c_avc++;
if(SENS>10&&c_avc==3)
PWMP=v51;
if(c_avc==SENS) //灵敏度
{
PWM0=0; //关弧长脉冲
CTCON=CTCON&0xCF;
IEN1=IEN1&0XFB; //禁止CT2
if(pp.k5==ON)
{
sample_avc=0;
if(pp.k1==DC||pp.k1==PDC&&(pp.avc_type==SP&&pulse_base==1||pp.avc_type==SPB||pp.avc_type==SB&&pulse_base==0))
{
PWMP=12;
PWM1=127;
CTCON=CTCON|0x20;
IEN1=IEN1|0X04; //允许CT2
}
}
}
}
}
else //衰减过程
{
if(lift==1)
{
c_avc++;
if(c_avc==c_lift) //焊枪提升结束
{
P4_4=1; //关弧长使能
PWM0=0; //关弧长脉冲
IEN1=IEN1&0XFB; //禁止CT2
c_avc=0; //清弧长脉冲个数
lift_complete=1;
}
}
}
}
void CT3_int (void) interrupt 9 //电流脉冲
{
CTI3=0;
pulse_base=~pulse_base;
CTCON=CTCON&0X3F;
if(pulse_base==1) //峰值
{
if(pp.avc_type==SPB||pp.avc_type==SB)
CTCON=CTCON|0X80; //CT3下降沿
}
else //基值
{
if(pp.avc_type==SP||pp.avc_type==SPB)
CTCON=CTCON|0X40; //CT3上升沿
}
if(pp.avc_type==SPB)
{
PWM0=0;
IEN1=IEN1&0XFB; //禁止CT2
c_avc=0;
sample_avc=0;
new_circle=1;
if(pulse_base==1)
{
vc5=vc1;
vc6=vc2;
}
else
{
vc5=vc3;
vc6=vc4;
}
}
if(avc_ok==0) //开始弧长
{
avc_ok=1;
PWMP=12; //23-1k 12-2k
PWM0=0;
PWM1=127;
CTCON=CTCON|0x20; //CT2下降沿
IEN1=IEN1|0X04; //允许CT2,采样保持脉冲
}
}
void ADC_int (void) interrupt 10
{
ADCON=ADCON&0xEF; //清ADC中断标志
c_sample++; //2005-3-3
adh=ADCH;
adl=ADCON&0xC0;
adh=adh<<2;
adl=adl>>6;
ad=adh+adl;
da=ad;
AD5=(da*5000)/0x3FF;
if(new_circle==1)
{
new_circle=0;
AD1=AD5;
AD2=AD5;
AD3=AD5;
AD4=AD5;
}
else
{
AD5=(AD5+AD1+AD2+AD3+AD4)/5;
AD1=AD2;
AD2=AD3;
AD3=AD4;
AD4=AD5;
}
AD5=AD5*6/100; //AD5*30/5
if(c_sample%5==0)
{
PWM1=0;
c_sample=0; //2005-3-3
sample_avc=1; //等待弧长调整
// CTCON=CTCON&0X3F;
CTCON=CTCON|0X10; //CT2上升沿
PWMP=start_v51;
PWM0=127;
if(AD5>vc5)
P4_5=0;
if(AD5<vc6)
P4_5=1; //弧长方向——上
c_avc=0;
P4_4=0;
IEN1=IEN1|0X04; //允许CT2,弧长脉冲
}
else
{
if(pp.k1==DC||(pp.k1==PDC&&pp.avc_type==SP&&pulse_base==1))//(pp.avc_type==SP&&pulse_base==1||pp.avc_type==SPB||pp.avc_type==SB&&pulse_base==0)))
{
PWMP=12;
PWM1=127;
CTCON=CTCON|0x20;
IEN1=IEN1|0X04; //允许CT2
}
}
ad_finish=1; //AD转换及处理完成
}
void CM0_int (void) interrupt 11 //边缘停留时间
{
CMI0=0;
c_t42++;
if(decreased==0)
{
if(t_edge==0&&c_t42==c_t42_l||t_edge==1&&c_t42==c_t42_r) //左边缘
{
IEN1=IEN1&0XEF; //禁止CM0
CTCON=CTCON|0x02;
IEN1=IEN1|0X01;
P4_1=1;
TR0=1;
P4_6=~P4_6; //边缘停留时间结束
c_t42=0;
}
}
else
{
if(t_edge==0&&c_t42==c_t42_l||t_edge==1&&c_t42==c_t42_r) //左边缘
{
IEN1=IEN1&0XEF; //禁止CM0
CTCON=CTCON|0x02;
IEN1=IEN1|0X01;
P4_1=1;
P4_6=~P4_6; //边缘停留时间结束
c_t42=0;
}
}
CML0=TML2+0X20;
if(CML0<TML2)
CMH0=TMH2+1+0X4E;
else
CMH0=TMH2+0X4E;
}
main()
{
TMOD=0x22; //定时器1,方式2;定时器0,方式3,两个8位定时器;
TL1=0XFD; //波特率19200
TH1=0XFD;
TR1=1; //启动定时器
PCON=0X00; //SMOD=1
TMOD=0x23; //定时器0,方式3,两个8位定时器;
TR1=0;
TF1=0;
S0CON=0XF8; //串口方式3,SM2=1,REN=1,TB8=1,RB8=0,TI=0,RI=0
IP1=0X03; //CT0、CT1高优先级
IP0=0X98; //S0=1,T1=1
ES0=1; //开串口中断
ET0=1;
ET1=1;
EAD=1; //AD中断允许
ES1=1; //I2C
EA=1; //中断总允许
start_t2();
P1_5=0; //关发送使能
PWMP=20; //弧长脉冲,1K
PWM0=0;
PWM1=0;
BEGIN: CTCON=0X00;
IEN1=0x00;
P4_1=0; //out1、out2门控信号
P4_2=1; //关横摆使能
P4_3=1; //横摆方向,左
P4_6=1; //横摆使能输出
P4_5=1; //弧长方向
P4_4=1;
work=0;
start=0;
called=0;
ergent_stop=0;
need_para=0;
pgj=0;
POINTER0=0;
SSUM=0;
S_ANSW=0;
POINTER1=0;
RSUM=0;
ans=0;
// R_ANSW=0;
send=0;
resend=0;
byte_nums=4;
AD1=0;
AD2=0;
AD3=0;
AD4=0;
AD5=0;
U51=0;
c_sample=0;
ad_finish=1; //AD转换及处理完成标志
pulse_base=1; //峰、基值标志 0-基值、1-峰值
sector=0;
stop_osc=0; //进入区间标志
in_sector=0; //关弧长使能 //8574门控信号
motor_stop=0;
osc=0;
osc_l=0;
osc_r=0;
osc_ok=0; //启动横摆标志
osc_change=0;
judge_ok=0;
new_circle=1;
sample_avc=0; //采样or弧长标志0-采样 1-弧长
start_avc=0;
avc=0;
avc_up=0;
avc_down=0;
avc_ok=0;
stop_avc=0; //启动弧长标志
c_avc=0; //弧长脉冲计数
c_t0=0;
c_t42=0;
center_excursion=0; //横摆中心偏移标志(DC41)
first_center=1;
start_osc=0;
osc_add=0; //摆宽增加次数
osc_dec=0; //摆宽减小次数
osc_adjudge=0;
last_out1=0;
t_edge=1; //0-左边缘 1-右边缘
decrease=0;
decreased=0; //衰减标志
decrease_ok=0;
temp_c=0;
share=0;
lift=0;
c_lift=0;
lift_complete=0;
ask_lift_ok=0;
lift_ok=0;
demand=0;
to_begin=0;
edge_start=0;
receive_p_out=0;
receive_p_in=0;
// cross_type(); //检测十字滑架型号
COM=0X36;
COUNT0=0XA0;
COUNT0=0X0F; //启动横摆脉冲 1K
CML0=TML2+0X20;
if(CML0<TML2)
CMH0=TMH2+1+0X4E;
else
CMH0=TMH2+0X4E; //20ms
while(start==0) //等待过程中,接受点名和参数
{
if(called==1)
{
ini_sbuf(M_main,infor,com_calling,S_ANSW,0,0);
byte_nums=get_byte_nums(infor);
TR_noans();
called=0;
}
if(receive_p_out==1)
{
point=&pp.k4;
for(p_sec=0;p_sec<25;p_sec++)
*(point+p_sec)=rbuffer[p_sec*2+2]*256+rbuffer[p_sec*2+3];
pp.t17=rbuffer[52]*256+rbuffer[53];
ini_sbuf(M_main,answer,S_ANSW,0,0,0);
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);
byte_nums=4;
TR_noans();
demand=0;
receive_p_in=0;
}
if(osc_l==1)
{
P4_1=1; //开8254门控信号
P4_3=1; //左
P4_2=0; //使能
osc_l=0;
}
if(osc_r==1)
{
P4_1=1; //开8254门控信号
P4_3=0; //右
P4_2=0; //使能
osc_r=0;
}
if(avc_up==1)
{
PWM0=127;
P4_5=1; //方向——上
P4_4=0; //使能
avc_up=0;
}
if(avc_down==1)
{
PWM0=127;
P4_5=0; //方向——下
P4_4=0;
avc_down=0;
}
if(motor_stop==1)
{
P4_1=0; //关8254门控信号
P4_2=1; //关横摆使能
PWM0=0;
P4_4=1; //关弧长使能
motor_stop=0;
}
if(ergent_stop==1)
goto BEGIN;
}
const0=pp.a41*60+pp.v41*(pp.t42_l+pp.t42_r)/2;
const1=(unsigned long)(pp.v41)*(unsigned long)(pp.t17);
out0=2400000/pp.v41; //横摆脉冲, 时钟4M,4*60*0.01*1000000
out1=10*pp.a41; //横摆半宽脉冲,时钟1K,(A41/10)/(v41/60)*1000
out2=2*out1; //横摆整宽脉冲
c_t42_l=pp.t42_l*5; //pp.t42_l/10*1000/50
c_t42_r=pp.t42_r*5;
get_vc();
if(pp.k5==ON)
get_SENS();
else
SENS=5;
work=3; //关8254门控信号
if(pp.k1==DC)
{
pp.avc_type=SP;
pulse_base=1;
}
COM=0X36;
COUNT0=out0%256;
COUNT0=out0/256;
COM=0X76;
COUNT1=out1%256;
COUNT1=out1/256; //半个摆宽
COM=0XB6;
COUNT2=out1%256;
COUNT2=out1/256; //整个摆宽
do
{
if(start_avc==1) //开始弧长
{
ini_sbuf(M_main,answer,S_ANSW,0,0,0);
byte_nums=4;
TR_noans();
c_sample=0;
CTCON=CTCON&0X3F;
if(pp.k1==PDC)
{
if(pp.avc_type==SP||pp.avc_type==SPB)
{
pulse_base=0;
CTCON=CTCON|0X40; //CT3上升沿
}
else
{
pulse_base=1;
CTCON=CTCON|0X80; //CT3下降沿
}
IEN1=IEN1|0X08; //允许CT3
}
if(pp.k1==DC)
{
avc_ok=1;
PWMP=12; //23-1k 12-2k
PWM0=0;
PWM1=127;
CTCON=CTCON|0x20; //CT2下降沿
IEN1=IEN1|0X04; //允许CT2,采样保持脉冲
}
start_avc=0;
}
if(avc_ok==1&&ad_finish==1) //允许采样
{
if(pp.avc_type==SP&&pulse_base==1||pp.avc_type==SB&&pulse_base==0||pp.avc_type==SPB)
{
PWMP=12; //采样保持脉冲,2K
PWM1=127;
IEN1=IEN1|0X04; //允许CT2,采样保持脉冲
}
}
if(avc_ok==1&&need_para==1) //显示弧压
{
U51=AD5;
ini_sbuf(M_main,parameter1,0,0,0,0);
sbuffer[2]=U51/256;
sbuffer[3]=U51%256;
byte_nums=5;
TR_noans();
need_para=0;
}
if(start_osc==1) //开始横摆
{
ini_sbuf(M_main,answer,S_ANSW,0,0,0);
byte_nums=4;
TR_noans();
P4_3=1; //方向——左
P4_2=0; //开横摆使能
CTCON=CTCON|0x08;
IEN1=IEN1|0X02; //允许CT1
P4_1=1;
P4_6=1;
TR0=1;
start_osc=0;
}
if(avc_up==1)
{
if(pp.k5==OFF)
{
sample_avc=1;
c_avc=0;
CTCON=CTCON|0X10;
PWM0=127;
P4_5=1; //方向——上
P4_4=0; //使能
IEN1=IEN1|0X04;
}
else
{
if(in_sector==1)
vc1=vc1+pp.x[nonce_sector][28]*100;
else
vc1=vc1+pp.du51*100;
if(pp.avc_type==SB||pp.avc_type==SPB)
vc2=vc1+200;
}
avc_up=0;
}
if(avc_down==1)
{
if(pp.k5==OFF)
{
sample_avc=1;
c_avc=0;
CTCON=CTCON|0X10;
PWM0=127;
P4_5=0; //方向——下
P4_4=0;
IEN1=IEN1|0X04;
}
else
{
if(in_sector==1)
vc1=vc1-pp.x[nonce_sector][28]*100;
else
vc1=vc1-pp.du51*100;
if(pp.avc_type==SB||pp.avc_type==SPB)
vc2=vc1+200;
}
avc_down=0;
}
if(pp.k4==OFF&¢er_excursion==1)
{
if(excursion_dir==0)
P4_3=1; //左
else
P4_3=0;
CTCON=CTCON|0X02;
COM=0X76;
COUNT1=10;
COUNT1=0;
IEN1=IEN1|0X01;
P4_1=1; //开8254门控信号
P4_2=0;
center_excursion=0; //半个摆宽
}
if(sector==1) //进入新区间
{
if(avc_ok==1)
{
SENS=pp.x[nonce_sector][27];
if(pp.avc_type==SP||pp.avc_type==SPB&&pulse_base==1)
vc1=pp.x[nonce_sector][25]*100-100;
else
{
if(pp.avc_type==SB||pp.avc_type==SPB&&pulse_base==0)
vc1=pp.x[nonce_sector][26]*100-100;
}
vc2=vc1+200;
}
if(osc_ok==1)
{
K4=pp.x[nonce_sector][19];
if(K4==1)
{
}
else
{
stop_osc=1;
}
}
sector=0;
}
if(avc_ok==1&&stop_avc==1)
{
ini_sbuf(M_main,answer,S_ANSW,0,0,0);
byte_nums=4;
TR_noans();
PWM0=0;
IEN1=IEN1&0XFB; //禁止CT2
IEN1=IEN1&0XF7; //禁止CT3
avc=0;
avc_ok=0;
c_avc=0;
stop_avc=0;
}
if(resend==1)
{
POINTER1=0;
RSUM=0;
ini_sbuf(M_main,answer,S_ANSW,0,0,0);
byte_nums=get_byte_nums(answer);
}
}while(decrease==0);
/*
while(decrease_ok==0)
{
if(ergent_stop==1)
goto BEGIN;
}
*/
if(avc_ok==1)
{
/*
while(stop_avc==0)
{
if(ergent_stop==1)
goto BEGIN;
}
ini_sbuf(M_main,answer,S_ANSW,0,0,0);
byte_nums=4;
TR_noans();
*/
PWM0=0;
PWM1=0;
CTCON=CTCON&0x0F;
IEN1=IEN1&0XFB; //禁止CT2
IEN1=IEN1&0XF7; //禁止CT3
avc=0;
avc_ok=0;
c_avc=0;
}
if(pp.h52>0)
{
while(lift==0)
{
if(ergent_stop==1)
goto BEGIN;
}
ini_sbuf(M_main,answer,S_ANSW,0,0,0); //焊枪提升
byte_nums=4;
TR_noans();
c_avc=0;
c_lift=pp.h52/0.0375;
CTCON=CTCON&0X3F;
CTCON=CTCON|0X10; //CT2上升沿
PWM0=127;
P4_5=1; //弧长方向——上
P4_4=0; //开弧长使能
IEN1=IEN1|0X04; //允许CT2,弧长脉冲
while(lift_ok==0)
{
if(ergent_stop==1)
goto BEGIN;
if(ask_lift_ok==1)
{
if(lift_complete==1)
{
ini_sbuf(M_main,command,com_lift_ok,0,0,0);
byte_nums=4;
TR_noans();
}
else
{
ini_sbuf(M_main,answer,S_ANSW,0,0,0);
byte_nums=4;
TR_noans();
}
ask_lift_ok=0;
}
}
ini_sbuf(M_main,answer,S_ANSW,0,0,0);
byte_nums=4;
TR_noans();
// answer_judge();
}
while(to_begin==0)
{
if(ergent_stop==1)
goto BEGIN;
}
goto BEGIN;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -