程序退出无限循环(PIC单片机)?

时间:2014-07-30 23:44:45

标签: c infinite-loop pic mplab xc8

我注意到我的程序似乎正在退出无限循环之后,我为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编译器进行编程。

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:0)

我有同样的问题,但代替LED,我正在使用串行通信。 while(1)永远不是一个循环,并执行括号之间的东西。

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

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

我还在每个uart数据包之后观察垃圾,并且看门狗被禁用后消失了。

FYI pic 16f1708。

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