Цитата(dimka76 @ Jun 19 2009, 16:05)

в случае отсутствия while(1); контроллер продолжает выполнять программу после функции init_devices(); , а там ничего нету...
Будет очень странно если всё дело - именно в этом. Обычно вызов main производится, примерно, так
Код
XCALL main
__exit:
SLEEP
RJMP __exit
поэтому, на непрошитую область памяти выполнение выйти не может. Причины же описанного выше безобразия мне видятся две
1. Запрограммирован fuse WDTON (несмотря на заверения автора вопроса о том, что fuses - не трогал)
2. В программе выполняется еще что-то кроме настройки PORTB на вывод, что приводит к перезагрузке. Например, инициализация таймера и разрешение прерываний, а соответствующего обработчика прерываний - нет. Желательно увидеть всю программу, а не только main.
P.S. Не заметил, что это для t26 в которой fuse WDTON отсутствует. Первую причину можно отмести. Остаётся вторая, ну и ещё, конечно же, - плохое питание МК.