Давайте начнем с того, что в этом форуме Вам никто и ничего не должен, тем более что в таких ситуациях не плохо бы самому разобраться, для новичка это даже и полезно. Это я про последнию фразу.
По-делу: я заметил, что Вы используете Watch Dog. Сбрасываете в главном цикле
Код
while (1)
{
#asm("wdr");
};
так?
А если у Вас в обработчиках прерывания стоят такие большие паузы, то когда же успеет сброситься "сторожевой пес"?
Выбор.