?? avc_1027.c
字號:
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)
{
if(AD5>=temp_avc)
{
SENS=AD5-temp_avc;
avc_dir=0;
}
else
{
SENS=temp_avc-AD5;
avc_dir=1;
}
if(SENS>=1)
{
switch(SENS)
{
case 1: {
COM=0X36;
COUNT0=8000%256; //500HZ
COUNT0=8000/256;
COM=0X76;
COUNT1=4; //2p,0.0075mm
COUNT1=0;
}break;
case 2:
case 3: {
COM=0X36;
COUNT0=8000%256; //500HZ
COUNT0=8000/256;
COM=0X76;
COUNT1=10; //5p,0.01875mm 0.1v
COUNT1=0;
}break;
case 4:
case 5: {
COM=0X36;
COUNT0=8000%256; //500HZ
COUNT0=8000/256;
COM=0X76;
COUNT1=20;
COUNT1=0;
out1=0; //10p,0.0375mm 0.2v
}break;
case 6:
case 7: {
COM=0X36;
COUNT0=6757%256;
COUNT0=6757/256;
COM=0X76;
COUNT1=32;
COUNT1=0;
}break;
case 8:
case 9: {
COM=0X36;
COUNT0=5141%256; //778hz
COUNT0=5141/256;
COM=0X76;
COUNT1=42; //0.08mm 0.4v
COUNT1=0;
}break;
case 10:{
COM=0X36;
COUNT0=4000%256; //1000hz
COUNT0=4000/256;
COM=0X76;
COUNT1=54; //0.1mm 0.5v
COUNT1=0;
}break;
default:{
COM=0X36;
COUNT0=3376%256; //1185hz
COUNT0=3376/256;
COM=0X76;
COUNT1=64; //0.12mm 0.6v
COUNT1=0;
}break;
}
CTCON=CTCON|0x02;
IEN1=IEN1|0X01; //允許CT0,弧長調(diào)整長度
avc_enable=0;
gate=1;
}
c_sample=0;
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)))
CTCON=CTCON|0x20;
}
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)))
CTCON=CTCON|0x20;
}
ad_finish=1; //AD轉(zhuǎn)換及處理完成
}
void CM0_INT (void) interrupt 11
{
CMI0=0;
IEN1=IEN1&0XEF; //CM0
c_cm0++;
if(c_cm0==40)
{
COM=0X36;
COUNT0=0XA0;
COUNT0=0X0F;
c_cm0=0;
}
else
{
CML0=TML2+0X50; //50ms
if(CML0>TML2)
CMH0=TMH2+1+0XC3;
else
CMH0=TMH2+0XC3;
IEN1=IEN1|0X10; //CM0
}
}
main()
{
TMOD=0x22; //定時器1,方式2;定時器0,方式3,兩個8位定時器;
TL1=0XFD; //波特率9600
TH1=0XFD;
TR1=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=0X01; //CT0高優(yōu)先級
IP0=0X98; //S0=1,T1=1
ES0=1; //開串口中斷
ET1=1;
EAD=1; //AD中斷允許
EX1=1;
EA=1; //中斷總允許
start_t2();
COM=0XB6;
COUNT2=0x00;
COUNT2=0x00;
AD1=0;
AD2=0;
AD3=0;
AD4=0;
AD5=0;
U51=0;
urgent_stop=0;
avc_err=0;
err_ok=0;
err=0;
BEGIN: if(urgent_stop==1)
{
urgent_stop=0;
err_ok=0;
EX1=1;
EX0=1;
}
CTCON=0X00;
IEN1=0x00;
COM=0x36;
COUNT0=0x00;
COUNT0=0x00;
COM=0X76;
COUNT1=0x00;
COUNT1=0x00;
gate=0; //關(guān)門控
avc_enable=1;
avc_dir=1;
externel_voltage=1;
temp_voltage=1;
work=0;
called=0;
start=0;
pgj=0;
in_sector=0;
new_sector=0;
start_avc=0;
avc_ok=0;
new_circle=1;
c_sample=0;
ad_finish=1; //AD轉(zhuǎn)換及處理完成標志
pulse_base=0; //峰、基值標志 0-基值、1-峰值
stop_avc=0;
decrease=0;
lift=0;
lift_ok=0;
lift_complete=0;
to_begin=0;
need_para=0;
POINTER0=0;
SSUM=0;
S_ANSW=0;
POINTER1=0;
RSUM=0;
ans=0;
send=0;
resend=0;
r_byte_nums=4;
send_p=0;
send_p_ok=0;
// avc=0;
avc_up=0;
avc_down=0;
motor_stop=0;
touch=0;
touched=0;
PWMP=12; //采樣保持脈沖,2K
PWM0=127;
COM=0X36; //弧長點動速度,1K
COUNT0=4000%256;
COUNT0=4000/256;
CML0=TML2+0X20;
if(CML0<TML2)
CMH0=TMH2+1+0X4E;
else
CMH0=TMH2+0X4E; //20ms
lamp=0xF0;
write_8574(lamp);
while(start==0) //等待過程中,接受點名和參數(shù)
{
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(send_p==1)
{
while(send_p_ok==0)
{
if(receive_p_out==1)
{
point=&pp.k5;
for(p_sec=0;p_sec<14;p_sec++)
*(point+p_sec)=rbuffer[p_sec*2+2]*256+rbuffer[p_sec*2+3];
ini_sbuf(M_main,answer,S_ANSW,0,0,0);
s_byte_nums=4;
TR_noans();
c_lift=80*pp.h51/3;
receive_p_out=0;
}
if(receive_p_in==1)
{
point=&pp.x[nonce_sec][0];
for(p_sec=0;p_sec<4;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();
receive_p_in=0;
}
}
send_p_ok=0;
send_p=0;
EX1=1;
EX0=1;
}
if(avc_up==1)
{
COM=0X36; //450Hz
COUNT0=0X10;
COUNT0=0X27;
avc_dir=1; //方向——上
avc_enable=0; //使能
gate=1;
c_cm0=0;
CML0=TML2+0X50; //50ms
if(CML0>TML2)
CMH0=TMH2+1+0XC3;
else
CMH0=TMH2+0XC3;
IEN1=IEN1|0X10; //CM0
avc_up=0;
}
if(avc_down==1)
{
COM=0X36; //450Hz
COUNT0=0X10;
COUNT0=0X27;
avc_dir=0; //方向——下
avc_enable=0;
gate=1;
c_cm0=0;
CML0=TML2+0X50; //50ms
if(CML0>TML2)
CMH0=TMH2+1+0XC3;
else
CMH0=TMH2+0XC3;
IEN1=IEN1|0X10; //CM0
avc_down=0;
}
if(motor_stop==1)
{
gate=0; //關(guān)8254門控信號
avc_enable=1; //關(guān)弧長使能
motor_stop=0;
}
if(lift==1)
{
COM=0X36;
COUNT0=0XA0;
COUNT0=0X0F;
COM=0X76;
COUNT1=c_lift%256;
COUNT1=c_lift/256;
CTCON=CTCON|0X01; //CT0下降沿
IEN1=IEN1|0X01; //允許CT0
avc_dir=1; //弧長方向——上
externel_voltage=0;
avc_enable=0; //開弧長使能
gate=1;
while(lift_complete==0);
externel_voltage=1;
lift_complete=0;
lift=0;
if(urgent_stop==1)
goto BEGIN;
lamp=lamp&0xF7;
write_8574(lamp);
EX1=1;
}
if(pgj==1)
{
ini_sbuf(M_main,answer,S_ANSW,0,0,0);
s_byte_nums=4;
TR_noans();
avc_dir=0; //方向——下
avc_enable=0;
gate=1;
while(lift==0);
COM=0X36;
COUNT0=0XA0;
COUNT0=0X0F;
COM=0X76;
COUNT1=c_lift%256;
COUNT1=c_lift/256;
CTCON=CTCON|0X01; //CT0下降沿
IEN1=IEN1|0X01; //允許CT0
avc_dir=1; //弧長方向——上
externel_voltage=0;
avc_enable=0; //開弧長使能
gate=1;
while(lift_complete==0)
{
if(urgent_stop==1)
goto BEGIN;
}
ini_sbuf(M_main,command,com_lift_ok,0,0,0);
s_byte_nums=4;
TR_ans();
externel_voltage=1;
lift_complete=0;
lift=0;
pgj=0;
lamp=lamp&0xF7;
write_8574(lamp);
EX1=1;
}
if(urgent_stop==1)
goto BEGIN;
}
work=3;
temp_u51_p=pp.u51_p;
temp_u51_b=pp.u51_b;
if(pp.k1==DC)
temp_avc=temp_u51_p;
do
{
if(start_avc==1) //開始弧長
{
ini_sbuf(M_main,answer,S_ANSW,0,0,0);
s_byte_nums=4;
TR_noans();
temp_voltage=0;
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
}
else if(pp.k1==DC)
{
avc_ok=1;
c_sample=0;
CTCON=CTCON|0x20; //CT2下降沿
IEN1=IEN1|0X04; //允許CT2,采樣保持脈沖
}
start_avc=0;
}
if(urgent_stop==1)
goto BEGIN;
if(touch==1)
{
ini_sbuf(M_main,answer,S_ANSW,0,0,0);
s_byte_nums=4;
TR_noans();
avc_dir=0; //方向——下
COM=0X36;
COUNT0=10000%256;
COUNT0=10000/256;
COM=0X76;
COUNT1=c_lift%256;
COUNT1=c_lift/256;
touched=1;
avc_enable=0; //使能
gate=1;
touch=0;
}
if(urgent_stop==1)
goto BEGIN;
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;
s_byte_nums=5;
TR_noans();
need_para=0;
}
if(urgent_stop==1)
goto BEGIN;
if(avc_up==1)
{
if(pp.k5==OFF||avc_ok==0)
{
avc_dir=1; //方向——上
COM=0X36; //弧長點動速度,1K
COUNT0=4000%256;
COUNT0=4000/256;
COM=0X76;
COUNT1=250;
COUNT1=0;
avc_enable=0; //使能
CTCON=CTCON|0X02;
IEN1=IEN1|0X01;
lift=1;
gate=1;
}
if(avc_ok==1)
{
if(in_sector==1)
{
temp_u51_p=temp_u51_p+pp.x[nonce_sec][3];
temp_u51_b=temp_u51_b+pp.x[nonce_sec][3];
}
else
{
temp_u51_p=temp_u51_p+pp.du51;
temp_u51_b=temp_u51_b+pp.du51;
}
if(pp.k1==DC)
temp_avc=temp_u51_p;
}
avc_up=0;
}
if(urgent_stop==1)
goto BEGIN;
if(avc_down==1)
{
if(pp.k5==OFF||avc_ok==0)
{
avc_dir=0; //方向——下
COM=0X36; //弧長點動速度,1K
COUNT0=4000%256;
COUNT0=4000/256;
COM=0X76;
COUNT1=250;
COUNT1=0;
avc_enable=0; //使能
CTCON=CTCON|0X02;
IEN1=IEN1|0X01;
lift=1;
gate=1;
}
if(avc_ok==1)
{
if(in_sector==1)
{
temp_u51_p=temp_u51_p-pp.x[nonce_sec][3];
temp_u51_b=temp_u51_b-pp.x[nonce_sec][3];
}
else
{
temp_u51_p=temp_u51_p-pp.du51;
temp_u51_b=temp_u51_b-pp.du51;
}
if(pp.k1==DC)
temp_avc=temp_u51_p;
}
avc_down=0;
}
if(urgent_stop==1)
goto BEGIN;
if(in_sector==1&&new_sector==1) //進入新區(qū)間
{
temp_u51_p=pp.x[nonce_sec][0];
temp_u51_b=pp.x[nonce_sec][1];
new_sector=0;
}
if(urgent_stop==1)
goto BEGIN;
if(avc_ok==1&&stop_avc==1)
{
ini_sbuf(M_main,answer,S_ANSW,0,0,0);
s_byte_nums=4;
TR_noans();
gate=0;
IEN1=IEN1&0XF2; //禁止CT0,CT2,CT3
// avc=0;
avc_ok=0;
stop_avc=0;
temp_voltage=1;
}
if(urgent_stop==1)
goto BEGIN;
}while(decrease==0);
if(avc_ok==1)
{
gate=0;
IEN1=IEN1&0XF2; //禁止CT0,CT2,CT3
// avc=0;
avc_ok=0;
stop_avc=0;
temp_voltage=1;
}
if(pp.h52>0)
{
while(lift==0)
{
if(urgent_stop==1)
goto BEGIN;
}
ini_sbuf(M_main,answer,S_ANSW,0,0,0); //焊槍提升
s_byte_nums=4;
TR_noans();
c_lift=80*pp.h52/3; //c_lift=400*pp.h52/1.5
COM=0X36; //弧長點動速度,1K
COUNT0=4000%256;
COUNT0=4000/256; //弧長采樣脈沖,1K
COM=0X76;
COUNT1=c_lift%256;
COUNT1=c_lift/256;
CTCON=CTCON|0X01; //CT0下降沿
IEN1=IEN1|0X01; //允許CT0
avc_dir=1; //弧長方向——上
avc_enable=0; //開弧長使能
lift=1;
gate=1;
while(lift_complete==0)
{
if(urgent_stop==1)
goto BEGIN;
}
ini_sbuf(M_main,command,com_lift_ok,0,0,0);
s_byte_nums=4;
TR_ans();
}
while(to_begin==0)
{
if(urgent_stop==1)
goto BEGIN;
}
goto BEGIN;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -