我在我的电路板上有一个简单的PIC16F18877电路设置,并且我已经成功地让一个发光二极管在无限的while循环中闪烁。我试图将相同的代码放入一个应该只执行5次的for循环中,但是发光二极管一直在闪烁。
我的代码(使用XC8编译器的MPLAB):
#include <xc.h>
#define _XTAL_FREQ 8000000
int main()
{
TRISD1 = 0;
for (int i = 0; i < 5; i++)
{
RD1 = 1;
__delay_ms(500);
RD1 = 0;
__delay_ms(500);
}
return 0;
}发布于 2017-04-24 01:35:34
您期望CPU在从main返回时跳跃到什么位置?或者更确切地说,当你没有告诉它要做什么的时候,你期望它做什么?在台式计算机上,程序通常会返回到操作系统-在嵌入式系统上,没有。
最有可能的是,从main返回到启动代码,并最终(“偶然”或有意地)返回到重置向量,从头开始启动程序。
如果你想让单片机真正“停止”,“什么也不做”,你需要强制它进入无限循环,而不是return。然而,这不是MCU上的常见方法。
发布于 2017-05-01 16:43:42
我尝试在
循环之后添加一个while循环,但发生了一些奇怪的事情。它似乎同时执行for和while循环。指示灯会正常闪烁,然后快速闪烁,几乎就像卡顿一样,然后正常闪烁,依此类推。但它从未停止闪烁
检查看门狗计时器。如果设置了它,mcu将在设置的时钟周期后重新设置,并反复运行代码。您可以使用CLRWDT()重置看门狗计时器,或者直接关闭WDT。我强烈建议您执行以下步骤,以确保mcu按预期执行操作:
(我的名声还不够高,不能发表评论,很抱歉。)
发布于 2017-04-24 05:40:14
这里你不是在操作系统上,你能给我们演示一下反汇编,以显示对main的调用以及它返回的内容吗?或者,如果你把一个无限循环放在主端之前(虽然(1)继续;),你会得到5次眨眼吗?
https://stackoverflow.com/questions/43574326
复制相似问题