首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >微控制器编程-程序未退出for循环

微控制器编程-程序未退出for循环
EN

Stack Overflow用户
提问于 2017-04-24 01:29:56
回答 3查看 420关注 0票数 0

我在我的电路板上有一个简单的PIC16F18877电路设置,并且我已经成功地让一个发光二极管在无限的while循环中闪烁。我试图将相同的代码放入一个应该只执行5次的for循环中,但是发光二极管一直在闪烁。

我的代码(使用XC8编译器的MPLAB):

代码语言:javascript
复制
#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;
}
EN

回答 3

Stack Overflow用户

发布于 2017-04-24 01:35:34

您期望CPU在从main返回时跳跃到什么位置?或者更确切地说,当你没有告诉它要做什么的时候,你期望它做什么?在台式计算机上,程序通常会返回到操作系统-在嵌入式系统上,没有。

最有可能的是,从main返回到启动代码,并最终(“偶然”或有意地)返回到重置向量,从头开始启动程序。

如果你想让单片机真正“停止”,“什么也不做”,你需要强制它进入无限循环,而不是return。然而,这不是MCU上的常见方法。

票数 5
EN

Stack Overflow用户

发布于 2017-05-01 16:43:42

我尝试在

循环之后添加一个while循环,但发生了一些奇怪的事情。它似乎同时执行for和while循环。指示灯会正常闪烁,然后快速闪烁,几乎就像卡顿一样,然后正常闪烁,依此类推。但它从未停止闪烁

检查看门狗计时器。如果设置了它,mcu将在设置的时钟周期后重新设置,并反复运行代码。您可以使用CLRWDT()重置看门狗计时器,或者直接关闭WDT。我强烈建议您执行以下步骤,以确保mcu按预期执行操作:

  1. 检查PIC配置位,是否正确设置?请参阅microchip program文件夹中的文档,确保振荡器已设置为数据表,并确保端口设置正确,尤其是使用模拟选择寄存器的模拟端口。

(我的名声还不够高,不能发表评论,很抱歉。)

票数 1
EN

Stack Overflow用户

发布于 2017-04-24 05:40:14

这里你不是在操作系统上,你能给我们演示一下反汇编,以显示对main的调用以及它返回的内容吗?或者,如果你把一个无限循环放在主端之前(虽然(1)继续;),你会得到5次眨眼吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43574326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档