我注意到我的程序似乎正在退出无限循环之后,我为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编译器进行编程。
答案 0 :(得分:5)
你可能被看门狗咬了。禁用测试的看门狗或在重置MCU之前清除它。
答案 1 :(得分:0)
我有同样的问题,但代替LED,我正在使用串行通信。 while(1)
永远不是一个循环,并执行括号之间的东西。
一旦我禁用了看门狗,在第一次迭代后只调用括号内的东西。
#pragma config WDTE = OFF // Watchdog Timer Enable (WDT enabled)
我还在每个uart数据包之后观察垃圾,并且看门狗被禁用后消失了。
FYI pic 16f1708。
由于每次循环迭代都会调用uart初始化函数,IO设置和振荡器分频器,因此会导致一些不稳定的行为。