我的面包板上有一个简单的PIC16F18877电路设置,我已成功获得一个LED在无限while
循环内闪烁。我试图将相同的代码放在for
循环中,该循环应该只执行5次,但LED会一直闪烁。
我的代码(带有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;
}
答案 0 :(得分:5)
您期望CPU从main
返回时从哪里跳转?或者更确切地说,当你不告诉它该怎么做时,你期望它做什么?在台式计算机上,程序通常会返回到操作系统 - 在嵌入式系统上,没有。
最有可能的是,从main
的返回返回到启动代码,最终(无意中&#34;意外&#34;或故意)到重置向量,从头开始启动程序。
如果您希望MCU停止&#34;停止&#34;实际上,&#34;什么都不做&#34;你需要强制它进入无限循环而不是return
。然而,这不是MCU的常用方法。
答案 1 :(得分:1)
我尝试在for循环之后添加一个while循环,并发生了一些奇怪的事情。它似乎同时执行for和while循环。灯会闪烁链接正常,然后快速闪烁,几乎像口吃然后正常闪烁等等。但它永远不会停止闪烁
检查看门狗定时器。如果已设置,则mcu将在设定的时钟周期后重置,并反复运行代码。您可以使用CLRWDT()来重置看门狗定时器或只关闭WDT。 我强烈建议您完成这些步骤,以确保mcu按预期执行:
(我的声誉不足以发表评论,对此感到抱歉。)
答案 2 :(得分:0)
你不在这里的操作系统,你能告诉我们反汇编来显示对main的调用以及它返回的内容吗?或者如果你在主要结束之前放置一个无限循环(而(1)继续;)你会得到5次闪烁吗?