Спасибо за поддержку
Я обнаружил проблемы, потому что таймер сторожевого таймера удерживает MCU в режиме перезапуска, даже когда я нажимаю на аппаратный перерыв. это потому, что я рассматривал все регистры, возвращаясь к его значению по умолчанию после отдыха. Блок-схема WDT
я делал это в коде, когда MCU начинает выполнение кода, подобного этому:
U8_t PLL_U8_System_Init()
{
static U8_t SetFalg=0;
PLL_void_TimerInit(); // General Timer Initialize
PLL_WDT_Init(); // Initialize WDT and clear WDRF
wdt_enable(WDTO_8S); // Enable WDT Each 2 S
........
}
но как только WDT произошел и остановил программу, процессор обнаружил, что установлен флаг WDRF, так что он будет оставаться в покое на протяжении всего времени, пока я делаю перерыв.
Решение
мне нужно очистить таймер WDT после запуска программы, прежде чем выполнять какой-либо код и его работу
U8_t PLL_U8_System_Init()
{
static U8_t SetFalg=0;
PLL_void_TimerInit(); // General Timer Initialize
PLL_WDT_Init(); // Initialize WDT and clear WDRF
wdt_enable(WDTO_8S); // Enable WDT Each 2 S
........
}
это то, что написано в листе данных
Примечание: если сторожевой таймер случайно включен, например, с помощью указателя убегания или
Выключение, устройство будет сброшено, а сторожевой таймер останется включенным. Если
код не настроен для обработки Watchdog, это может привести к вечному циклу сброса тайм-аута. Чтобы избежать этой ситуации, прикладное программное обеспечение должно всегда очищать
Флаг сброса сторожевой системы (WDRF) и управляющий бит WDE при инициализации
рутина, даже если сторожевой таймер не используется.