完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
嗨,我试着在PIC24FJ256GA702上实现一个非常简单的外部中断It0代码。当MCU不处于休眠模式时,中断It0工作良好。也就是说,当MCU被It0中断时,MCU进入ISR并执行ISR中的任何操作。然而,当MCU处于休眠模式时,由于MCU重置而不是ISR,所以出错。即MCU开始从主线()的第一行执行指令。你们能告诉我我的代码有什么问题吗?以下是我的代码:
|
|
相关推荐
19个回答
|
|
|
有什么帮助或建议吗?
|
|
|
|
|
|
我就是这样做的:我有一个程序在运行。它定期检查是否按下了“电源开关”。如果按下了,程序就进入休眠状态,等待电源开关再次按下。有时我希望它在唤醒时简单地进行重置;有时我希望它在入睡前保存系统变量和I/O状态,并在唤醒时恢复它们。现在,这里有一个使它工作的一般方法。注意,debounce_switch例程可能非常简单,比如_u._ms(1)。00)或者根据开关的性质,一些这样的事情。电源开关ISR简单地重置中断标志。我已经演示了服务例程在唤醒时禁用中断,但这在ISR中可能已经完成。现在,将我的例程与您的程序做比较。两点:除非您有一个“理想”开关(在硬件中降价),否则您必须考虑开关的恶劣现实反弹。如果要按下睡眠键,然后再按下唤醒键,则必须等待每次释放之后才能继续进行。除非您打算在唤醒时执行RESET,否则您可能希望在睡觉前保存某些变量和I/O状态,并在唤醒时恢复,以便可以转弯。不需要在睡眠中活跃的一切。这就是我想睡觉的主要原因——为了节省电力。至于,DaveFoot.:你如何得出结论,在按下开关之后,代码回到main()中的第一个指令?这对我没有好处。(我巧妙地修改了您的代码以适应我的振荡器,并且运行它,除了电源周期或手动重置之外,从来没有看到它经过闪烁的LATB3序列。)我的意思是,它没有做我想做的事,原因有很多,但是它没有重置。
|
|
|
|
|
|
我不知道你为什么:
|
|
|
|
|
|
对于运营副总裁:除了发行债券,我认为你唯一真正的缺陷如下:问题是,从睡眠中醒来要经过ISR,ISR设置INT0_flag。然后下一次通过循环,它将再次进入睡眠。尝试将while循环更改为T你改变了所有类似的声明,而不是一个循环延迟500毫秒,为什么不只是美化它,戴夫
|
|
|
|
|
|
相反,LATABIT.LATA0^=1;
|
|
|
|
|
|
嗯,这样做更优雅,而且在源代码中只需要更少的击键,但是我的想法是采用OP的代码,并使其更健壮,只需要进行最小的文体更改。我的意思是,“^=”在功能上与我显示的表单等效,但是对于XC16优化级别0和1,编译器将发出用“^=”比我的建议做更多的指示。(与针对PIC18设备的XC8不同,编译器编写者实现了一个模板,该模板将“^=”优化为单个btg指令。)问候,戴夫
|
|
|
|
|
|
我从未检查过XC16上面的差异,但我知道它倾向于(C30也这么做了)为上面的代码发出非常糟糕的代码——因此是有用的_builitin_btg东西。也可能是XC8,所以是的,我同意!
|
|
|
|
|
|
非常感谢你的宝贵和详细的答复,非常抱歉,由于某些原因,答复的通知被发到我的垃圾邮件,所以没有及时回复。我想这是因为这是我在这个论坛的第一篇文章!关于您给出的这段代码,我试图遵照您的建议,但不幸的是,我还有同样的问题。我知道MCU重置为LATB3 i之前,而(1)循环仍然闪烁每当我按下It0开关。我同意你的观点,即使我使用的是拆借电路,问题很可能是反弹问题(请参阅附图)。我也在Proteus 8上在一个不同的微控制器(PIC24FJ64 GA102)上实现了相同的代码,并且它运行良好。我不知道为什么它不能在这个MCU上工作?再一次,非常感谢戴夫的帮助!
|
|
|
|
|
|
这是为了确保在处理ISR代码之前设置了It0标志。谢谢GOT2015
|
|
|
|
|
|
谢谢DarioG的评论!
|
|
|
|
|
|
在设备的PIC24系列中,除非设置XXY和XXIF标志,否则将不调用ISR。因此,这个测试是多余的。苏珊
|
|
|
|
|
|
软件中没有任何东西可以使它重置。弹跳可能干扰功能,但不能导致复位。我有使用有源低开关电路的习惯,即开关打开时拉起,按下时接地,但你的电路似乎足够文明,尽管我怀疑1毫秒时间c的效力。在我通常看到的典型开关上,当取消“make”的键值时(10ms的反弹并不罕见,这取决于我打它的积极性)。然而,输入端逻辑值的额外摆动不会导致您发布的软件进行复位。然而,电路中的其他东西可能潜入处理器导致硬件复位。需要考虑的事项:电路板上的开关是否与微处理器连接?如果不是,从交换机到MPU的线路有多长?你的MCLR引脚被拔起了吗?抵抗的价值是什么?编程之后,你试过断开程序员和运行你的电路吗?有时,编程引脚上的噪声拾取会导致不稳定的行为。有些MPU比其他MPU更敏感。电源是否清洁?你有足够的解耦在微处理器电源引脚?你试过使用内部振荡器(FRC)而不是外部的4 MHz晶体吗?在某些情况下,对硬件的模拟是有用的,它可能给您信心,也可能不给您信心,并且可能帮助您在代码中找到bug,但实际上我从来不花时间模拟硬件功能。在我的第二篇文章中,我在PIC16F256GA702 PIC24FJ256GA705(与您的MPU相同的家族)上运行它,并且它与我的硬件(PIC24FJ256GA好奇板)一起工作。这个程序不可能导致复位(但我已经说过了)。[编辑]只是在我的无焊料面包板上安装了一个PIC24FJ64GA702和一个4MHz水晶,并且有相同的测试结果:对我有用;除了电源循环或手动复位没有复位。我的SBB由3.3V电源供电,并具有沿着Vdd/Vss总线洒在芯片附近的慷慨解耦(匿名100nF MLCCs)。VCAP是安装在MPU附近的10μF MLCC。获得正确的功能与退票延迟而不是硬件R-C。永远不要复位,有或没有退票延迟。[/编辑]
|
|
|
|
|
|
在设备的PIC24系列中,除非设置XXY和XXIF标志,否则将不调用ISR。所以这次测试是redundant.SusanThanks Susan为这条信息!
|
|
|
|
|
|
再次感谢戴夫的帮助。真的很感激!知道代码中没有错误是很好的。所以现在我只需要硬件上的福克斯。但是,什么是配置文件?我在文件中做了什么错误,可能导致重新设置MCU吗?事实上,我认为自己是PIC编程中的新手。所以,我感谢任何评论,建议和建议,因为我在这里学习和学习。关于去弹出电路,我曾多次使用过这种电路,而且它总是如预期的那样工作。是的,MCU和开关在同一个配电板上,它们之间的距离几乎是2cm。是的,MCLR是用10K电阻来充电的。是的,我试过不同的康纳。我用Pickit 3为MCU供电。是的,我用0.1uF电容。是的,我刚试过,还有同样的问题。正如我之前提到的,我认为自己是PIC编程的新手。所以,只要有可能,我总是先尝试模拟我的项目,以确保我的代码在实现真正的硬件之前是良好的。如果我放弃我现在的面板电路工作,我可能必须订购PIC24F256GA好奇板,并在上面实现我的代码。同时,是否有可能在这里发布您的代码,以便我与我的代码进行比较,并查看您如何执行去绑定代码?再一次,非常感谢戴夫的帮助!
|
|
|
|
|
|
我忘了这里提到,在使用“空闲模式”的情况下,代码工作得非常好。也就是说,当我使用“空闲模式”而不是“睡眠模式”时,bug消失了,代码按照预期运行得很好!
|
|
|
|
|
|
忘了提及连接到VCAP引脚的电容器。在我的所有电路,包括Solderless Breadboard,我使用10 UF MLCC。在SBB上,一些MPU不能在25 MHz以上的频率下工作,而没有几个并行的。因为您的代码工作在4MHz,所以只要值为>=10uF,并且电容器具有低ESR,就像MLCC一样,就不会成为问题。(好奇板使用表面安装件0805MLCC作为该部分。)睡眠和跑步的区别。我只是不依赖于通过我的皮卡3的力量足够僵硬。我的意思是,你迟早要使用外部供应。我投票赞成,尊敬的戴夫
|
|
|
|
|
|
谢谢你,Dave Smile。VCAP上的10uF电容器解决了这个问题。虽然它在数据表中,但我不知道为什么我没有注意它:谢谢你们所有人的帮助。真的很感激!
|
|
|
|
|
|
我不想让电路板负担太大,因此我附加了service_pwr_.()的代码。我使用了类似的代码来测试许多不同的PIC。有些程序在唤醒时执行方式略有不同,我尝试编写这样的东西,以便它能够容易地适应不同的硬件设置。
|
|
|
|
|
|
我不想让电路板负担太大,因此我附加了service_pwr_.()的代码。我使用了类似的代码来测试许多不同的PIC。有些程序在唤醒时执行方式略有不同,我试着写这样的东西,以便它能够很容易地适应不同的硬件设置。真是太感谢了。祝你万事如意!顺便说一下,用Vcap上的10uF电容器,电路工作良好,PICkit 3作为电源,以及外部电源。再次,感谢一百万!
|
|
|
|
|
只有小组成员才能发言,加入小组>>
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
485 浏览 0 评论
5806 浏览 9 评论
2346 浏览 8 评论
2234 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3540 浏览 3 评论
1145浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
1114浏览 1评论
我是Microchip 的代理商,有PIC16F1829T-I/SS 技术问题可以咨询我,微信:A-chip-Ti
883浏览 1评论
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
488浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-9 07:59 , Processed in 1.159233 second(s), Total 110, Slave 93 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
3038