初级会员
- 积分
- 115
- 金钱
- 115
- 注册时间
- 2015-9-27
- 在线时间
- 23 小时
|
5金钱
如题,用了四个霍尔传感器,通过一个四输入与门连接到了单片机的中断P32,同时四个霍尔传感器又连接了P0-P11四个IO,当霍尔传感器检测到强磁体,触发中断,在中断里判断是哪一路电机,对应的计数变量的值加一,中断是下降沿触发,但是现在用手转到一个轮子,当检测到强磁体后,计数的变量加2到加4不等,就是不加1.求大神指导,或者有其他的方案教教我。中断初始化和中断函数如下
void SysInit(void)
{
EA = 1;
IT0 = 1;
EX0 = 1;
}
void Exter0(void) interrupt 0
{
switch (P1 & 0x0f)
{
case 0x00 : a++;
b++;
c++;
d++;
break;
case 0x01 : a++;
b++;
c++;
break;
case 0x02 : a++;
b++;
d++;
break;
case 0x03 : a++;
b++;
break;
case 0x04 : a++;
c++;
d++;
break;
case 0x05 : a++;
c++;
break;
case 0x06 : a++;
d++;
break;
case 0x07 : a++;
break;
case 0x08 : b++;
c++;
d++;
break;
case 0x09 : b++;
c++;
break;
case 0x0a : b++;
d++;
break;
case 0x0b : b++;
break;
case 0x0c : c++;
d++;
break;
case 0x0d : c++;
break;
case 0x0e : d++;
break;
default : break;
}
}
我从百度上搜到下降沿触发的中断,在中断函数运行的过程中,如果中断引脚再次置0,本次中断结束后又会进入一次中断,这样霍尔传感器的输出波形的毛刺可能会导致重复中断,因此我曾试过在中断函数最后加了一句 IE0 = 0; 但是。。。。。。还是一样没有解决 |
|