/* Функция установки сторожевого таймера в режим прерывания при масимально возможном времени для переполнения */ void WDT_set(void) { cli(); // глобальный запрет прерываний wdt_reset(); // сброс WDT /*Очистка бита 3 (WDRF) в регистре MCUSR */ MCUSR &=~(1<<WDRF); // обнуление флага сброса по WDT /* Запись логической единицы в биты 4 (WDCE) и 3 (WDE) Остальные биты, определяющие старые установки предделителя сохраняются, чтобы предотвратить случайное срабатывание охранного таймера */ WDTCSR|= (1<<WDE)|(1<<WDCE); // это то же, что и WDTCR WDTCSR = 0x61; // режим таймера: только вызов прерывания каждые 8 секунд; если 0х60, то 4 секунды; sei(); // глобальное разрешение прерываний }