Цитата(Петров @ May 23 2008, 22:48)

void watchdog_init(void)
{
WDR();
WDTCSR | = (1<<WDCE) | (1<<WDE);
WDTCSR = (1<<WDE) | (1<<WDP2) | (1<<WDP0);
WDTCSR = (1<<WDIE)
}
по переполнению таймера watchdogА возникает прерывание
#pragma interrupt_handler wdt_isr:7
void wdt_isr(void)
{
}
вот тут то я и перестаю, что либо понимать

ОБРАБАТЫВАЕТСЯ ПРЕРЫВАНИЕ, А УЖЕ ПОСЛЕ НЕГО РЕСЕТИТСЯ КОНТРОЛЛЕР???
Достаточно выполнить WDR(); для того, чтоб отменить ресет?
Читать, читать, читать внимательно описание.
При прошитом WDTON никаких прерываний не будет, WDT прибит гвоздями на reset mode
Если WDTON стёрт:
если хочется иметь только прерывания, то
Код
WDR();
WDTCSR | = (1<<WDCE) | (1<<WDE);
WDTCSR = (1<<WDIE) | (1<<WDP2) | (1<<WDP0);
если хочется иметь только сброс, то
Код
WDR();
WDTCSR | = (1<<WDCE) | (1<<WDE);
WDTCSR = (1<<WDE) | (1<<WDP2) | (1<<WDP0);
если хочется иметь прерывание, а в случае чего и сброс, то
Код
WDR();
WDTCSR | = (1<<WDCE) | (1<<WDE);
WDTCSR = (1<<WDE) | (1<<WDIE) | (1<<WDP2) | (1<<WDP0);
Причём делать это после каждого прерывания, так как при входе в прерывание при взведённом WDE очищается WDIE и если программа вновь не взвела WDIE, то при
следующем переполнении WDT будет сброс.
WDR сбрасывает счётчик, откладывая таким образом любые операции, что сброс, что прерывание.
Цитата(Петров @ May 23 2008, 22:48)

вот эта строка бат файла
avreal32 +mega168 -p1 -ab -e -w -v Sparta.hex -fCKSEL=2, WDTON=0
генерит ошибку: File "WDTON=0" not found ЧТО НЕ ТАК???
Пробела между "-fCKSEL=2," и "WDTON=0" не должно быть.