我无法循环工作。我已经尝试了一段时间,并且两者都有相同的问题。循环中的指令(交替闪烁的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

09-06 03:49