📄 tenms.c
字号:
#include <tenms.h>
/*****************************************************************************************************/
// 定时器0中断
/*****************************************************************************************************/
void timer0_ms() interrupt 1 using 2
{
TH0=-(18432/256); /*9216 10毫秒定时*/
TL0=-(18432%256);
lei++;
if(lei>50)
{
lei = 0;
FrontLed = !FrontLed;
}
// cljc(); //车辆检测
// phase_loop(); //相位流量检测
read_state();
far_detect();
lei++;
lei--;
IP=0X10;
}
/*****************************************************************************************************/
// 输出灯组检测函数
/*****************************************************************************************************/
void read_state(void) using 2
{
uint lod;
uchar i;
gl_read=XBYTE[0XC200]; //绿灯1-8 /*实际信息,来自硬件端口*/
yl_read=XBYTE[0XC201]; //黄灯1-8
rl_read=XBYTE[0XC202]; //红灯1-8
gh_read=XBYTE[0XC280]; //绿灯9-16
yh_read=XBYTE[0XC281]; //黄灯9-16
rh_read=XBYTE[0XC282]; //红灯9-16
g_read=gh_read*256+gl_read; /*16位分别代表16个灯组的绿灯情况*/
y_read=yh_read*256+yl_read; /*16位分别代表16个灯组的黄灯情况*/
r_read=rh_read*256+rl_read; /*16位分别代表16个灯组的红灯情况*/
g_out=greenh*256+greenl; /*16位分别代表16个灯组的绿灯程序输出情况*/
y_out=yelh*256+yell; /*16位分别代表16个灯组的黄灯程序输出情况*/
r_out=redh*256+redl; /*16位分别代表16个灯组的红灯程序输出情况*/
for(i=0;i<16;i++){
lod=0x0001;
lod=(lod<<i);
if(((g_out&lod)==lod)&&((g_read&lod)!=lod))
{if(gtemp1[i]==10)gtemp1[i]=10;
else
gtemp1[i]++;
}
else gtemp1[i]=0;
if(((y_out&lod)==lod)&&((y_read&lod)!=lod))
{if(ytemp1[i]==10)
ytemp1[i]=10;
else
ytemp1[i]++;
}
else ytemp1[i]=0;
if(((r_out&lod)==lod)&&((r_read&lod)!=lod))
{if(rtemp1[i]==10)
rtemp1[i]=10;
else
rtemp1[i]++;
}
else rtemp1[i]=0;
if(((g_read&lod)==lod)&&((g_out&lod)!=lod))
{if(gtemp2[i]==70)
gtemp2[i]=70;
else
gtemp2[i]++;
}
else gtemp2[i]=0;
if(((y_read&lod)==lod)&&((y_out&lod)!=lod))
{if(ytemp2[i]==70)ytemp2[i]=70;
else
ytemp2[i]++;
}
else ytemp2[i]=0;
if(((r_read&lod)==lod)&&((r_out&lod)!=lod))
{if(rtemp2[i]==70)rtemp2[i]=70;
else
rtemp2[i]++;
}
else rtemp2[i]=0;
if(gtemp1[i]==10)
g_load1=(g_load1|lod); /*程序输出但采样没有,驱而不亮*/
if(ytemp1[i]==10)
y_load1=(y_load1|lod); /*程序输出但采样没有,驱而不亮*/
if(rtemp1[i]==10)
r_load1=(r_load1|lod); /*程序输出但采样没有,驱而不亮*/
if(gtemp2[i]==70)
g_load2=(g_load2|lod); /*程序没有输出但采样有,不驱而亮*/
if(ytemp2[i]==70)
y_load2=(y_load2|lod); /*程序没有输出但采样有,不驱而亮*/
if(rtemp2[i]==70)
r_load2=(r_load2|lod); /*程序没有输出但采样有,不驱而亮*/
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -