Microchip
直播中

吴秀英

8年用户 205经验值
私信 关注
[问答]

怎么通过INT0从睡眠模式唤醒后PIC24复位?

嗨,我试着在PIC24FJ256GA702上实现一个非常简单的外部中断It0代码。当MCU不处于休眠模式时,中断It0工作良好。也就是说,当MCU被It0中断时,MCU进入ISR并执行ISR中的任何操作。然而,当MCU处于休眠模式时,由于MCU重置而不是ISR,所以出错。即MCU开始从主线()的第一行执行指令。你们能告诉我我的代码有什么问题吗?以下是我的代码:

回帖(19)

王波

2020-3-24 07:07:23
有什么帮助或建议吗?
举报

郑雅颖

2020-3-24 07:12:41
我就是这样做的:我有一个程序在运行。它定期检查是否按下了“电源开关”。如果按下了,程序就进入休眠状态,等待电源开关再次按下。有时我希望它在唤醒时简单地进行重置;有时我希望它在入睡前保存系统变量和I/O状态,并在唤醒时恢复它们。现在,这里有一个使它工作的一般方法。注意,debounce_switch例程可能非常简单,比如_u._ms(1)。00)或者根据开关的性质,一些这样的事情。电源开关ISR简单地重置中断标志。我已经演示了服务例程在唤醒时禁用中断,但这在ISR中可能已经完成。现在,将我的例程与您的程序做比较。两点:除非您有一个“理想”开关(在硬件中降价),否则您必须考虑开关的恶劣现实反弹。如果要按下睡眠键,然后再按下唤醒键,则必须等待每次释放之后才能继续进行。除非您打算在唤醒时执行RESET,否则您可能希望在睡觉前保存某些变量和I/O状态,并在唤醒时恢复,以便可以转弯。不需要在睡眠中活跃的一切。这就是我想睡觉的主要原因——为了节省电力。至于,DaveFoot.:你如何得出结论,在按下开关之后,代码回到main()中的第一个指令?这对我没有好处。(我巧妙地修改了您的代码以适应我的振荡器,并且运行它,除了电源周期或手动重置之外,从来没有看到它经过闪烁的LATB3序列。)我的意思是,它没有做我想做的事,原因有很多,但是它没有重置。
举报

李涛

2020-3-24 07:19:29
我不知道你为什么:
举报

郑雅颖

2020-3-24 07:25:06
对于运营副总裁:除了发行债券,我认为你唯一真正的缺陷如下:问题是,从睡眠中醒来要经过ISR,ISR设置INT0_flag。然后下一次通过循环,它将再次进入睡眠。尝试将while循环更改为T你改变了所有类似的声明,而不是一个循环延迟500毫秒,为什么不只是美化它,戴夫
举报

更多回帖

发帖
×
20
完善资料,
赚取积分