// 本模块解决状态量采集时,发生的轻微抖动问题,连续3次位信号不变,采样值生效
unsigned char yxs[48]; // 48路状态信号,全局变量
void ProcessYx(void) {
static unsigned char xdata lastYx[6]; // 上次采样值
static unsigned char xdata llastYx[6]; // 上上次采样值
static unsigned char xdata yx_data[6]; // 有效的采样值
unsigned char xdata curYx[6]; // 当前采样值
unsigned char data i, k, validBit;
curYx[0] = OS_YX1;
curYx[1] = OS_YX2;
curYx[2] = OS_YX3;
curYx[3] = OS_YX4;
curYx[4] = OS_YX5;
curYx[5] = OS_YX6;
for (i=0; i<6; i++){
validBit = (curYx[i] ^ lastYx[i]) | (lastYx[i] ^ llastYx[i]); // 若对应位是0,表示信号稳定。不稳定的数据不作为采集结果(保持原来结果)
yx_data[i] = (curYx[i] & (~validBit)) | (yx_data[i] & validBit);
for (k=0; k<8; k++){
yxs[i*8+k] = (yx_data[i]>>(7-k)) & 1;
}
llastYx[i] = lastYx[i];
lastYx[i] = curYx[i];
}
}