?? 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 + -