Показать сообщение отдельно
Старый 24.12.2010, 22:24   #749   
Форумец
 
Аватар для Butik
 
Сообщений: 36
Регистрация: 19.10.2010
Возраст: 59

Butik вне форума Не в сети
Цитата:
Сообщение от 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- порт на вход перестраивается- включается компаратор и ожидается разряд конденсатора до уровня ниже опорного напряжения
  Ответить с цитированием