📄 tenms.c
字号:
#include <tenms.h>
void judge_lamp_error() using 1
{
// if((drive_no_lamp&last_drive_no_lamp)!=last_drive_no_lamp){
if((drive_no_lamp^last_drive_no_lamp)!=0) {
if(start_counter>=3){
error_type=0x02;
save_to_error();
}
}
// if((no_drive_lamp&last_no_drive_lamp)!=last_drive_no_lamp){
if((no_drive_lamp^last_no_drive_lamp)!=0){
if(start_counter>=3){
error_type=0x03;
save_to_error();
}
}
last_drive_no_lamp=drive_no_lamp;
last_no_drive_lamp=no_drive_lamp;
}
/*****************************************************************************************************/
// 定时器0中断
/*****************************************************************************************************/
void timer0_ms() interrupt 1 using 1
{
TH0=-(18432/256); /*9216 10毫秒定时*/
TL0=-(18432%256);
WatchDog = !WatchDog;
XBYTE[0XC083]=0X8b; //CPU板内8255设置,绿灯电源为输出,遥控为输入
XBYTE[0XC080]=0X81; //输出绿灯电源
lei++;
if(lei>50)
{
lei = 0;
FrontLed = !FrontLed;
}
read_state();
far_detect();
lei++;
lei--;
IP=0X10;
}
/*****************************************************************************************************/
// 输出灯组检测函数
/*****************************************************************************************************/
void read_state(void) using 1
{
uint lod;
uchar i;
g_load1=0;
y_load1=0;
r_load1=0;
g_load2=0;
y_load2=0;
r_load2=0;
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]>=10)gtemp2[i]=10;
else gtemp2[i]++;
}else gtemp2[i]=0;
if(((y_read&lod)==lod)&&((y_out&lod)!=lod))
{if(ytemp2[i]>=10)ytemp2[i]=10;
else ytemp2[i]++;
}else ytemp2[i]=0;
if(((r_read&lod)==lod)&&((r_out&lod)!=lod))
{if(rtemp2[i]>=10)rtemp2[i]=10;
else rtemp2[i]++;
}else rtemp2[i]=0;
}
for(i=0;i<16;i++){
if(gtemp1[i]==10)g_load1=(g_load1|(0x0001<<i));
if(ytemp1[i]==10)y_load1=(y_load1|(0x0001<<i));
if(rtemp1[i]==10)r_load1=(r_load1|(0x0001<<i));
if(gtemp2[i]==10)g_load2=(g_load2|(0x0001<<i));
if(ytemp2[i]==10)y_load2=(y_load2|(0x0001<<i));
if(rtemp2[i]==10)r_load2=(r_load2|(0x0001<<i));
}
// drive_no_lamp=g_load1|y_load1|r_load1; //驱而不亮的灯组
// no_drive_lamp=g_load2|y_load2|r_load2; //不驱而亮的灯组
}
judge_lamp() using 1
{
drive_no_lamp=g_load1|y_load1|r_load1; //驱而不亮的灯组
no_drive_lamp=g_load2|y_load2|r_load2; //不驱而亮的灯组
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -