完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
如题,用了四个霍尔传感器,通过一个四输入与门连接到了单片机的中断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; 但是。。。。。。还是一样没有解决 |
|
相关推荐
3个回答
|
|
帮顶。。。。
|
|
|
|
你的中断函数没有处理好造成这个现象的,你“四个霍尔传感器又连接了P0-P11四个IO”,是那四个?switch (P1 & 0x0f)你判断这个又怎么和四个传感器对应上?
|
|
|
|
四个霍尔接四个引脚,假设霍尔有效信号是低电平,那么中断应该是边沿触发方式,而对引脚的判断数值应该是0X0E,0X0D,0X0B,0X07,四个引脚四个状态,并没有你的程序里那么多的状态
|
|
|
|
只有小组成员才能发言,加入小组>>
imx6ull 和 lan8742 工作起来不正常, ping 老是丢包
2881 浏览 0 评论
3354 浏览 9 评论
3034 浏览 16 评论
3528 浏览 1 评论
9139 浏览 16 评论
1261浏览 3评论
651浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
642浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2389浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1955浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-2-4 18:51 , Processed in 1.175335 second(s), Total 50, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号