📄 hjcomm.c
字号:
sum=10;
i=0;
while(i<5){
date_space=0;
while(((XBYTE[0xdff5]&0x01)==0)&(date_space<7000)){
date_space=date_space+1;
wdi_reset();
if(date_space==7000){
i=9;
}
}
long1=XBYTE[0xdff0];
if(i==0){/*数据体长度0*/
if(long1!=0){
i=9;
}
}
if(i==1){/*数据体长度2*/
if(long1!=2){
i=9;
}
}
if(i==2){/*AA*/
if(long1==0xaa){/*指挥中心进行测试*/
sum=sum+1;
}
if(long1==0x55){/*路口机进行测试*/
sum=sum-1;
}
if((long1!=0xaa)&(long1!=0x55)){
i=9;
}
}
if(i==3){ /*AA*/
if(long1==0x55){/*指挥中心进行测试*/
sum=sum+1;
}
if(long1==0xaa){/*路口机进行测试*/
sum=sum-1;
}
if((long1!=0xaa)&(long1!=0x55)){
i=9;
}
}
if(i==4){/*校验和02*/
if(long1!=2){
i=9;
}
}
i=i+1;
}
if(sum==12){/*指挥中心进行测试*/
comm_dete(2,0);
}
if(sum==8){/*路口机测试的返回值进行测试*/
XBYTE[0xf02b]=0;
}
i=10;
true=0;
}
else{
sum=date_deca;
cable_no=0;
while(i<6){ /*查找空的接收标志寄存器*/
if((XBYTE[0xf050+i*5]>0)&(XBYTE[0xf050+i*5]<4)){
cable_no=cable_no+1;
i=i+1;
}
else{
XBYTE[0xf050+i*5]=0x87;
i=6;
}
}
if(cable_no==6){
true=0;
}
date_space=0;
while(((XBYTE[0xdff5]&0x01)==0)&(date_space<7000)){
date_space=date_space+1;
wdi_reset();
if(date_space==7000){
i=9;
}
}
long1=XBYTE[0xdff0];
i=0;
XBYTE[0xf024]=1;
while(i<20){
i=i+1;
if((XBYTE[0xf023]==0)&(XBYTE[0xf024]==1)){/*判CPU是否修改头尾*/
i=20;
}
else{
if(i==20){
true=0;
XBYTE[0xf024]==0;
}
}
i=i+1;
}
date_space=0;
while(((XBYTE[0xdff5]&0x01)==0)&(date_space<7000)){
date_space=date_space+1;
wdi_reset();
if(date_space==7000){
i=9;
}
}
long2=XBYTE[0xdff0];
date_length=long1*256+long2;
if(date_length>1600){
true=0;
}
}
}
if(true){
XBYTE[0xf01f]=XBYTE[0xf01f]|0xf0;/*屏蔽高四位*/
XBYTE[0xf021]=XBYTE[0xf021]|0xf0;
rd_begin=XBYTE[0xf021]*256+XBYTE[0xf022]+1;/*设置头地址*/
if((XBYTE[0xf021]==0xf7)&(XBYTE[0xf022]==0xff)){/*设置头地址--尾处于F7FF处*/
rd_begin=0xf080;
}
if(XBYTE[0xf01f]>XBYTE[0xf021]){/*计算数据空间设置尾地址*/
date_space=(XBYTE[0xf01f]-XBYTE[0xf021])*256+XBYTE[0xf020]-XBYTE[0xf022];
}
if(XBYTE[0xf01f]==XBYTE[0xf021]){/*计算数据空间设置尾地址*/
if(XBYTE[0xf020]>XBYTE[0xf022]){
date_space=XBYTE[0xf020]-XBYTE[0xf022];
}
else{
date_space=0x7ff+XBYTE[0xf022]-XBYTE[0xf020];
}
}
if((XBYTE[0xf01f]==XBYTE[0xf021])&(XBYTE[0xf020]==XBYTE[0xf022])){/*设置头地址--处于头=尾*/
rd_begin=0xf080;
date_space=0xf7ff;
}
if(XBYTE[0xf01f]<XBYTE[0xf021]){/*计算数据空间设置尾地址*/
date_space=0x7ff-(XBYTE[0xf021]-XBYTE[0xf01f])*256+XBYTE[0xf022]-XBYTE[0xf020];
}
if(date_space<date_length+3){ /*判断数据空间是否够用*/
true=0;
}
else{
if(rd_begin+date_length+2>0xf7ff){
rd_end=date_length+rd_begin-0xf77e;
}
else{
rd_end=rd_begin+date_length+2;
}
XBYTE[0xf051+5*cable_no]=rd_begin/256;
XBYTE[0xf052+5*cable_no]=rd_begin%256;
XBYTE[0xf053+5*cable_no]=rd_end/256;
XBYTE[0xf054+5*cable_no]=rd_end%256;
XBYTE[0xf021]=rd_end/256; /*设置尾标志*/
XBYTE[0xf022]=rd_end%256;
XBYTE[0xf024]=0;
}
}
if(true){
res_add=rd_begin;
XBYTE[res_add]=date_deca;
if(res_add==0xf7ff){
res_add=0xf080;
}
else{
res_add=res_add+1;
}
XBYTE[res_add]=long1;
if(res_add==0xf7ff){
res_add=0xf080;
}
else{
res_add=res_add+1;
}
XBYTE[res_add]=long2;
if(res_add==0xf7ff){
res_add=0xf080;
}
else{
res_add=res_add+1;
}
while(date_length>0){ /*接收数据并写RAM*/
date_space=0;
while(((XBYTE[0xdff5]&0x01)==0)&(date_space<7000)){
date_space=date_space+1;
wdi_reset();
}
XBYTE[res_add]=XBYTE[0xdff0];
sum=sum+XBYTE[res_add];
if(res_add==0xf7ff){
res_add=0xf080;
}
else{
res_add=res_add+1;
}
date_length=date_length-1;
}
date_space=0;
while(((XBYTE[0xdff5]&0x01)==0)&(date_space<7000)){
date_space=date_space+1;
wdi_reset();
if(date_space==7000){
date_length=0;
}
}
i=XBYTE[0xdff0];
if(i==sum){ /*判断校验和*/
XBYTE[0xf050+5*cable_no]=2; /*接收寄存器标志置1*/
i=0;
while((i<20)&(XBYTE[0xf050+5*cable_no]!=2)){
XBYTE[0xf050+5*cable_no]=2;/*接收寄存器标志置1*/
i=i+1;
}
}
else{
true=true+1;
}
}
if(true==2){
XBYTE[0xf050+5*cable_no]=0; /*接收寄存器清0*/
i=0;
while((i<20)&(XBYTE[0xf050+5*cable_no]>0)){
XBYTE[0xf050+5*cable_no]=0; /*接收寄存器清0*/
i=i+1;
}
i=0;
XBYTE[0xf024]=1;
while(i<20){
if((XBYTE[0xf023]==0)&(XBYTE[0xf024]==1)){/*判CPU是否修改头尾*/
i=20;
}
else{
XBYTE[0xf024]=1;
}
i=i+1;
}
if(XBYTE[0xf024]==1){
if((XBYTE[0xf021]==XBYTE[0xf050+3+5*cable_no])&(XBYTE[0xf022]==XBYTE[0xf050+4+5*cable_no])){
if(XBYTE[0xf022]==0){
XBYTE[0xf021]=rd_begin/256-1;/*设置尾标志*/
XBYTE[0xf022]=0xff;
}
else{
XBYTE[0xf021]=rd_begin/256;/*设置尾标志*/
XBYTE[0xf022]=rd_begin%256;
}
}
}
}
XBYTE[0xf024]=0;
XBYTE[0xf01a]=0;
EA=1;
}
/*-------------------------------------------------------*/
void modem_flow(uchar comm_no,mode){ /*设置MODEM为自动应答*/
uchar data date;
uint data i;
EA=0;
wdi_reset();
if(comm_no==1){ //--------------------串口1----------------------------
date=0x41; /*A*/
XBYTE[0xeff0]=date;
i=0;
while((XBYTE[0xeffd]<0x60)&(i<7000)){
i=i+1;
wdi_reset();
}
date=0x54; /*T*/
XBYTE[0xeff0]=date;
i=0;
while((XBYTE[0xeffd]<0x60)&(i<7000)){
i=i+1;
wdi_reset();
}
date=0x26; /*&*/
XBYTE[0xeff0]=date;
i=0;
while((XBYTE[0xeffd]<0x60)&(i<7000)){
i=i+1;
wdi_reset();
}
date=0x4b; /*k*/
XBYTE[0xeff0]=date;
i=0;
while((XBYTE[0xeffd]<0x60)&(i<7000)){
i=i+1;
wdi_reset();
}
date=0x30+mode; /*0:k0,1:k1*/
XBYTE[0xeff0]=date;
i=0;
while((XBYTE[0xeffd]<0x60)&(i<7000)){
i=i+1;
wdi_reset();
}
date=0x0d; /*回车符*/
XBYTE[0xeff0]=date;
i=0;
while((XBYTE[0xeffd]<0x60)&(i<7000)){
i=i+1;
wdi_reset();
}
delay(200);
/*屏蔽MODEM回显*/
date=0x41; /*A*/
XBYTE[0xeff0]=date;
i=0;
while((XBYTE[0xeffd]<0x60)&(i<7000)){
i=i+1;
wdi_reset();
}
date=0x54; /*T*/
XBYTE[0xeff0]=date;
i=0;
while((XBYTE[0xeffd]<0x60)&(i<7000)){
i=i+1;
wdi_reset();
}
date=0x65; /*e*/
XBYTE[0xeff0]=date;
i=0;
while((XBYTE[0xeffd]<0x60)&(i<7000)){
i=i+1;
wdi_reset();
}
date=0x30; /*0*/
XBYTE[0xeff0]=date;
i=0;
while((XBYTE[0xeffd]<0x60)&(i<7000)){
i=i+1;
wdi_reset();
}
date=0x0d; /*回车符*/
XBYTE[0xeff0]=date;
i=0;
while((XBYTE[0xeffd]<0x60)&(i<7000)){
i=i+1;
wdi_reset();
}
delay(200);
date=0x41; /*A*/
XBYTE[0xeff0]=date;
i=0;
while((XBYTE[0xeffd]<0x60)&(i<7000)){
i=i+1;
wdi_reset();
}
date=0x54; /*T*/
XBYTE[0xeff0]=date;
i=0;
while((XBYTE[0xeffd]<0x60)&(i<7000)){
i=i+1;
wdi_reset();
}
date=0x71; /*q*/
XBYTE[0xeff0]=date;
i=0;
while((XBYTE[0xeffd]<0x60)&(i<7000)){
i=i+1;
wdi_reset();
}
date=0x31; /*1*/
XBYTE[0xeff0]=date;
i=0;
while((XBYTE[0xeffd]<0x60)&(i<7000)){
i=i+1;
wdi_reset();
}
date=0x0d; /*回车符*/
XBYTE[0xeff0]=date;
i=0;
while((XBYTE[0xeffd]<0x60)&(i<7000)){
i=i+1;
wdi_reset();
}
delay(200);
}
else{ //串口 2
date=0x41; /*A*/
XBYTE[0xdff0]=date;
i=0;
while((XBYTE[0xdffd]<0x60)&(i<7000)){
i=i+1;
wdi_reset();
}
date=0x54; /*T*/
XBYTE[0xdff0]=date;
i=0;
while((XBYTE[0xdffd]<0x60)&(i<7000)){
i=i+1;
wdi_reset();
}
date=0x26; /*&*/
XBYTE[0xdff0]=date;
i=0;
while((XBYTE[0xdffd]<0x60)&(i<7000)){
i=i+1;
wdi_reset();
}
date=0x4b; /*k*/
XBYTE[0xdff0]=date;
i=0;
while((XBYTE[0xdffd]<0x60)&(i<7000)){
i=i+1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -