Код: Выделить всё
'********************************** Управление ШИМ ********************************
Lk03:
Do
' *************************** Управление ШИМ **************************************
If Stp > 1 Then
Incr Cnt
If Cnt = 140 Then ' регулируем скорость ШИМ чем больше тeм медленнее
Cnt = 0
Decr Stp
If Direct > 0 Then
Ocr1a = &HFE - Stp
Else
If Stp = 0 Then
Ocr1a = 0
Else
Ocr1a = Stp
End If
End If
End If
End If
'************************ Устанавливаем флаг когда можно работать 1 wire *****
If Ocr1a = &HFD Then ' Например такое условие
Set A
Goto W01
End If
Loop 'Until A = 1 ' срабатывает один раз потом что тонадо делать
где начинает рабоать шим от 0 до 100 процентов. Второе прерывание от 100 процентов к нулю. И так по кругу.
Идеолгия программы - пока работает ШИМ ничего нигде происходить не должно. А вот когда его работа достигает либо максимума либо минимума
он должен остановится до следующего нажатия кнопки. Это работает. Далее. Когда ШИМ находится в одном из крайних положений
( в состоянии покоя. Не изменяет своих значений)
управление должно передатся другой подпрограмме которая передаст состояние в сеть 1 wire. ( отдельно эмулятор работает).
Не могу сообразить как выйти из этого цикла. По логике я отследил например верхнее положение значения OCR1a, и передал
управление другой подпрограмме. Подпрограмма отработала и по пришествии нового прерывания опять возвращается на метку Lk03.
Но ШИМ не заводится, т.к в регистре OCR1a сохраняется значение вызвавшее переход. Обнулять его нельзя, т.к ШИМ из крайнего
положения должен плавно отработать в противоположное.
Я заблудился в этих циклах не по детски. Прошу помочь кто чем может.


