Цитата:
Сообщение от petrd
Когда написано:
Код:
....
CMCON = 0x04;
......
while(CMCON.F6 == 1)
{
old_GPIO.F4 =1;
GPIO = old_GPIO;
}
при включении проверяется состояние GP5, и если оно 0 (а такое легко может быть и вообще мы можем попасть в любой момент времени периода повторения импульсов синхронизации 50 Гц, что в итоге приведет к тому, что конденсатор либо вообще никогда не начнет заряжаться, либо не успеет зарядится до нужного уровня), то попадаем в проверку while, а так как у нас перед этим ни одного цикла зарядки конденсатора не было (или он был, но короткий, т.е. недозаряд), то и имеем COUT = 1 ( VIN+ > VIN-) и дальше незапланированный вечный цикл из которого можно выйти только когда конденсатор заряжен, а чтобы зарядить - надо выйти из цикла - замкнутый круг. И, вообще, мы же с сетью не синхронизированы, то рано или поздно такой момент возникает.
А когда используется if, то никакого вечного цикла быть не может.
Как-то так.
|
Прошу прощения господ форумчан за долгое отсутствие- был занят другой работой
А вот немного не понятно... какая разница- просто импульсы 50герц для синхронизации или сеть... - 10 миллисекунд заряд конденсатора - а потом следующие 10- порт на вход перестраивается- включается компаратор и ожидается разряд конденсатора до уровня ниже опорного напряжения