Внешний сброс

Установка с уровнем защиты – 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.