После инициализации сторожевого таймера не вижу что мк делает сброс. Я вывожу строку на ЛСД дисплей, если бы был бы сброс то строка перезаписывалась бы.
Значение set_psel - должно быть не больше 32 (можно больше но я не проверял, думаю что сторожеовй таймер запуститься), почему так смотреть в мануале формулу.
Запись в старших 8 разрядов регистра CTRL значений 0x55 и 0xAA обязательно - так сказанно в мануале.
ЗЫ: инициализация watchdog timer происходит в теле ф-ции main(), вызывать ф-цию wdt_init перед запуском main() - не надо.