📄 main_stop2.c.bak
字号:
{
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)
{
if(readEEPbyte==1||readEEPpage==1||writeEEPpage==1||writeEEPword==1||writeEEPbyte==1)
{
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;
}
}
}
}
}
}
}
else
S1CON=0XD5;
}
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)
else
S1CON=0xC5;//STA=0 STO=0 SI=0 AA=1
}
if(S1STA==0x48)
{
FF=1;
S1CON=0xD5;//STA=0 STO=1 SI=0 AA=1
}
if(S1STA==0x50)
{
GET=S1DAT;
if(readEEPpage==1)
{
nums1++;
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;
}
else
S1CON=0xC1;
}
if(S1STA==0x58)
{
if(readEEPbyte==1||readEEPpage==1)
{
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;
}
}
}
else
S1CON=0xD5;
}
ES1=1;
}
void CT0_int (void) interrupt 6
{
CTI0=0;
IEN1=IEN1&0XFE;
CTCON=CTCON&0XFC;
if(enter==0)
{
SLA=0X40;
COMM=0X02;
start_i2a();
delay(5);
SLA=0X43;
start_i2a();
delay(5);
switch(GET)
{
case 0xFB: {
start=1;
enter=1;
}break;
case 0xF7: {
decrease=1;
enter=1;
}break;
case 0xEF: {
current_add=1;
enter=1;
}break;
case 0xDF: {
current_dec=1;
enter=1;
}break;
default: break;
}
if(enter==0)
{
SLA=0X40;
COMM=0X01;
start_i2a();
delay(5);
SLA=0X43;
start_i2a();
delay(5);
switch(GET)
{
case 0xFE: {
rot_front=1;
enter=1;
}break;
case 0xFD: {
rot_reverse=1;
enter=1;
}break;
case 0xFB: {
wire_add=1;
enter=1;
}break;
case 0xF7: {
wire_dec=1;
enter=1;
}break;
case 0xEF: {
avc_up=1;
enter=1;
}break;
case 0xDF: {
avc_down=1;
enter=1;
}break;
case 0xBF: {
osc_l=1;
enter=1;
}break;
case 0x7F: {
osc_r=1;
enter=1;
}break;
default: break;
}
}
SLA=0X40;
COMM=0X03;
start_i2a();
delay(5);
}
else
{
motor_stop=1;
enter=0;
}
if(enter==1)
CTCON=CTCON|0X01;
else
CTCON=CTCON|0X02;
IEN1=IEN1|0X01;
}
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();
stop=1;
err=0;
urgent_stop=0;
main_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;
rc_err=1;
EX0=1;
stop=0;
while(rc_err==1);
urgent_stop=0;
EX0=1;
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;
last_FINISH=0;
FINISH=0;
readPRG(); //从EEPROM中读取上次使用的程序号
delay(5);
ini_ram(); //从EEPROM中读取当前程序号下的参数存入RAM
call_slave(); //点名
// 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)
{
urgent_stop=0;
goto AA;
}
if(existent[4]==1)
{
delay(2);
send_param1();
if(urgent_stop==1)
{
urgent_stop=0;
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;
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;
enter=0;
CML0=TML2+0XD4;
if(CML0<TML2)
CMH0=TMH2+1+0X30;
else
CMH0=TMH2+0X30; //CM0 100ms
SLA=0X40;
COMM=0X03;
start_i2a();
CTCON=CTCON|0X02;
IEN1=IEN1|0X01;
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();
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();
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_edit,0,0,0,0);
s_byte_nums=4;
TR_noans();
work=1;
edit();
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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -