Программа выходит из бесконечного цикла (микроконтроллер PIC)?

Я написал программу для микроконтроллера PIC 16f690, заметив, что мои программы выходят из бесконечного цикла.

На выводах 3,4,5 PORTC установлены светодиоды.

#include <xc.h>
#define _XTAL_FREQ 4000000

void main(void) {

    TRISC = 0x00;
    PORTC = 0b00111000;

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

Насколько я понимаю, светодиоды должны быть включены в течение ~1 секунды, а затем выключены навсегда. Вместо этого они продолжают мигать каждую секунду.

Я написал это в MPLABX и запрограммировал с использованием компилятора PICkit3 и C8.

2 ответа

Решение

Вероятно, вас укусил сторожевой пес. Отключите сторожевой таймер для своих тестов или очистите его, прежде чем он перезагрузит MCU.

У меня была та же проблема, но вместо светодиодов я использовал последовательную связь. while(1) не было на самом деле цикла навсегда и выполнять вещи в скобках.

Как только я отключил сторожевой таймер, после первой итерации вызывался только материал в скобках.

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

Я также наблюдал мусор после каждого пакета UART, и это ушло с отключенным сторожевым таймером.

FYI рис 16f1708.

Это приводило к некоторому ошибочному поведению, поскольку функции инициализации uart, настройки IO и делителя осциллятора назывались при каждой итерации цикла.

Другие вопросы по тегам