完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
你好,我正在用PIC32做远程控制。为此,我使用引脚的中断动作。当一个引脚(当远程按下)发生从高到低的转换时,我跳到中断服务例程。在中断服务例程中,我禁用该引脚的中断动作。然后连续读取来自wh的数据。按遥控器上的一个按钮。我也在不断地变换和添加数据,以了解按下哪个键。以下是我的中断服务例行代码。但当我使用这个代码时,我总是得到X值为0。管脚的这么快的读数是否是不合适的斯泰尔?void __ISR(3, ipl7) INT0Interrupt( void){ IR=1; mINT3ClearIntFlag(); ConfigINT0(EXT_INT_PRI_7 |FALLING_EDGE_INT | EXT_INT_DISABLE); DelayMs(2.4); for(i=0;i<25;i++) { P=PORTDbits.RD0; DelayMs(0.6); X=X|P; if(i<23) { X=X+X; } if(i==24) { X=X; } }ConfigINT0(EXT_INT_PRI_7 |FALLING_EDGE_INti ExtIn使能);i=0;x= 0b00 000 000 000 000 000 000 000;
|
|
相关推荐
2个回答
|
|
嗨,我认为Albin是对的,在离开中断处理程序之前,设置X=0...;将破坏可能出现的任何迹象。代码一般看起来是交换机退役程序的尝试,一些部分可能从其他代码中复制。语句:P=PORTDbits.RD0;正好一个引脚的状态:RD0,所以不会给出解码连接到其他引脚的任何开关的可能性。如果信号与0有任何不同,则语句:X=X+X;将把寄存器中的任何1位移位到下一个位置,并且可能给出信号的一种图像。开关和它的连接方式,初始延迟2.4毫秒,可能足以使跳动信号稳定。我不知道在被调用的DelayMs(...)函数中隐藏了什么,但一般来说,用浮点常数作为参数调用这样的函数是不好的。编译器将知道函数是如何声明的,并将根据需要转换参数。但是,要注意,浮点到整数的转换,不提供舍入,所以DelayMs(2.4);最有可能退化为2毫秒,而DelayMs(0.6);可能分解为零。在这种情况下,循环可能变得太快,并且所有25次迭代都在几微秒内被处理。在ISR处理程序函数内部,不需要扰乱ConfigINT0(...)来禁用和启用外部中断。中断控制器在insi时不会启动同一中断的处理。去掉中断处理程序,或者在处理具有相同或更高优先级的任何其他中断时。但是,如果这是一个跳转信号,中断标志在延迟期间或在读取引脚寄存器值之间可能很容易再次变成Set,所以当去跳转完成时,INT0中断标志应该在离开中断处理程序之前,再次清除。在ISR的开始,有一个宏调用:mINT3ClearIntFlag();您确定不需要mINT0ClearIntFlag();然后,如果(当)您将退市过程从ISR内处理的beeing过程更改为主循环中调用的Timed中断或Polled过程,则需要禁用外部中断INT0。
|
|
|
|
嗨,谢谢Mysil和Abin,我现在的问题解决了。
|
|
|
|
只有小组成员才能发言,加入小组>>
5243 浏览 9 评论
2035 浏览 8 评论
1955 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3208 浏览 3 评论
请问电源和晶体值之间有什么关系吗?PIC在正常条件下运行4MHz需要多少电压?
2258 浏览 5 评论
778浏览 1评论
671浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
597浏览 1评论
PIC Kit3出现目标设备ID(00000000)与预期的设备ID(02c20000)不匹配。是什么原因
679浏览 0评论
577浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 09:53 , Processed in 1.498928 second(s), Total 78, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号