发 帖  
原厂入驻New
[问答] PIC18F27J13 INT0或INT1:端口更改时中断唤醒PIC吗
73 PIC
分享
您好,我的项目与PIC 18F27J13是不断等待端口改变INT0(RB0)或INT1(RB5)为了节省电池,我想把PIC是睡眠模式,并让它唤醒,无论何时INT0或INT1发生。我可以把PIC在睡眠模式,但我能够唤醒它在PIC使用内部振荡器@16Mhz,保险丝设置如下:你能告诉我当INT0或INT1发生时PIC如何从睡眠模式退出吗?我不确定这是否重要,但INT0设置为高优先级ISR,INT1设置为低优先级ISRM.,感谢您的帮助和建议,
0
2020-5-12 11:23:57   评论 分享淘帖 邀请回答
19个回答
您只需要在进入睡眠或空闲状态之前启用INT0(INT0IE)和INT1(INT1IE)中断。这允许它们唤醒PIC。如果您还希望它在醒来时继续到ISR,那么您还需要全局启用中断(GIE)。使用SLEEP指令之后的代码。HIHEDIT ADD:查看数据表的图9.1@页面120中的逻辑图。
2020-5-12 11:33:24 评论

举报

通常,一般来说,当PIC进入睡眠模式(指令SLEEP)时,触发的每个活动中断都会唤醒PIC,使代码流继续,而不是执行中断处理程序。文档库。
2020-5-12 11:40:18 评论

举报

2020-5-12 11:49:11 评论

举报

如果启用了中断,您实际上应该有一个中断服务例程(ISR),因为处理器在接收到中断时将跳转到那里。从数据表…
2020-5-12 12:08:24 评论

举报

你不需要,而且一般不想在睡觉的时候设定GIE。保持GIE清晰可以让你在决定是否睡觉时避免比赛状态。
2020-5-12 12:16:26 评论

举报

根据我的经验,关于在睡眠期间是否启用中断的主要考虑是“当代码醒来时,我希望代码在哪里开始执行”。如数据表中所述(至少对于所讨论的部分),唤醒程序执行点取决于GIE位的状态:设置您进入ISR,在睡眠指令之后继续清除。
2020-5-12 12:23:08 评论

举报

在进入睡眠时不设置GIE的原因是为了避免在是否睡眠时发生的竞争条件,这取决于包括中断的因素。在这种情况下,清除GIE,确定是否睡眠,然后要么睡眠,要么启用GIE并继续。如果在睡觉前重新启用GIE,则可以在该指令(向量)中捕获中断,然后是.,这可能不是期望的。例如,您不想启动按钮解除弹出计时器,然后进入休眠。如果软件无条件地休眠,则在休眠期间设置GIE并不重要。如果您想在醒来后立即处理中断,则可以在睡眠之后的指令中设置GIE。
2020-5-12 12:35:28 评论

举报

好的洞察力和解释,我会努力记住它!在我使用过睡眠的例子中,我并没有像你描述的那样有比赛情况或其他情况,但我确信最终一定会出现这种情况!听起来,这可能是一个困难的“错误”调试,可能吗?睡眠和空闲模式可能是棘手的。
2020-5-12 12:48:36 评论

举报

嗨,我用睡眠模式做了一些项目。在所有的项目中,由于在醒后需要进行一些内务管理,我从来不能在睡眠中立即处理中断。我所做的是用GIE=0睡觉,在醒后内务管理之后,我设置GIE=1,并且醒后中断gETS用ISR处理了一个额外的等待时间,只是我的2分钱…
2020-5-12 12:57:02 评论

举报

您好,您确认我只应该设置It0(In0IE),以便通过在RB0上的更改中断来唤醒PIC吗?实际上,目前我只能从INT1唤醒PIC,但是INT0甚至没有对RB0进行任何状态更改。还有什么需要做的吗?--睡眠是获得最低消耗的最佳状态,还是有其他方法来获得PIC所吸收的最小电流?多谢,
2020-5-12 13:04:03 评论

举报

许多新照片也有深度睡眠。
2020-5-12 13:14:00 评论

举报

对。请确保您已经禁用了RB0上的模拟特性。
2020-5-12 13:27:20 评论

举报

您好,我唯一可以确认的是,您在中断的主题上搞得一团糟。如果INT1唤醒PIC,而INT0没有唤醒,可能是因为启用了一个而另一个没有。INT0与IOC无关(更改时中断)。与只能由引脚RB0上的事件触发的INT0不同,IOC是由几个引脚上的改变触发的,您必须在代码中发现特定的引脚触发了什么。对引脚上的任何变化作出反应的特殊硬件,因此IOC由1->0和0->1转换触发。任何中断都可以唤醒PIC,它们只需要配置和正确处理。因此,我们应该仔细考虑特性/复杂性的投资回报率。最佳选择
2020-5-12 13:41:56 评论

举报

您好,这是我的代码。我想让PIC是睡眠模式来节省大部分时间。目标是板将只在RB5上的门传感器检测到上升沿时唤醒,并且如果HF模块接收到HF数据(HF数据将把nIRQ引脚从高设置为低),当出现这种情况时,PIC会先从ISR中醒来,然后从主循环中醒来,希望再回到睡眠状态,直到下次事件发生。编辑:目前,代码能够检测RB5上的下降和上升(两者)边缘。我原本只希望检测上升边缘,由于未知的原因,代码检测到当传感器状态改变时,它能够唤醒PIC。为什么代码只检测RB5上的所有边缘而不检测上升的边缘?当HF接收出现时,NIQ从“1”变为“0”,但是代码没有检测到这一点,PIC直到现在还没有醒来。
2020-5-12 13:58:24 评论

举报

我不明白为什么当RB5上出现任何边缘时这个管脚进入ISR。因为RB5已经被重新映射到INT1,那么这个管脚是作为常规RB5工作的,那么在这个管脚上工作的中断将是在改变时中断,或者它最终是与INT1(外部)相关联的中断。中断上升或下降沿工作)感谢您的灯在这个问题上
2020-5-12 14:03:55 评论

举报

我发现,在睡眠模式中度过几个小时后,PIC无法从INT管脚中唤醒。所有工作正常,PIC可以在几个小时(超过3小时)内保持睡眠模式,并且在睡眠模式中>5小时后,当INT0(改变时中断)发生时,PIC被唤醒。让代码重新工作。这有什么原因吗?我应该注意一些保险丝或设置,以避免PIC正确唤醒吗?当做,
2020-5-12 14:22:26 评论

举报

嗯,最好自己开始一个新的线程。并显示您的代码可能
2020-5-12 14:33:22 评论

举报

您确认在英特上发生的任何边缘类型会唤醒PIC吗?这是否意味着PIC唤醒不考虑ItIdGX位?此时,无论INT0上出现上升或下降沿,PIC都会唤醒。我设置INTCON2bits.INTEDG0=1;但是下降沿也会唤醒PIC,这很正常,我会说不……????
2020-5-12 14:40:01 评论

举报

2020-5-12 14:47:14 评论

举报

只有小组成员才能发言,加入小组>>

108个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表