我无法循环工作。我已经尝试了一段时间,并且两者都有相同的问题。循环中的指令(交替闪烁的LED)执行一次,然后微控制器复位并再次使初始的双LED闪烁。有人可以看到一些逻辑错误吗?
使用PIC16f688和XC8编译器。
#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
#define _XTAL_FREQ 4000000
int main(int argc, char** argv) {
int count;
TRISA = 0b00000000;
TRISC = 0b00000000;
PORTA = 0b00000011;
__delay_ms(1000);
PORTA = 0b00000000;
for (count = 0; count < 5; count++) {
PORTA = 0b00000001;
__delay_ms(1000);
PORTA = 0b00000010;
__delay_ms(1000);
}
PORTA = 0b00000011;
__delay_ms(1000);
PORTA = 0b00000000;
return (EXIT_SUCCESS);
}
最佳答案
这是看门狗定时器的问题。事实证明,默认的看门狗时间长度恰好是循环的第一次迭代的时间长度,因此看起来循环只是跳过了。
要通过我的设置(MPLABX,XC8编译器,PIC16f688)禁用看门狗定时器,代码为:
#pragma config WDTE = OFF