Цитата(rezident @ Jan 15 2007, 00:47)

Может я не совсем в тему, но вроде как "холодный" старт подразумевает выключение/включение питания, или нет? "Горячий"-же сброс через всякие ватчдоги, BOR, RESET и прочие не гарантирует сброс периферии и других устройств. А также требует реинициализации всей периферии. Особенно проблематично сбросить "горячим" сбросом, когда произошло зависание по причине "защелкивания" входов. Например, для большинства LСD коммутация питания для сброса это просто необходимость. Иначе готовое устройство скорее всего не пройдет тесты на EMI совместимость. Чаще всего LCD по которому "лупили" разрядом, можно сбросить только сняв и вновь подав питание.
Будем говорить применительно к PIC16F877. Процедура (последовательность) сброса - одна и та же, а причины сброса могут быть различны: включение питания, снижения питания, внешний сброс (по MCLR), ошибка четности памяти и т.п.
Состояние регистров по выходу из состояния сброса (начало работы) могут быть различны в зависимости от причины сброса. Кстати, для решения, предложенного DL36, состояние регистров будет соотвествовать внешнему сбросу (по MCLR), а не сбросу по включению питания, как это имеет место при "холодном старте". Состояния регистров могут отличаться! Так что полной имитации "холодного старта" - может и не получиться (см. Data Sheet) . Но нужно ли это в данном конкретном случае - не уверен.
Что касается "зависаний", то сброс по WDT как раз предназначен для вывода устройства из таких состояний. Насколько это надежно - не берусь судить. Например устройство может "зависнуть" и при старте, непосредственно в состоянии сброса (при слишком медленном нарастании напряжения питания). Здесь WDT не поможет. Только включение/выключение.