?? greenflic.c
字號:
#include <absacc.h>
#include <reg51.h>
extern unsigned char xdata now_day_planid;
unsigned int xdata conflc_set[32],constep[32];
unsigned char xdata conflag=0,hconflag=0;
extern unsigned char xdata now_schemeid;
extern unsigned char step_counter; //階段號
extern unsigned int xdata g_read;
void hard_greenconflic() using 1
{
unsigned int addr,an_addr,th_addr,for_addr;
unsigned char i,j,k;
unsigned char ste_id,phsch_id;
unsigned int now_phase,now_lamp,xlht;
unsigned int ph_lamp=0;
unsigned int xdata crush;
unsigned int xdata setpl;
hconflag=0x00;
addr=0x5e83;
addr=addr+(now_schemeid-1)*41; //方案表號地址
ste_id=XBYTE[addr]; //階段表號
addr=0x5246+(ste_id-1)*98;
phsch_id=XBYTE[addr]; //用到的相位表號
an_addr=0x5244;
an_addr=an_addr+(ste_id-1)*98; //階段表號
th_addr=an_addr+step_counter*3; //
now_phase=XBYTE[th_addr]*256+XBYTE[th_addr+1]; // 當前階段放行的相位
//當前時刻輸出的綠燈燈組
now_lamp=g_read;
//for_addr=0x5001+(phsch_id-1)*288;
for(j=0;j<16;j++){
xlht=(0x0001<<j);
if((now_lamp&xlht)==xlht){//當前放行的燈組
for(k=0;k<16;k++){ //逐相位的查找
for_addr=0x5001+(phsch_id)*288;
for_addr=for_addr+k*18;
setpl=XBYTE[for_addr];
setpl=(setpl<<8);
for_addr++;
setpl=setpl+XBYTE[for_addr];
// setpl=XBYTE[for_addr]*256+XBYTE[for_addr+1];//相位表中每個相位放行的燈組
//ph_lamp就是當前檢測到的綠燈燈組所歸屬的全部相位
if((setpl&xlht)==xlht){ //若該相位包含了該燈組,則在相應的相位位置置1
ph_lamp=(ph_lamp|(0x0001<<k));
}
}
}
}
// for_addr=0x5000+(phsch_id-1)*288;
for(i=0;i<16;i++){
xlht=(0x0001<<i);//本階段里放行的相位
if((now_phase&xlht)==xlht){ //逐放行相位 查找其沖突相位
for_addr=0x500a+(phsch_id)*288;
for_addr=for_addr+i*18;
crush=XBYTE[for_addr];
crush=(crush<<8);
for_addr++;
crush=crush+XBYTE[for_addr];
// crush=XBYTE[for_addr]*256+ XBYTE[for_addr+1];//查找到的i+1相位的沖突相位
if((crush&ph_lamp)!=0){
hconflag=0x01;
}
}
}
}
/////////////////////////////////////////////////////////////////////////////////////////
//軟件綠沖突檢測函數:每周期開始時對信號機對應日計劃內的所有方案中對應的相位表進行沖突統計
//在方案指定的階段表中,逐階段查找放行的相位,確認沒接中有無沖突的相位在同一階段中出現
////////////////////////////////////////////////////////////////////////////////////////
void soft_greenconflic()
{
unsigned int addr,an_addr,th_addr,for_addr;
unsigned char per_id; //時段數
unsigned char sch_id,step_id,step_nu,phase_id;
unsigned char i,k,m;
unsigned int j,xlht;
conflag=0;
addr=0x63a3; //日計劃開始地址
per_id=XBYTE[addr];
// addr=0x63a6;
for(i=0;i<per_id;i++){//每個方案 中都要判斷
j=i*3;
addr=0x63a6;
sch_id=XBYTE[addr+j]; //每個時段使用的方案
an_addr=0x5e83;
an_addr=an_addr+(sch_id-1)*41;
step_id=XBYTE[an_addr]; //方案對應的階段表號
step_nu=XBYTE[an_addr+1]; //方案對應的階段數
th_addr=0x5246;
th_addr=th_addr+(step_id-1)*98;
phase_id=XBYTE[th_addr]; //方案對應的相位表號
for(k=0;k<16;k++){
for_addr=0x500a+phase_id*288;
for_addr=for_addr+k*18; //確認每個相位對應的沖突相位
conflc_set[k]=XBYTE[for_addr]*256+XBYTE[for_addr+1];
}
EA=0;
for(k=0;k<step_nu;k++){ //各相位 的沖突相位
//各階段放行的相位
an_addr=0x5244+k*3;
constep[k]=XBYTE[an_addr]*256+XBYTE[an_addr+1];
for(m=0;m<16;m++){
xlht=0x0001;
xlht=(0x0001<<m);
if((constep[k]&xlht)==xlht){
if((constep[k]&conflc_set[m])!=0x0000){
conflag=0x01;
}
}
}
} EA=1;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -