Программа выходит из бесконечного цикла (микроконтроллер 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 и делителя осциллятора назывались при каждой итерации цикла.