Предыдущий << $21 ($41) WDTCR  >>Следующий

Предназначение сторожевого таймера предельно простое - не допускать "зависания" программы. Будучи включенным, он через определенный интервал времени произведет сброс МК, если в течение этого интервала программа не перезапустит его.

Любая программа МК обязательно имеет какой-то бесконечный цикл. Приблизительно зная максимальную длительность этого цикла, делитель таймера устанавливается на заведомо большее время. При старте программы WDT запускается, а в бесконечном рабочем цикле - перезапускается. В случае же ошибки программы (например, зацикливание) перезапуска сторожевого таймера не будет, и через определенное время программа будет сброшена.

Зачем это надо? Ну, например, управляет МК двигателем. Запускает двигатель. И после этого где-то зависает -ведь не бывает программ без ошибок - а двигатель-то крутится. Доезжает до ограничения и или ломает его, либо сгорает сам... Это, конечно, грубый пример, но суть ясна. 

При грамотном конструировании микроконтроллерного устройства при сбросе все воздействия должны быть нейтральными. Тогда при сбросе время неуправляемой работы того же двигателя будет определяться периодом WDT 

 Для того, чтобы включить сторожевой таймер, достаточно установить в 1 бит WDE -Watch Dog Enable.
 А вот выключить так просто не получится - и сделано это для защиты от тех же сбоев... Для выключения надо проделать следующие действия:

Записать одновременно в WDE и WDTOE значения "1"

В течение 4-х тактов процессора записать "0" в WDE.

Ну а для перезапуска сторожевого таймера в программе используется специальная команда WDR

Бит WDTCR Название  Описание
4 WDTOE Разрешение выключения сторожевого таймера
3 WDE Разрешение сторожевого таймера
2 WDP2  Эти три бита определяют коэффициент пересчета от 16к до 2048к. (1к=1024). В зависимости от напряжения питания - это определит время от 15(47) мс до 1,9 (6,0) секунд. В общем, если понадобится - смотрите даташит...
1 WDP1
0 WDP0

женский трикотаж москва ·· Для студентов. ryo.pp.ua Курсовые и контрольные!

nml 11-Jul-2009