Внешний сброс
Установка с уровнем защиты – 1.
Установка с уровнем защиты – 0.
Для семейства Classic и Tiny для включения достаточно установить бит WDE в единичное состояние, одновременно, если надо, устанавливается и период таймера битами WDP2:0 того же регистра, задающими коэффициент деления генератора (состояние 000 соответствует минимальному периоду ~ 15 мс, 110 - примерно 1 с, 111 задает максимальный период немного менее 2 с). Перед такими операциями всегда рекомендуется сбрасывать WDT командой wdr (иначе таймер может начать отсчет не с начала, и произойдет непроизвольный сброс МК), как показано в листинге 7.2.
Листинг 7.2 |
сli
wdr
ldi tmp, (1<<WDE) I (l<<WDP2) I (l<<WDP1) I (l<<WDP0)
out WDTCR,tmp
sei
Для семейства Mega процедура несколько сложнее: сначала нужно установить биты WDCE И WDE одновременно, потом повторно разрешить работу установкой WDE и одновременно установить коэффициент деления, но при сброшенном WDCE: (листинг 7.3).
Листинг 7.3 |
сli
wdr
ldi tmp, (l<<WDCE) I (l<<WDE)
out WDTCR,tmp
ldi tinр, (l«WDE) I (l«WDP2) I (l«WDPl.) I (l«WDP0)
out WDTCR,tmp
sei
Процедура выключения одинакова для всех моделей и аналогична включению в предыдущем случае (листинг 7.4).
Листинг 7.4 |
cli
wdr
ldi tmp, (l«WDCE) I (l«WDE)
out WDTCR,tmp
ldi tmp, (O«WDE)
out WDTCR,tmp
sei
После того как мы разобрались с включением, WDT начинает постоянно "молотить" (в том числе и в режиме энергосбережения), и чтобы избежать сброса МК в нормальном режиме работы программы, таймер следует периодически сбрасывать командой wdr - paньше, чем истечет заданный период. Обычно это делается по какому-либо прерыванию, например:
ЕХТ INT0:
wdr ;сброс сторожевого таймера
Предположим, что мы установили WDT на период 2 с, а прерывание должно возникать каждую секунду, то командой wdr мы сбрасываем таймер WDT заведомо раньше, чем он сработает, и тогда он начнет отсчет выдержки сначала. Если же что-то (часы или программа) "повиснет", то произойдет общий сброс МК.
Внешний или аппаратный сброс реализуется подачей сигнала низкого уровня на вывод /RST. Сигнал низкого уровня должен сохраняться как минимум два периода такта системной синхронизации. Нарастающий фронт сигнала на выводе сброса /RST после превышения порогового напряжения включения V RST приводит в действие счетчик задержки Z1 (рис. 7.3), и, следовательно, - внутренний сигнал сброса. По истечение времени tTOUT внутренний процесс сброса заканчивается, и микроконтроллер переходит к выполнению программы, начиная с адреса 0.
Рис.7.3.