📄 weld_all.c
字号:
if(parameter_value[7+criterion]==0)
{ //// wether skip both welding-3 and cooling-2
if(parameter_value[8+criterion]==0)
{ //// prepare for holding
counter = 2*parameter_value[10+criterion]; current_n = 7;
//// turn on the hold LED
segment(5,0);
segment(3,1);
//// enable Syn interrupt
EX0 = 1;
break;
}
else
{ //// prepare for welding-3
counter = 2*parameter_value[8+criterion]; current_n = 6;
weld_current = parameter_value[9+criterion];
//// timer = 66535-(9900-48*weld_current)
timer = 55635 + 48*weld_current;
high_byte_0 = timer/256; low_byte_0 = timer%256;
//// wether the weld current is bigger than 100
if(weld_current>100)
{
high_byte_1 = 0xea; low_byte_1 = 0x33; first_time = 1;
}
else
{
first_time = 0;
}
//// enable Syn interrupt
EX0 = 1;
break;
}
}
else
{
//// prepare for cooling-2
counter = 2*parameter_value[7+criterion]; current_n = 5;
//// turn on the cool LED
segment(4,1);
segment(5,0);
}
}
//// enable Syn interrupt
EX0 = 1;
break;
//// now cooling-2
case 5: con = 0;
counter = counter - 1;
if(counter==0)
{ //// wether skip welding-2
if(parameter_value[8+criterion]==0)
{ //// prepare for holding
counter = 2*parameter_value[10+criterion]; current_n = 7;
//// turn on the hold LED
segment(4,0);
segment(3,1);
//// enable Syn interrupt
EX0 = 1;
break;
}
else
{
//// turn on the weld LED,prepare for welding-3
segment(5,1);
segment(4,0);
counter = 2*parameter_value[8+criterion]; current_n = 6;
weld_current = parameter_value[9+criterion];
//// timer = 66535-(9900-48*weld_current)
timer = 55635 + 48*weld_current;
high_byte_0 = timer/256; low_byte_0 = timer%256;
//// wether the weld current is bigger than 100
if(weld_current>100)
{
high_byte_1 = 0xea; low_byte_1 = 0x33; first_time = 1;
}
else
{
first_time = 0;
}
}
}
//// enable Syn interrupt
EX0 = 1;
break;
//// now welding-3
case 6:con = 0;
if(weld_adjust)
{
//// check safe for every Syn
if(EXF2==1)
{
EXF2 = 0; safe = 1;
}
else
{ //// no valid feedback signal
con = 0;
relay_A = 0;
relay_B = 0;
alarm_scr();
//// stop welding
EX0 = 0; start = 0;
//// current_n = 0 for next welding
current_n = 0;
//// disable interrupts of ZLG7289 and Satrt-A\B
EX1 = 0; ET2 = 0;
break;
}
if(first_time)
{
TH1 = high_byte_1; TL1 = low_byte_1; first_time = 0;
}
else
{
TH1 = high_byte_0; TL1 = low_byte_0;
}
TR1 = 1; ET1 = 1;
}
counter = counter - 1;
if(counter==0)
{
counter = 2*parameter_value[10+criterion]; current_n = 7;
//// turn on the hold LED
segment(5,0);
segment(3,1);
}
//// enable Syn interrupt
EX0 = 1;
break;
//// now holding
case 7: con = 0;
counter = counter - 1;
//// enable Syn interrupt
EX0 = 1;
if(counter==0)
{
counter = 2*parameter_value[11+criterion];
if(counter==0)
{
//// set flag standing for end of the welding
start = 0;
//// enable interrupt for ZLG7289
EX1 = 1;
//// enable interrupt for Start-A\B
ET2 = 1;
EXEN2 = 1;
EXF2 = 0;
//// disable Syn interrupt
EX0 = 0;
//// current_n = 0 for next welding
current_n = 0;
//// shut the two relays
relay_A = 0;
relay_B = 0;
//// no state LED is on
segment(3,0);
}
else
{
current_n = 8;
//// turn on the stop LED
segment(3,0);
segment(2,1);
//// shut down the two relays
relay_A = 0;
relay_B = 0;
}
}
break;
//// now stoped
case 8: counter = counter - 1;
//// enable Syn interrupt
EX0 = 1;
if(counter==0)
{
//// continue welding
if((start_a==a_state)&&(start_b==b_state))
{ //// no state LED is on
segment(2,0);
start = 0;
current_n = 0;
counter = 2*parameter_value[0+criterion];
}
else
{
//// set flag standing for end of the welding
start = 0;
//// current_n = 0 for next welding
current_n = 0;
//// enable interrupt for ZLG7289
EX1 = 1;
//// enable interrupt for Start-A\B
ET2 = 1;
EXEN2 = 1;
EXF2 = 0;
//// disable Syn interrupt
EX0 = 0;
//// shut the two relays
relay_A = 0;
relay_B = 0;
//// no state LED is on
segment(2,0);
}
}
break;
default: _nop_();
}
default: _nop_();
}
}
//// timer for Waitdog
void timer0(void) interrupt TF0_VECTOR
{
TH0 = 0xe0; TL0 = 0xbf; // count for 8000
WDTRST = 0x1e;
WDTRST = 0xe1;
}
//// Timer-1 is used for the triggling of SCR
void timer1(void) interrupt TF1_VECTOR
{
TR1 = 0;
if(feedback_check==1)
{
EXEN2 = 1;
con = 1;
}
else
{
con = 1;
EXF2 = 1;
}
}
//// Timer-2 serves Start-A\B interrupt
//// EXF2 can't be clear,because it will be used in the beginning of the following welding
void timer2(void) interrupt TF2_VECTOR
{
if(licence==1)
{
//// 去抖动
delay(1000);
//// check wether it is wrong command
if((start_a==1)&&(start_b==1))
{
EXF2 = 0;
}
else
{
if(~T2_EX)
{ //// disable edge triggler of Start-A\B
ET2 = 0;
EXEN2 = 0;
//// story Start-A\B for relay_a\b
if(start_a&~start_b)
{
a_state = 1; b_state = 0;
//// criterion = A
criterion = 0;
}
else if(~start_a&start_b)
{
a_state = 0; b_state = 1;
//// criterion = B
criterion = 12;
}
else
{
a_state = 0; b_state = 0;
}
criterion_switch();
parameter_switch();
display_parameter_value(parameter_value[parameter+criterion]);
//// whether need check the feedback signal
if(parameter_value[35]==0)
feedback_check = 0;
else
feedback_check = 1;
//// disable interrupt for ZLG7289
EX1 = 0;
//// enable interrupt for Syn
EX0 = 1;
}
}
}
else
{
EXF2 = 0;
}
}
int_init(void)
{
//// config Timer-0 uesed for Waitdog
TMOD &= ~T0_M1_;
TMOD |= T0_M0_; // mode 1
TMOD &= ~T0_CT_; // T0 is a timer
PT0 = 1; // T0 has the highest priority
TR0 = 1;
ET0 = 1;
//// config Timer-1 for for con
TMOD &= ~T1_M1_;
TMOD |= T1_M0_; // mode 1
TMOD &= ~T1_CT_; // T1 is timer
ET1 = 1; //enable Timer 1 interrupt
//// config external interrupt-0
IT0 = 1; //edge trigger
//// config external interrupt-1
IT1 = 1; //edge trigger
EX1 = 1; //enable external interrupt 1
//// config Timer-2 for Start-A\B interrupt
TR2 = 0; // disable timer and counter
EXEN2 = 1; //enable edge triggler
ET2 = 1; // enable Timer-2 interrupt
EA = 1; //interrup enable
if(mode==0)
{
//// disable interrupt of Start-A\B
EXEN2 = 0; EXF2 = 0; ET2 = 0;
}
}
main()
{
//// shut down the SCR
con = 0;
//// welding haven't been began
start = 0;
//// shut down the two relays
relay_A = 0;
relay_B = 0;
//for(X=0;X<24;X++)
// parameter_value[X] = 1;
write_enable(1);
//// read all of the 36 parameters in the EEPROM
eeprom_36_byte_ram();
delay(4160);
//// check the licence
if(parameter_value[31]>0)
{ //// licence is valible forever
licence = 1;
}
else
{
if(parameter_value[24+6]==0)
{ //// displaying "AAA" means that the licence is invalid
display(0xcb,10);
display(0xcc,10);
display(0xcd,10);
//// blink the three data BCD LEDs
display(0x88,0xc7);
licence = 0;
}
else
{ //// decrease the left times
parameter_value[24+6] = parameter_value[24+6] - 1;
write_eerom(24+6,parameter_value[24+6]);
licence = 1;
}
}
if(licence==1)
{
// delay(4160);
comd_out(191); delay(15000); //闪烁
comd_out(0xa4); //reset ZLG7289
read_mode(); // read mode
mode_switch();
parameter_switch();
criterion_switch();
read_eerom(parameter+criterion);
display_parameter_value(parameter_value[parameter+criterion]);
//// check the current 12 parameter datas
check_data();
}
else
{
read_mode(); // read mode
mode_switch();
parameter_switch();
criterion_switch();
}
int_init();
while(1){}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -