Цитата(konstan @ Jan 30 2008, 13:36)

Выводы PD2 и PD3 посажены через оттягивающее сопротивление на +5В.
Выводы PD2 и PD3 подключены на вывод реле с 2 положениями. Таким образом если подать питание, реле замкнется и посадит PD2 на землю (PD3 - высокое напряжение). При пропадании напряжения, контроллер питается от конденсатора, а реле выключается, замыкая PD3 на землю (PD2 - высокий уровень).
1- не то инициалицируется прерывание (менял уровень срабатывания прерываний по фронту - ничего не помагало, все равно вызывалось то же прерывание)
2- не могу прочитать состояния выводов порта D.
Объясните что не так сделано
1) Не надо паниковать, дедушка вра шутит. Надо успокоиться и внятно объяснить, как всё работает и что вы хотите. Ваше объяснение очень сумбурное. В приведённой программе вы НЕ читаете порт Д, вы читаете порт С. Что значит "не то инициалицируется прерывание"? Проинициализируйте то, какое надо, всё в ваших руках.
2) При пропадании питания возникает фронт на инт0, возможно с дребезгом, потом ничего не происходит, пока летит контакт (несколько мс, кстати), потом возникает спад на инт1. По фронту возникает прерывание, в прерывании вы читаете портС4, зачем - вы нам не объясняли, затем вы ждете внутри прерывания, пока портС4 станет 0. Так плохо делать, но допустимо. Что здесь не так, как вы планировали?
Цитата(konstan @ Jan 30 2008, 14:31)

Допустим у меня вызвалось ложное прерывание INT0 (то есть контактор PD2 изменил свое состояние с 0 на 1, что соответствует режиму пропаданию питания). В теле программы я опрашиваю состяние вывода PD3 (так как у нас ложное срабатывание, то вывод не изменил свое состояние, как был 1 так и остался). Если PD3=0 то это не ложное срабатывание и программе нужно выполнить действия при отключении питания, иначе это ложное срабатыание и делать ничего не надо.
Такая же позиция относится к состоянию INT1
3) Опять нечёткое описание. Слов много, а инфы ноль. Ну где вы в теле программы опрашиваете состояние вывода PD3? У вас всё тело - это while(1).