📄 comdat.c
字号:
#include <absacc.h>
#include <reg51.h>
extern char data_flag;
sbit internalled=P1^2;
sbit watch_dog=P1^3;
unsigned char pf;
unsigned char xdata pq;
unsigned int xdata temm;
unsigned int iiil;
bit comm_test_flag;
extern void reset_dog();
//extern void send_0x83();
extern void send_0x84();
extern void send_0x85();
//extern void send_0x86();
extern void message_start();
extern void send_0x87();
extern char send_0x88(unsigned int se);
char wirte28c64(unsigned int length,unsigned intaddr_ram,unsigned intaddr_eeprom);
/*指挥中心向路口机下传数据的处理程序*/
comm_deal()
{
char load;
unsigned char i;
if(data_flag<0x20){
switch(data_flag){
case 0x01:break;
case 0x02:load=wirte28c64( 7,0x7000,0x8009);
XBYTE[0XC000]=XBYTE[0X800e];
XBYTE[0XC002]=XBYTE[0X800d];
XBYTE[0XC004]=XBYTE[0X800c];
XBYTE[0XC007]=XBYTE[0X800b];
XBYTE[0XC008]=XBYTE[0X800a];
XBYTE[0XC009]=XBYTE[0X8009];
XBYTE[0XC006]=XBYTE[0X800f];
break;
case 0x03:load=wirte28c64( 0,0x7000,0x8000);break;
case 0x04:load=wirte28c64( 3,0x7000,0x8010);
load=wirte28c64( 3,0x7000,0xa001);
XBYTE[0XA000]=7; break;
case 0x05:load=wirte28c64( 2,0x7000,0x8014);break;
case 0x06:load=wirte28c64( 5,0x7000,0x8016);break;
case 0x07:load=wirte28c64( 32,0x7000,0x8020);break;
case 0x08:load=wirte28c64( 32,0x7000,0x8040);break;
case 0x09:load=wirte28c64( 32,0x7000,0x8060);break;
case 0x0a:load=wirte28c64( 64,0x7000,0x8080);break;
case 0x0b:load=wirte28c64( 8,0x7000,0x80c0);break;
case 0x0c:load=wirte28c64( 14,0x7000,0x80c8);break;
case 0x0d:load=wirte28c64( 1,0x7000,0x80e0);break;
case 0x0e:load=wirte28c64( 1,0x7000,0x80ef);break;
case 0x0f:load=wirte28c64( 48,0x7000,0x8130);break;
case 0x10:load=wirte28c64( 48,0x7000,0x8160);break;
case 0x11:load=wirte28c64( 100,0x7000,0x8110);break;
case 0x12:load=wirte28c64( 18,0x7000,0x81ce);break;
case 0x13:load=wirte28c64(1560,0x7000,0x8200);break;
case 0x14:load=wirte28c64(1560,0x7000,0x8900);break;
case 0x15:load=wirte28c64( 128,0x7000,0x8230);break;
case 0x16:load=wirte28c64( 12,0x7000,0x80e1);break;
case 0x17:load=wirte28c64( 2,0x7000,0x7e29);break;
case 0x18:load=wirte28c64( 64,0x7000,0x8f40);break;
case 0x19:load=wirte28c64( 20,0x7000,0x8f1e);break;
case 0x1a:load=wirte28c64( 2,0x7000,0x8f32);break;
case 0x1b:load=wirte28c64( 1,0x7000,0x8f34);break;
case 0x1c:
i=XBYTE[0x7000];
load=wirte28c64( 98,0x7000,(i-1)*98+0X9200);
break;
case 0x1d:load=wirte28c64( 72,0x7000,0x9FB0);break;
case 0x1e:load=wirte28c64( 504,0x7000,0x9000);break;
case 0x1f:load=wirte28c64( 72,0x7000,0x8fb0);break;
default :break;
}
/********************************************************/
/* 接收成功返回0x87 */
/********************************************************/
/*
SBUF=0x66;
while(TI==0);TI=0;
SBUF=0x77;
while(TI==0);TI=0;
SBUF=0x88;
while(TI==0);TI=0;
SBUF=0x99;
while(TI==0);TI=0;
SBUF=0xaa;
while(TI==0);TI=0;
SBUF=0xbb;
while(TI==0);TI=0;
SBUF=0xcc;
while(TI==0);TI=0;
SBUF=0xdd;
while(TI==0);TI=0;
SBUF=0xee;
while(TI==0);TI=0;
SBUF=0xff;
while(TI==0);TI=0; */
message_start();
SBUF=data_flag; /*发送数据标识*/
while(TI==0);TI=0;
if(data_flag==0x03){ /*信号机接收到指挥中心下传 55 AA之后回传 aa 55*/
comm_test_flag=1; /*接受到中心测试包后对通信测试标志置位*/
SBUF=0x00;
while(TI==0);TI=0;
SBUF=0x02;
while(TI==0);TI=0;
SBUF=0xaa;
while(TI==0);TI=0;
SBUF=0x55;
while(TI==0);TI=0;
SBUF=0x02;
while(TI==0);TI=0;
}else{
SBUF=0x00; /*数据体长度*/
while(TI==0);TI=0;
SBUF=0x01;
while(TI==0);TI=0;
SBUF=0x87; /*写入成功返回值*/
while(TI==0);TI=0;
pf=data_flag+0x87; /*校验和*/
SBUF=pf;
while(TI==0);TI=0;
}
}else{
switch (data_flag){
case 0x26:XBYTE[0X7E06]=0X26;break;
case 0x21:XBYTE[0X7E06]=0X21;break;
case 0x22:XBYTE[0X7E06]=0X22;break;
case 0x23:XBYTE[0X7E06]=0X23;break;
case 0x24:XBYTE[0X7E06]=0X24;break;
case 0x25:XBYTE[0X7E06]=0X25;
//load=wirte28c64( 2,0x7000,0x7e07);
break;
default:break;
}
}
}
char wirte28c64(unsigned int length,unsigned int addr_ram,unsigned int addr_eeprom)/*
unsigned int length;
unsigned int addr_ram;
unsigned int addr_eeprom; */
{
unsigned char xdata *com_addr;
unsigned char xdata *wr_addr;
unsigned char it;
com_addr=addr_ram;
wr_addr =addr_eeprom;
if (length<1000){
for(iiil=0;iiil<length;iiil++){
*wr_addr=*com_addr;
do{}while((*wr_addr)!=(*com_addr));
reset_dog();
internalled=~internalled;
// for(it=0;it<200;it++){}
wr_addr++;
com_addr++;
}
}
if(length>1000){
for(it=0;it<24;it++){
for(iiil=0;iiil<64;iiil++){
reset_dog();
*wr_addr=*com_addr;
wr_addr++;
com_addr++;
}
wr_addr--;
do{}while((*wr_addr)&0x80!=1);
wr_addr++;
}
for(iiil=0;iiil<length-1536;iiil++){
reset_dog();
*wr_addr=*com_addr;
do{reset_dog();}while((*wr_addr)!=(*com_addr));
wr_addr++;
com_addr++;
}
}
return 0;
}
answer()
{
unsigned char xdata load;
unsigned int xdata che;
pq=XBYTE[0X7E06];
switch (pq){
case 0x21:XBYTE[0X7E06]=0;
load=wirte28c64( 2,0x7000,0x7e07);
//send_0x83(); /*信号机状态数据包*/
break;
case 0x22:XBYTE[0X7E06]=0;
load=wirte28c64( 2,0x7000,0x7e07);
//send_0x86(); /*实时流量数据包*/
break;
case 0x23:XBYTE[0X7E06]=0;
load=wirte28c64( 2,0x7000,0x7e07);
send_0x84(); /*故障状态*/
break;
case 0x24:XBYTE[0X7E06]=0;
load=wirte28c64( 2,0x7000,0x7e07);
//send_0x87();/*每天传送流量数据*/
break;
case 0x25:XBYTE[0X7E06]=0;
load=wirte28c64( 2,0x7000,0x7e07);
send_0x85();/*设置参数查询*/
break;
case 0x26:XBYTE[0X7E06]=0;
load=wirte28c64( 2,0x7000,0x7e07);
if(temm>=288)temm=0;
temm++;
che=temm*38;
//send_0x87();
send_0x88(che);
// temm=0;
//do{
// temm++;
// che=(temm-1)*38;
// send_0x88(che);
// for(load=0;load<199;load++){
// for(load0=0;load0<20;load0++)load=load;
// }
// }while(temm<=288);
break;
default:break;
}
}
send_fault()/*发送校验和错误返回数据包*/
{
unsigned char i;
unsigned char temp;
temp=0x55;
for(i=0;i<10;i++){
temp=temp+0x11;
SBUF=temp;
while(TI==0);TI=0;
}
SBUF=data_flag;
while(TI==0);TI=0;
SBUF=0x00;
while(TI==0);TI=0;
SBUF=0x01;
while(TI==0);TI=0;
SBUF=0x97;
while(TI==0);TI=0;
temp=(data_flag+0x97);
SBUF=temp;
while(TI==0);TI=0;
}
/*发送链路测试数据包*/
send_test()
{ /*
unsigned char i;
unsigned char temp;
temp=0x55;
for(i=0;i<10;i++){
temp=temp+0x11;
SBUF=temp;
while(TI==0);TI=0;
}
SBUF=0X03;while(TI==0);TI=0;
SBUF=0X00;while(TI==0);TI=0;
SBUF=0X02;while(TI==0);TI=0;
SBUF=0X55;while(TI==0);TI=0;
SBUF=0XAA;while(TI==0);TI=0;
SBUF=0X02;while(TI==0);TI=0;
*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -