📄 hjcomm.c
字号:
true=1;
}
}
}
}
if(true==0){
if((beg_add|0xf000)==(end_add|0xf000)){首尾相等
if((beg_add|0xf000)!=0xf080){
true=2;
}
}
}
if(true==0){查有无收发数据
i=0;
true=5;
while(i<6){
if((XBYTE[0xf030+5*i]>0)&(XBYTE[0xf030+5*i]<4)){
true=0;
}
if(XBYTE[0xf030+5*i]==0x87){
true=0;
}
if((XBYTE[0xf050+5*i]>0)&(XBYTE[0xf050+5*i]<4)){
true=0;
}
if(XBYTE[0xf050+5*i]==0x87){
true=0;
}
if(true==0){
i=6;
}
i=i+1;
}
}
i=0;
if(true>0){
XBYTE[0xf024]=1;
while(i<20){
if(XBYTE[0xf023]==0){
XBYTE[0xf024]=1;
if((XBYTE[0xf023]==0)&(XBYTE[0xf024]==1)){
i=20;
}
}
i=i+1;
}
if((XBYTE[0xf023]==0)&(XBYTE[0xf024]==1)){
if(XBYTE[0xf076]==0x88){
EA=0;
if(true==1){
i=0;
while(i<6){
XBYTE[0xf030+5*i]=0;
XBYTE[0xf050+5*i]=0;
i=i+1;
}
if(true>1){
XBYTE[0xf01f]=0xf0;
XBYTE[0xf020]=0x80;
XBYTE[0xf021]=0xf0;
XBYTE[0xf022]=0x80;
}
}
EA=1;
}
}
}
EA=1;
XBYTE[0xf024]=0;
}*/
/*-------------------------------------------------------*/
void cpuwrit_dete(uchar no){ /*CPU板写双口RAM越界检查*/
uint data star_add,data end_add,data calc_long,data date_long;
wdi_reset();
XBYTE[0xf031+5*no]=XBYTE[0xf031+5*no]|0xf0;/* 屏蔽高四位将高四位置成F */
XBYTE[0xf033+5*no]=XBYTE[0xf033+5*no]|0xf0;
star_add=XBYTE[0xf031+5*no]*256+XBYTE[0xf032+5*no];
end_add=XBYTE[0xf033+5*no]*256+XBYTE[0xf034+5*no];
date_long=XBYTE[star_add+1]*256+XBYTE[star_add+2];
if((star_add<0xf080)||(end_add>0xf7ff)){/*CPU写数据地址越界检查*/
sparkler_main(2);
XBYTE[0xf030+5*no]=0;
}
if(star_add<end_add){
calc_long=end_add-star_add-2;
}
else{
calc_long=end_add-0xf080+0xf7ff-star_add-1;
}
if(date_long!=calc_long){ /*CPU写数据长度与实际地址检查*/
sparkler_main(2);
XBYTE[0xf030+5*no]=0;
}
wdi_reset();
}
/*-------------------------------------------------------*/
void reset(){ /*初始化主程序*/
uchar i;
P1_6=0;
set_dou_ram();
sparkler(3);
set_comm1(4);
set_comm2(4);
set_comm3(4);
/* if(XBYTE[0xF004]==1){ 拨号方式*/
modem_angser(1,1);
delay(200);
modem_flow(1,3);
delay(200);
/* if(XBYTE[0xF01E]==1){ 互为备用*/
modem_angser(2,1);
delay(200);
modem_flow(2,3);
/* delay(200);
}
}
if(XBYTE[0xF005]==1){ 拨号方式
modem_angser(2,1);
delay(200);
modem_flow(2,3);
delay(200);
if(XBYTE[0xF01E]==1){ 互为备用
modem_angser(1,1);
delay(200);
modem_flow(1,3);
delay(200);
}
}*/
i=0;
while(i<4){
XBYTE[0xf070+i]=0; /*软件定时器1*/
i=i+1;
}
i=0;
while(i<3){
XBYTE[0xf02d+i]=4;
XBYTE[0xf001+i]=4; //初始化串口波特率为9600
i=i+1;
}
}
/*-------------------------------------------------------*/
/*void writeram(){ CPU板出错向指挥指挥中心回馈
uchar i;
wdi_reset();
i=0;
while(i<0x50){
XBYTE[0xf030+i]=0;
i=i+1;
}
XBYTE[0xf01f]=0xf0; 初始化双口RAM接收数据最远端地址
XBYTE[0xf020]=0x80;
XBYTE[0xf021]=0xf0; 初始化双口RAM发送数据最远端地址
XBYTE[0xf022]=0x8a;
XBYTE[0xf080]=0x84;
XBYTE[0xf081]=0;
XBYTE[0xf082]=8;
XBYTE[0xf083]=8;
XBYTE[0xf084]=0;
XBYTE[0xf085]=0;
XBYTE[0xf086]=0;
XBYTE[0xf087]=0;
XBYTE[0xf088]=0;
XBYTE[0xf089]=0;
XBYTE[0xf08a]=0;
XBYTE[0xf031]=0xf0;
XBYTE[0xf032]=0x80;
XBYTE[0xf033]=0xf0;
XBYTE[0xf034]=0x8a;
XBYTE[0xf030]=1;
XBYTE[0xf036]=0xf0;
XBYTE[0xf037]=0x80;
XBYTE[0xf038]=0xf0;
XBYTE[0xf039]=0x8a;
XBYTE[0xf035]=2;
}*/
/*-------------------------------------------------------*/
/*void cpuerr_dete(){ CPU板工作正常检查
uchar data i,j;
wdi_reset();
XBYTE[0xf075]=XBYTE[0xf075]+1;
if((XBYTE[0xf075]%10)==0){
i=0;
j=0;
while(i<4){
if(XBYTE[0xf078+i]!=0xaa+i*0x11){
j=j+1;
}
XBYTE[0xf078+i]=0;
i=i+1;
}
if(j>0){
XBYTE[0xf074]=XBYTE[0xf074]+1;
}
}
if(XBYTE[0xf075]==100){
if((XBYTE[0xf074]&0x0f)>5){
if((XBYTE[0xf074]&0xf0)==0){
writeram();
XBYTE[0xf074]=XBYTE[0xf074]|0x10;
}
}
else{
XBYTE[0xf074]=0;
}
XBYTE[0xf074]=XBYTE[0xf074]&0xf0;
XBYTE[0xf075]=0;
}
}*/
/*-------------------------------------------------------*/
main(){
uchar data i,data true1,data true2,data connect,data de_true;
uint data time1,data time2,data t_no;
/* 0xF070、F071用于通信口1Modem拨号后定时 */
/* 0xF072、F073用于通信口2Modem拨号后定时 */
/* 0xF074、0xF075用于CPU板工作正常检测 */
/* 0xF076 接收指挥中心测试标志 */
reset();
true1=0;
true2=0;
time2=0;
de_true=0;
if((XBYTE[0xf004]==0)||(XBYTE[0xf004]>2)){/*光端机*/
time1=15000;
}
else{
time1=0;
}
t_no=30; /*延迟T_NO*8秒发送测试*/
sparkler_main(15);
while(1){
IE=0x85; //开cpu,外部中断0,1
if((XBYTE[0xf004]==0)||(XBYTE[0xf004]>2)){/*光端机*/
if(XBYTE[0xf01b]==1){ /*光端机链路故障时频繁测试*/
t_no=2;
}
else{
t_no=5;
}
}
if(XBYTE[0xf024]==1){ /*写双口RAM标志检测*/
XBYTE[0xf024]=0;
}
if(XBYTE[0xf000]>0){ /*通信速率设定*/
set_baud();
if((XBYTE[0xf004]==0)||(XBYTE[0xf004]>2)){/*光端机*/
time1=15000;
}
else{
time1=0;
}
}
wdi_reset();
if(XBYTE[0xf076]==1){
if(XBYTE[0xf01b]==1){/*有故障收到对方测试时进行测试*/
comm_dete(1,1);
time1=0;
}
comm_dete(1,0);
sparkler_main(2);
XBYTE[0xf076]=0;
}
if((XBYTE[0xf004]==1)||(XBYTE[0xf004]==2))
{/*MODEM连通链路测试*/
if(XBYTE[0xeffe]>0x80){ /*MODEM连通链路挂断设置故障*/
connect=0;
t_no=30;
}
if((XBYTE[0xeffe]<0x80)&(connect==0))
{connect=1;
t_no=5;
comm_dete(1,1);
time1=0;
time2=0;
}
}
i=0;
while(i<6){ /*是否有数据发送*/
if((XBYTE[0xf030+5*i]>0)&(XBYTE[0xf030+5*i]<4)){
i=i+10;
}
i=i+1;
}
if(i>10){
i=i-11;
cpuwrit_dete(i); /*cpu写双口RAM检测*/
}
if(i>5){
i=0;
}
if(XBYTE[0xf030+5*i]==3){ /*485口发送*/
send_485(i);
}
if(XBYTE[0xf030+5*i]==1){ /*com1口发送*/
wdi_reset();
if((XBYTE[0xf004]==1)&(XBYTE[0xeffe]<0x80))
{/*拨号*/
if(XBYTE[0xf01b]==0){
send_8250(i,1);
}
}
if((XBYTE[0xf004]==2)&(XBYTE[0xeffe]<0x80)){/*专线MODE连接*/
send_8250(i,1);
}
if((XBYTE[0xf004]>2)||(XBYTE[0xf004]==0))
{
/*拨号Modem: 01H;
专线Modem: 02H;
光端机: 03H
不用为: 00H*/
if(XBYTE[0xf01b]==0){
send_8250(i,1);
}
}
}
if(XBYTE[0xf030+5*i]==2){ /*com2口发送*/
wdi_reset();
if((XBYTE[0xf005]==1)&(XBYTE[0xeffe]<0x80)){/*拨号或专线MODE连接*/
send_8250(i,2);
XBYTE[0xf01c]=0;
}
else{
XBYTE[0xf01c]=1;
}
if((XBYTE[0xf005]==2)&(XBYTE[0xdffe]<0x80)){/*专线MODE连接*/
send_8250(i,2);
}
if((XBYTE[0xf005]>2)||(XBYTE[0xf005]==0)){/*光端机*/
send_8250(i,2);
}
}
time2=time2+1;
if(time2==t_no){ /*延迟T_NO*10秒发送测试*/
time2=0;
time1=time1+1; /*通信测试*/
}
if((time1==15000)&(time2==1)){
XBYTE[0xf02a]=1;
comm_dete(1,1);
de_true=1;
/* comm_dete(2,1);*/
XBYTE[0xf02b]=1;
}
if(time1==17200){ /*写入通信口故障*/
time1=0;
if(de_true==1){
de_true=0;
XBYTE[0xf01b]=XBYTE[0xf02a];
XBYTE[0xf01c]=XBYTE[0xf02b];
if(XBYTE[0xf02a]==1){
true1=true1+1;
}
else{
true1=0;
}
if(XBYTE[0xf02b]==1){
true2=true2+1;
}
else{
true2=0;
}
}
if((true1>1)&(XBYTE[0xf004]==1)){/*串口1挂断*/
true1=0;
XBYTE[0xeffc]=1;
delay(255);
XBYTE[0xeffc]=0;
delay(255);
modem_angser(1,1);
delay(200);
modem_flow(1,3);
delay(200);
}
if((true2>1)&(XBYTE[0xf005]==1)){/*串口2挂断*/
true2=0;
XBYTE[0xdffc]=1;
delay(255);
XBYTE[0xdffc]=0;
delay(255);
modem_angser(2,1);
delay(200);
modem_flow(2,3);
delay(200);
}
}
}
}
/*=======================================================================*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -