📄 main_stop.c.bak
字号:
}
void TR_INT (void) interrupt 4 //串行口中断
{ //关中断
if(TI==1) //发送完成
{
TI=0;
POINTER0++; //发送缓冲指针加1
if(POINTER0==1)
TB8=0;
if(POINTER0<s_byte_nums)
{
if(POINTER0<s_byte_nums-1)
{
if(s_p==1)
SSUM=SSUM+sbuffer1[POINTER0];
else
SSUM=SSUM+sbuffer[POINTER0]; //6个数据字节求和
}
else
{
if(s_p==1)
sbuffer1[s_byte_nums-1]=SSUM+sbuffer1[0];
else
sbuffer[s_byte_nums-1]=SSUM+sbuffer[0]; //数据和加地址生成校验码
}
}
}
if(RI==1) //接收完成
{
RI=0;
POINTER1++; //接收缓冲指针加1
rbuffer[POINTER1-1]=S0BUF; //从接收缓冲读出数据
if(rbuffer[0]==M_main)
{
if(POINTER1==2)
r_byte_nums=get_byte_nums(rbuffer[1]);
if(POINTER1<r_byte_nums)
RSUM=RSUM+rbuffer[POINTER1-1]; //生成校验码
else
{
if(rbuffer[r_byte_nums-1]==RSUM)
{
if(ans==0)
{
POINTER1=0;
RSUM=0;
}
S_ANSW=OK;
data_type();
}
else
{
S_ANSW=FAIL;
if(resend==0)
resend=1;
}
}
}
else
POINTER1=0;
}
}
void S1_INT (void) interrupt 5 //I2C
{
ES1=0;
if(S1STA==0x00)
{
FF=1;
S1CON=0xD5;//STA=0 STO=1 SI=0 AA=1
}
if(S1STA==0X08)
{
S1DAT=SLA;
S1CON=0xC5;//STA=0 STO=0 SI=0 AA=1
}
if(S1STA==0X10)
{
S1DAT=SLA;
S1CON=0xC5;//STA=0 STO=0 SI=0 AA=1
}
if(S1STA==0X18)
{
S1DAT=COMM;
S1CON=0xC5;//STA=0 STO=0 SI=0 AA=1
}
if(S1STA==0X20)
{
FF=1;
S1CON=0xD5;//STA=0 STO=1 SI=0 AA=1
}
if(S1STA==0X28)
{
nums++;
if(readEEPbyte==1)
{
if(nums==1)
{
if(getPRG==1)
S1DAT=0X00;
S1CON=0xC5;//STA=0 STO=0 SI=0 AA=1
}
if(nums==2)
{
if(getPRG==1)
SLA=0XA1;
S1CON=0XE5;
}
}
else
{
if(readEEPpage==1)
{
if(times<6&&nums<130)
{
if(nums==1)
{
COMM=(mainDDR+times*128)%256;
S1DAT=COMM;
S1CON=0xC5;//STA=0 STO=0 SI=0 AA=1
}
if(nums==2)
{
SLA=SLA+1;
S1CON=0XE5;
}
}
}
else
{
if(writeEEPpage==1)
{
if(times<6&&nums<130)
{
if(nums==1)
COMM=(mainDDR+times*128)%256;
else
{
if(times==5&&nums>=114)
COMM=0xFF;
else
{
if(nums%2==0)
{
COMM=*(point+(times*64+nums-delt))/256;
delt++;
}
else
COMM=*(point+(times*64+nums-delt))%256;
}
}
S1DAT=COMM;
S1CON=0xC5;//STA=0 STO=0 SI=0 AA=1
}
else
{
S1CON=0xD5;
writeEEPpage=0;
}
}
else
{
if(writeEEPword==1)
{
if(nums<4)
{
if(param==1)
{
if(nums==1)
COMM=(mainDDR+secondDDR)%256;
if(nums==2)
COMM=general_param/256;
if(nums==3)
COMM=general_param%256;
}
if(in_sector==1)
{
if(nums==1)
COMM=(mainDDR+152+nonce_sec*60+p_sec*2)%256;
if(nums==2)
COMM=rbuffer[p_sec*2+3];
if(nums==3)
COMM=rbuffer[p_sec*2+4];
}
S1DAT=COMM;
S1CON=0xC5;//STA=0 STO=0 SI=0 AA=1
}
else
{
S1CON=0xD5;
writeEEPword=0;
}
}
else
{
if(writeEEPbyte==1)
{
if(nums<3)
{
if(savePRG==1)
{
if(nums==1)
COMM=0X00;
else
COMM=PRG;
}
S1DAT=COMM;
S1CON=0xC5;//STA=0 STO=0 SI=0 AA=1
}
else
{
S1CON=0xD5;
writeEEPbyte=0;
}
}
}
}
}
}
}
if(S1STA==0x30)
{
FF=1;
S1CON=0xD5;//STA=0 STO=1 SI=0 AA=1
}
if(S1STA==0x38)
S1CON=0xE5;//STA=1 STO=0 SI=0 AA=1
if(S1STA==0X40)
{
if(readEEPbyte==1)
S1CON=0XC1;
if(readEEPpage==1)
S1CON=0xC5;//STA=0 STO=0 SI=0 AA=1
}
if(S1STA==0x48)
{
FF=1;
S1CON=0xE5;//STA=0 STO=1 SI=0 AA=1
}
if(S1STA==0x50)
{
nums1++;
GET=S1DAT;
if(times<5&&nums1<130||times==5&&nums1<114)
{
if(nums1%2==1)
temp_GET=GET;
else
{
temp_GET=temp_GET*256+GET;
*(point+(times*64+nums1-delt))=temp_GET;
delt++;
}
S1CON=0XC5;
}
else
S1CON=0XC1;
}
if(S1STA==0x58)
{
GET=S1DAT;
if(readEEPbyte==1)
{
S1CON=0xD5;//STA=0 STO=1 SI=0 AA=1
readEEPbyte=0;
}
else
{
if(readEEPpage==1)
{
S1CON=0XD5;
temp_GET=temp_GET*256+GET;
*(point+(times*64+nums1-delt))=temp_GET;
readEEPpage=0;
}
}
}
ES1=1;
}
void CM0_int (void) interrupt 11 //流程时钟,100ms中断一次
{
CMI0=0;
if(auto_return==0)
c_flow++;
else
{
if(c_end>0)
c_end--;
else
IEN1=IEN1&0XEF; //禁止CM0
}
CML0=TML2+0XD4;
if(CML0>TML2)
CMH0=TMH2+1+0X30;
else
CMH0=TMH2+0X30; //100ms
}
main()
{
unsigned char k;
TMOD=0x22; //定时器1,方式2;
TL1=0XFD; //波特率9600
TH1=0XFD;
TR1=1; //启动定时器
TMOD=0x23; //定时器0,方式3,两个8位定时器;
TR1=0;
TF1=0;
S0CON=0XC0; //串口方式3,SM2=0,REN=0,TB8=1,RB8=0,TI=0,RI=0
IP0=0X9C; //S0=1,T1=1,EX1=1
ES0=1; //开串口中断
ET1=1;
ES1=1; //I2C
EA=1; //中断总允许
start_t2();
urgent_stop=0;
main_err=0;
// rc_err=0;
p_forbid=0;
rc_forbid=0;
p_active=0;
rc_active=0;
calling=0;
getPRG=0;
readEEPbyte=0;
readEEPpage=0;
send_p_ok=0;
S_ANSW=0;
ans=0;
R_ANSW=0;
r_byte_nums=4;
noans_ok=1;
overtime=0;
wait_ans=0;
s_p=0; //1,发送参数
resend=0;
EX0=1;
if(reset==0x5555)
{
rc_err=1;
stop=0;
while(rc_err==1);
}
else
{
last_FINISH=0;
FINISH=0;
// call_slave(); //点名
readPRG(); //从EEPROM中读取上次使用的程序号
delay(5);
ini_ram(); //从EEPROM中读取当前程序号下的参数存入RAM
delay(3);
AA: while(send_p_ok==0)
{
ini_sbuf(M_ALL,command,com_send_p,0,0,0,0);
s_byte_nums=4;
TR_noans();
send_param(); //更新RAM,及向从板发送参数
if(urgent_stop==1)
goto AA;
delay(2);
send_param1();
if(urgent_stop==1)
goto AA;
ini_sbuf(M_ALL,command,com_send_p_ok,0,0,0,0);
s_byte_nums=4;
TR_noans();
send_p_ok=1;
}
send_p_ok=0;
}
delay(300);
switch_state();
BEGIN: if(urgent_stop==1)
{
POINTER1=0;
RSUM=0;
r_byte_nums=4;
urgent_stop=0;
EX0=1;
}
IEN1=IEN1&0XEF;
reset=0x5555;
send_p_ok=0;
p_send=0;
work=0; //工作状态
err=0; //错误编号
editing=0; //正在编程
change_sec_num=0;
edit_finish=0; //编程结束
temp_edit_finish=0;
param=0;
p_out=0;
change_prg=0;
savePRG=0;
copy=0;
start=0;
start_again=0;
ignit_ok=0; //引弧成功信号
c_flow=0;
c_sum=0;
c_current=0;
c_end=0;
in_sector=0;
nonce_sec=0; //当前区间号
t31OK=0; //送丝已经开始=1
t41OK=0; //横摆已经开始=1
t51OK=0; //弧长已经开始=1
wire_stoped=0;
avc_stoped=0;
CURRENT=0;
VOLTAGE=0;
AVC=0;
decrease=0;
decrease_ok=0;
lift_ok=0;
auto_return=0;
return_ok=0;
writeEEPbyte=0;
writeEEPword=0;
writeEEPpage=0;
S_ANSW=0;
ans=0;
R_ANSW=0;
r_byte_nums=4;
noans_ok=1;
overtime=0;
wait_ans=0;
s_p=0; //1,发送参数
resend=0;
c_c_t1=0;
rot_front=0;
rot_reverse=0;
wire_add=0;
wire_dec=0;
osc_l=0;
osc_r=0;
breadth_add=0;
breadth_dec=0;
avc_up=0;
avc_down=0;
motor_stop=0;
new_switch11=0;
new_switch22=0;
delt_switch=0;
rc_demand=0;
c_ex1=0;
CML0=TML2+0XD4;
if(CML0<TML2)
CMH0=TMH2+1+0X30;
else
CMH0=TMH2+0X30; //CM0 100ms
REN=1;
while(start==0)
{
if(p_forbided==1&&p_forbid==0)
{
REN=0;
ini_sbuf(M_P,command,com_forbid_p,0,0,0,0);
s_byte_nums=4;
TR_noans();
REN=1;
p_active=0;
p_forbid=1;
}
if(rc_forbided==1&&rc_forbid==0)
{
REN=0;
ini_sbuf(M_RC,command,com_forbid_rc,0,0,0,0);
s_byte_nums=4;
TR_noans();
REN=1;
rc_active=0;
rc_forbid=1;
}
if(p_active==0&&p_actived==1&&p_forbided==0)
{
ini_sbuf(M_P,command,com_p_active,0,0,0,0);
s_byte_nums=4;
TR_noans();
// TR_ans();
// answer_judge();
REN=1;
p_forbid=0;
p_active=1;
}
if(rc_active==0&&rc_actived==1&&rc_forbided==0)
{
ini_sbuf(M_RC,command,com_rc_active,0,0,0,0);
s_byte_nums=4;
TR_noans();
// TR_ans();
// answer_judge();
ini_sbuf(M_RC,command,com_weld_simu,0,0,0,0);
s_byte_nums=4;
TR_ans();
YOUHU=rbuffer[3];
new_switch11=0;
ini_sbuf(M_current,infor,com_weld_simu,YOUHU,0,0,0);
s_byte_nums=6;
TR_noans();
ini_sbuf(M_RC,command,com_wire_on_off,0,0,0,0);
s_byte_nums=4;
TR_ans();
WIRE=rbuffer[3];
new_switch22=0;
ini_sbuf(M_RW,infor,com_wire_on_off,WIRE,0,0,0);
s_byte_nums=6;
TR_noans();
rc_forbid=0;
rc_active=1;
REN=1;
}
if(change_prg==1&&editing==0) //程序号改变
{
PRG=rbuffer[2];
save_prg();
delay(2);
ini_ram();
delay(2);
while(send_p_ok==0)
{
ini_sbuf(M_ALL,command,com_send_p,0,0,0,0);
s_byte_nums=4;
TR_noans();
send_param();
if(urgent_stop==1)
goto AA;
delay(2);
send_param1();
if(urgent_stop==1)
goto AA;
ini_sbuf(M_ALL,command,com_send_p_ok,0,0,0,0);
s_byte_nums=4;
TR_noans();
send_p_ok=1;
}
send_p_ok=0;
ini_sbuf(M_P_RC,program,PRG,0,0,0,0);
s_byte_nums=4;
TR_noans();
change_prg=0;
REN=1;
}
if(editing==1) //编程
{
ini_sbuf(M_ALL,command,com_send_p,0,0,0,0);
s_byte_nums=4;
TR_noans();
work=1;
edit();
while(send_p_ok==0)
{
send_param();
if(urgent_stop==1)
goto AA;
delay(2);
send_param1();
if(urgent_stop==1)
goto AA;
ini_sbuf(M_ALL,command,com_send_p_ok,0,0,0,0);
s_byte_nums=4;
TR_noans();
send_p_ok=1;
if(urgent_stop==1)
goto BEGIN;
}
send_p_ok=0;
REN=1;
}
if(rot_front==1)
{
ini_sbuf(M_RW,command,com_rot_front,0,0,0,0);
s_byte_nums=4;
TR_noans();
REN=1;
rot_front=0;
}
if(rot_reverse==1)
{
ini_sbuf(M_RW,command,com_rot_reverse,0,0,0,0);
s_byte_nums=4;
TR_noans();
REN=1;
rot_reverse=0;
}
if(wire_add==1)
{
ini_sbuf(M_RW,command,com_wire_add,0,0,0,0);
s_byte_nums=4;
TR_noans();
REN=1;
wire_add=0;
}
if(wire_dec==1)
{
ini_sbuf(M_RW,command,com_wire_dec,0,0,0,0);
s_byte_nums=4;
TR_noans();
REN=1;
wire_dec=0;
}
if(osc_l==1)
{
ini_sbuf(M_OSC,command,com_osc_l,0,0,0,0);
s_byte_nums=4;
TR_noans();
REN=1;
osc_l=0;
}
if(osc_r==1)
{
ini_sbuf(M_OSC,command,com_osc_r,0,0,0,0);
s_byte_nums=4;
TR_noans();
REN=1;
osc_r=0;
}
if(avc_up==1)
{
ini_sbuf(M_AVC,command,com_avc_up,0,0,0,0);
s_byte_nums=4;
TR_noans();
REN=1;
avc_up=0;
}
if(avc_down==1)
{
ini_sbuf(M_AVC,command,com_avc_down,0,0,0,0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -