exter0() interrupt 0 // 外中断0用来从外设输入数据,并采用窗口宽度为8的均值滤波来滤除噪声干扰。
{
unsigned int dat;
uchar count,temp,temp1,j;
count++; // 数据个数加1
EX0=0; // 暂时禁止中断
P2=0xff; // 准备从P2口输入数据
MRD=0; // 发出读命令
HBEN=0; // 读取低8位
temp=P2; // 低8位,放temp中
delayus(1);
HBEN=1; //读取高八位
temp1=P2; // 放temp1中
temp1&=0x0f; // 数据只有12位,则屏蔽掉最高4位
num=temp1*256+temp; // 还原成1个数据
num1=num1+num; // 求累和
if(count==8) // 是否已经有8个数了
{
count = 0; // 是,重新从0开始
num2 = num1 /8; // 累和除以8,也就是求平均
num1 = 0; // 类和再次从0开始
j++; // 平均的数据又多了一个
if(j>7) j=0; // 如果有多于8个的平均值,又从0开始
}
numb[j]=num2; // 存放这个有用的均值
MRD=1; // 结束读信号
init(0x40+j);
EX0=1; // 开外中断0
}