5

在注意到我的程序似乎正在退出无限循环后,我为 PIC 16f690 微控制器编写了一个程序。

PORTC 的 3、4、5 引脚上有 LED。

#include <xc.h>
#define _XTAL_FREQ 4000000

void main(void) {

    TRISC = 0x00;
    PORTC = 0b00111000;

    while (1)
    {
        __delay_ms(1000);
        PORTC = 0x00;
    }
}

据我了解,LED 应该亮约 1 秒,然后永远熄灭。相反,它们每秒都在闪烁。

我在 MPLABX 中编写了此代码,并使用 PICkit3 和 C8 编译器进行了编程。

4

2 回答 2

6

你很可能被看门狗咬了。为您的测试禁用看门狗或在重置 MCU 之前将其清除。

于 2014-07-30T23:54:15.920 回答
0

我遇到了同样的问题,但我使用的是串行通信来代替 LED。 while(1)并不是真正的永远循环并执行括号之间的内容。

一旦我禁用了看门狗,只有括号内的东西在第一次迭代后被调用。

#pragma config WDTE = OFF        // Watchdog Timer Enable (WDT enabled)

我还在每个 uart 数据包后观察到垃圾,并且随着看门狗的禁用而消失。

仅供参考图片 16f1708。

这导致了一些不稳定的行为,因为每次循环迭代都会调用 uart 初始化函数、IO 设置和振荡器分频器。

于 2017-07-17T05:45:41.957 回答