Цитата(Д_М @ Mar 5 2015, 21:54)

Правильно ли я понял, что для включения вотч дога его надо разблокировать, записав в регистр WDE + WDCE . Далее записать WDE + WDP, но без WDCE.
Выключение аналогично, с той разницей, что WDE равен нулю.
Сброс таймера производится выключением и повторным включением, согласно вышеописанной последовательности?
Поняли вы правильно - действительно, если WDT вам не нужен, то можно записать и ноль.
Тем не менее, ваш способ программирования не пройдет. Обязательно требуется, что бы между установкой бита WDCE и его сбросом прошло не более 4-х тактов. Впрочем, точное число тактов я помню не твердо, но примерно где-то так. Т.е. вызов функции и возврат это слишком долго. Кроме того, необходимо либо запретить все прерывания на этот момент, либо делать это в самом начале программного кода, когда прерывания еще не разрешены. А противном случае может угораздить прерывание между установкой и сбросом бита WDCE. Т.е. функции придется переписать. Например так:
Код
void WDT_on()
{
__disable_interrupt();
WDTCR |= (1<<WDCE) | (1<<WDE) | (1<<WDE) | (1<<WDP2);
WDTCR |= (1<<WDE) | (1<<WDE) | (1<<WDP2);
__enable_interrupt();
}
void WDT_off()
{
__disable_interrupt();
WDTCR |= (1<<WDCE) | (1<<WDE);
WDTCR = 0;
__enable_interrupt();
}