Открыть Электронные книги
Категории
Открыть Аудиокниги
Категории
Открыть Журналы
Категории
Открыть Документы
Категории
Дальнейший, наиразумнейший (на мой взгляд), текущий план работы таков: сначала
нужно перевести "железяку" (а соответственно и программу) на максимально
возможную тактовую частоту (минимально возможное время отработки машинных
циклов).
После успешного завершения этого "предприятия", можно озаботиться тем
"запланированным счастьем", которое будет иметь место быть ("куда его прислонить"?).
То есть, после повышения тактовой частоты и доведения "железяки" до
соответствующего, работоспособного состояния, ничто не мешает улучшить такой
архиважнейший параметр, как инерционность срабатывания защиты по превышению
порогов U/I.
Все остальные "навороты" à только после этого.
Реализую.
Теперь, принципиальная схема выглядит так:
1
Подключенные к кварцу емкости (15 пф.), какими были, такими и остались.
Несколько забегая вперед, скажу, что после перехода на Fкв. = 20 Мгц., на данном
этапе работы, наихудшая инерционность срабатывания защиты по превышению порогов
U/I снижена в 2 раза: с 200 мкс. до 100 мкс.
Это свидетельствует о том, что частота ШИМ-сигнала управления вентиллятором
повысилась с 5 Кгц. до 10 Кгц.
Соответственно, емкость С4 можно уменьшить.
В принципе, этот конденсатор можно вообще убрать, так как на такой высокой частоте,
вентиллятор (по крайней мере тот, который я применяю) практически не "пищит" (c
поправкой на мое "тугое ухо"), но это, при прочих, равных условиях, приводит к
некоторому уменьшению количества оборотов "пропеллера", что вполне закономерно.
Может быть даже такие обороты и будут приемлемыми, но я все-таки не стал
"убивать" конденсатор С4, а снизил его емкость до 1 мкф., что позволяет применить
не "электролит", а неполярный конденсатор.
Его емкость можно подобрать в диапазоне от 0,1 до 1,0 мкф.
Это уж Вы решайте сами. С учетом того количества оборотов (можно ориентироваться
на комнатную температуру), которое для Вас приемлемо.
Как видите, в принципиальной схеме, изменения минимальны.
Чего не скажешь об изменениях, внесенных в текст программы.
Давайте разбираться.
3
;;; decfsz Reg_1,F ;
;;; goto $-1 ;
;;; decfsz Reg_2,F ; 3-байтный,
;;; goto $-3 ; вычитающий
;;; decfsz Reg_3,F ; счетчик.
;;; goto $-5 ;
;;; return ; Возврат по стеку.
"Поковылял" дальше.
Но ведь в программе, кроме стандартных ПП фиксированных задержек, имеется еще
много "всякой, специфической всячины".
В данном случае, "орлиный взор неизбежно упирается" в ЖК-модуль.
И с ним нужно разобраться в первую очередь, так как в "пустом" дисплее можно
увидеть только "глюк" (например, жирафа с крыльями, ругающегося матом и т.д.).
Вопрос: "В ЖК-делах меются временнЫе бяки"?
Ответ: так точно. Имеются (см. предельные временнЫе характеристики).
И в данном случае, все они связаны с временнЫми параметрами формирования
импульсов на линии Е.
Все остальные временнЫе изменения приемлемы, так как они "не выходят за границы
дозволенного".
Вывод: "орлиный взор" нужно "направлять" вовсе не на все то, что вообще связано с
ЖК-модулем, а его нужно "направить" на конкретную ПП с названием ENTER_BF (ну и
на ENTER_BF_1 тоже. Так как "клон").
Есть там фиксированные задержки?
Есть. В виде NOPов (при Fкв. = 4 Мгц, это фиксированная задержка на 1 мкс).
Вот их-то, "не мудрствуя лукаво" (соответствующие "мудрствования" были гораздо
ранее), в первую очередь, и нужно "подрихтовать". По-умному.
После "предоценки оперативной обстановки", в голове возникает следующее
"автоопасение": "Что-то многовато NOPов получается… Кабы не намусорить …".
Конечно же, можно заменить один "материнский" NOP 2-мя командами goto $+1, плюс
один "дочерний" NOP, а затем повторить сие несколько раз, но это же, с точки зрения
рациональности, "форменное безобразие"!
Как на это реагируют другие души, не знаю, но моя душа этого совершенно не выносит.
Поэтому, организованы две "сверхминиатюрные" подпрограммы задержек.
Для 1-й страницы памяти программ (под ПП ENTER_BF):
;================================================================================
; Задержка 1 мкс. (с учетом call и return).
;================================================================================
PAUSE_1MKS nop ; Задержка 1 м.ц.
return ; Возврат по стеку.
movlw .75 ;
call PAUSE_X ; Задержка 50 мкс.
;================================================================================
; Задержка, с "принудительным" выходом из нее (при нажатии любой из кнопок
; "+/Да", "-/Нет").
;================================================================================
PAUSE_S movlw .93 ;
movwf Reg_1 ; Константы
movlw .38 ; можно подобрать
movwf Reg_2 ; на Ваш вкус.
movlw .20 ;
movwf Reg_3 ;
;---------------------------------------------------------------
; Вычитающий счетчик с "врезкой" в него процедуры опроса кнопок.
;---------------------------------------------------------------
btfss PortB,2 ; Кнопка "+/Да" нажата или отжата ?
return ; Если нажата, то выход из задержки
; (возврат по стеку).
btfss PortB,3 ; Кнопка "-/Нет" нажата или отжата ?
return ; Если нажата, то выход из задержки
; (возврат по стеку).
decfsz Reg_1,F ;
goto $-5 ;
decfsz Reg_2,F ; 3-байтный,
goto $-7 ; вычитающий
decfsz Reg_3,F ; счетчик.
goto $-9 ;
return ; Возврат по стеку.
;================================================================================
5
"После того", имела место быть константа .25.
Наличие же константы .20 (а не .25) объясняется тем, что я счел время отработки
этой фиксированной задержки слишком большим и поэтому уменьшил его
(субъективный фактор. Вот захотелось мне так …).
Разъяснения.
В данном случае, целесообразно (так проще) изменить только числовое значение
константы самого старшего разряда, ведь именно ей задается основной "прирост" (или
"убыль", если ее числовое значение уменьшается) времени отработки задержки.
Можно "подрихтовать" и все 3 константы, но в данном случае, какого-то могучего,
практического смысла в этом нет, так как допустИм "достаточно приличный шаляй-
валяй" ("плюс-минус 2 лаптя". На усмотрение конкретной личности).
А вот если бы речь шла о задержке со строго калиброванным временем ее отработки,
то в этом случае, нужно точнейше "рихтовать" числовые значения всех ее констант.
6
И это не та универсальная задержка, о которой шла речь выше.
Она, если так можно выразиться, еще универсальнее.
В том смысле, что "на счетчик ставится" количество циклов отработки внутренней,
фиксированной задержки.
А раз это так, то нужно просто "подрихтовать" время отработки одного, внутреннего
цикла этой задержки.
То есть, с учетом времени исполнения одного "дочернего", машинного цикла (0,2 мкс.),
это время нужно сделать равным 10-ти микросекундам.
Было:
;================================================================================
; ПП задержки, кратной 10 мкс.
;================================================================================
; Задание количества проходов по 10 мкс.
;----------------------------------------
;;;PAUSE_X1 movwf Count ; W --> Count.
;----------------------------------------
; Задержка 10 мкс.
;----------------------------------------
;;;PAUSE_10 nop ;
;;; goto $+1 ; Одноразрядный,
;;; goto $+1 ; вычитающий
;;; goto $+1 ; счетчик
;;; decfsz Count,F ; с "врезкой".
;;; goto PAUSE_10 ;
;;; return ; Возврат по стеку.
;================================================================================
Стало:
;================================================================================
; ПП задержки, кратной 10 мкс.
;================================================================================
; Задание количества проходов по 10 мкс.
;----------------------------------------
PAUSE_X1 movwf Count ; W --> Count.
;----------------------------------------
; Задержка 10 мкс.
;----------------------------------------
PAUSE_10 movlw .15 ;
movwf Reg_1 ;
decfsz Reg_1,F ; Комбинированный,
goto $-1 ; вычитающий
nop ; счетчик.
decfsz Count,F ;
goto PAUSE_10 ;
return ; Возврат по стеку.
;================================================================================
7
Это "мы, опять же, проходили выше": значения констант умножается на 5, и все дела.
А теперь по поводу этого (см. ПП TERMO):
.........................
.........................
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
; Исполняется в случае превышения верхнего Т-порога.
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
PEREGREV .........................
.........................
;------------------------------------
; Определение начала цикла анализа.
;------------------------------------
movlw .50 ;
subwf Count1,W ; Count1 - .50 = ...
btfsc Status,Z ; Результат =0 или не=0
; (это начало цикла или нет?) ?
goto NORMA ; Если =0 (начало цикла), то обход сравнения
; Temp_LSB и Temp_LSB1.
; В остальных случаях, сравнение.
;------------------------------------
; Сравнение Temp_LSB и Temp_LSB1.
;------------------------------------
.........................
.........................
Если же мыслить "шире/глубже", то строго говоря, время отработки, например, все той
же процедуры работы с термодатчиком, в целом, уменьшилось.
В данном случае, с учетом "подрихтованных" задержек, в процентном соотношении, это
уменьшение не значительно, и по этой причине, а также по причине наличия
продуманных, "ефрейторских зазоров", оно не приводит к выходу "за границы
дозволенных", временных характеристик.
Но в тех случаях, когда "мать" имеет маленький "ефрейторский зазор" (работа "на
грани фола"), либо допущены ошибки в "рихтовке" задержек, может привести.
В таких "ехидных" случаях, процедура либо будет работать со сбоями, либо вообще
не будет работать.
Если случился такой "конфуз", то "волосы на себе рвать не нужно" (это к вопросу о
лысине).
Все эти дела должны делаться совершенно спокойно и по-деловому.
Примерно так, как работает "интеллектуальный удав".
А именно, нужно "вычислить" то "место" ("места"), в которое нужно "врезать" задержку
(задержки) соответствующего "номинала" (не исключен и подбор этого "номинала").
8
Лично я, в подобных случаях пользуюсь мозгами, в комплексе с "зубодробильными
приемами" программно-аппаратного анализа (знание предельных, временных
характеристик того, что "вожделеется", обязательно!), "тормозом коммунизма" типа
goto $, "ехидными закольцовками" на "то-сё", "коварными" (по отношению к проблеме)
обходами того-сего" и т.д. (зависит от конкретных обстоятельств).
То же самое относится и к другим процедурам, "чувствительным" либо к времени
отработки каких-то их составных частей, либо к времени отработки процедуры в целом.
И это не поиск ответа на "скользкий" вопрос типа "что такое счастье?", а "дуэль"
между мозгами и достаточно "тупой" (по отношению к мозгам) "железякой", действия
которой абсолютно предсказуемы.
Лишь бы было желание и соответствующие возможности.
С желанием, обычно, проблем не возникает.
Проблемы возникают с возможностями.
Единственный способ избавления от этих проблем - целенаправленное улучшение
качества содержимого черепной коробки (Америку не открываю).
Советую разместить "вышележащее" утверждение (то, что в рамке) на Вашем рабочем
месте и почаще на него поглядывать. Хуже от этого не будет.
По поводу "интеллектуального удава".
Это просто один из возможных образов (выбрал потому, что удав исключительно
спокоен и дело свое знает), делающих жизнь интересной, а заодно и
"инициализирующих" такой "мощнейший инструмент", как подсознание.
Можно вспомнить, например, про бультерьера, волосатый кулак, сворачивание челюсти,
рога/копыта, шило в … и т.д.
Это уж Вы решайте сами.
Смысл же заключается не в абы каком, а в целенаправленном создании условий
успешной и абсолютно спокойной работы по "удавлению/загрызанию/стиранию в
порошок/… и т.д., той или иной проблемы.
Все это "упирается" в то, что я называю "интеллектуальной агрессией".
Ее и "проповедую".
А стало так:
;================================================================================
; Задержка для обеспечения перезаряда конденсатора Hold.
;================================================================================
PAUSE movlw .25 ; Стандартный,
movwf Reg_Hold ; вычитающий,
decfsz Reg_Hold,F ; однобайтный
goto $-1 ; счетчик.
return ; Возврат по стеку.
;================================================================================
10
Так как, в связи с произведенными ранее изменениями, регистр Reg_1 задействован в
ПП задержки, не имеющей отношения к ПП прерывания, то под задержку,
обеспечивающую перезаряд конденсатора Hold, назначен/"прописан" регистр общего
назначения с названием Reg_Hold.
В соответствии с ранее сформулированной "концепцией", регистр Reg_Hold
используется только в этой задержке, и нигде более.
В MPLAB, проверяю время отработки "новорожденной" ПП PAUSE (в Options, нужно
выставить режим HS-генератора и номинал кварца 20 Мгц.).
Получились те же 16 мкс.
Ладушки.
В том же MPLAB, проверяю время "свершения" АЦП-преобразования.
Оно равно 19,6 мкс., что составляет 19,6 / 1,6 = 12,25 Tad, что вполне приемлемо.
По поводу последнего.
Радостная информация: MPLAB, при замере времени отработки "плавающей" задержки
(в секундомере), обеспечивающей "пережидание" процесса АЦП-преобразования, совсем
не "зависает" и "не проскакивает ее транзитом", а отмеряет ее строго по тем
"правилам игры", которые заданы разработчиками.
Можете проверить.
Это к вопросу о том, откуда взялось 19,6 мкс.
"Дебет-кредит": (16 + 19,6) х 2 = 71,2 мкс. "никуда не выкинешь". Это "святое".
"Сильно карнать" это "святое" никак нельзя. Так как "наказание" последует
незамедлительно.
"Гитлер капута" не будет, но будут неприятности, связанные с "враньем".
Это и есть "наказание".
Ладно. "Проехали". Никакого "наказания" не будет, так как "орлиный взор" это не
"хухры-мухры", а … (сами домыслите).
Что получается?
А получается то, что после перехода на Fкв. = 20 Мгц. и "соблюдения вышележащих
формальностей", время отработки ПП прерывания "находится где-то в районе"
86-ти микросекунд.
Значит, с учетом того, что и про "основное тело" программы забывать не нужно,
период ухода в прерывания вполне можно сократить с 200 мкс. до 100 мкс.
Вот именно ради этого и "проливалась вышележащая кровь".
А теперь, после того, как в мозгах имеет место быть полная ясность (в смысле того,
что именно нужно делать), все просто.
"Иду в ПИК-калькулятор" и жму кнопку "ШИМ".
Выставляю OSC = 20 Мгц., и частоту 10 Кгц.
Результат: Кдел. предделителя 1:4, PR2 = .124.
После этого, "вставляю все это добро" в ПП START (взамен "старью"):
;********************************************************************************
; НАЧАЛО ИСПОЛНЕНИЯ ПРОГРАММЫ.
;********************************************************************************
; Подготовительные операции.
;================================================================================
START .........................
.........................
movlw b'00000101' ; Модуль TMR2 включен с Кдел. предделителя = 4
movwf T2CON ; и Кдел. выходного делителя = 1.
.........................
.........................
movlw .124 ; Задание периода ухода в
movwf PR2 ; прерывания =.124 (100 мкс., 10Кгц).
.........................
.........................
12
Такой большой "разброс" объясняется тем, что после реализации сказанного выше, я
счел нужным произвести "временнУю корректировку" (чисто субъективный фактор), но в
любом случае, тенденция к уменьшению количества циклов прослеживается.
Итак, наихудшая инерционность защиты по превышению порогов U/I уменьшена c 200
до 100 мкс.
Обращаю Ваше внимание на то, что в течении этого достаточно короткого интервала
времени, в комплексе, "делаются и напряженческие, и токовые дела", и на то, что в
течение всего интервала времени нахождения в "рабочем" подрежиме режима
включенной защиты, никаких "подлых провалов защиты" нет и в помине.
То есть, в течение всего интервала времени работы в этом подрежиме, наихудшая
инерционность защиты по превышению порогов U/I, никогда не будет хуже 100 мкс.
За что и "пролито ведро крови".
И за это время, "железяка успевает засечь" такой объем информации, который
позволяет оценить основные "параметры бяки".
Можно и лучше. Но это уже "второе ведро".
Например, при работе только с током, инерционность срабатывания защиты по току
можно смело довести до 50-ти микросекунд.
А если как следует подсуетиться, то и того меньше (но уже не в разы, а поскромнее).
Но я пока занимаюсь "комплексными делами" (так замыслено). А там посмотрим …
13
В принципе, после такой "модернизации", "штатные", противодребезговые задержки
можно убрать, но я их все-таки оставил.
По соображениям обеспечения надежной работы "железяки" в случаях использования
кнопок, имеющих "повышенный уровень дребезга".
Например, в случае работы с кнопкой "+/Да", это будет выглядеть так (один из
случаев):
....................................
....................................
;--------------------------------------------------------------------------------
; Опрос кнопки "+/Да".
;--------------------------------------------------------------------------------
btfsc PortB,2 ; Кнопка "+/Да" нажата или отжата ?
goto OPR_NO ; Если отжата, то переход на опрос кнопки
; "-/Нет".
;--------------------------------------------------------------------------------
; Вывод на индикацию фиксированной надписи " СЛУШАЮСЬ и / ПОВИНУЮСЬ! ".
;--------------------------------------------------------------------------------
call SL_I_POVIN ; Переход в ПП вывода на индикацию
; этой надписи.
;--> Возврат по стеку из ПП SL_I_POVIN.
;-----------------------------------
; Противодребезговая задержка.
;-----------------------------------
call PAUSE_UI ; Переход в ПП PAUSE_UI.
;----> Возврат по стеку из ПП PAUSE_UI.
;-----------------------------------
; Ожидание отжатия кнопки.
;-----------------------------------
btfss PortB,2 ; Кнопка "+/Да" нажата или отжата ?
goto $-1 ; Если нажата, то ожидание отжатия.
;OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
; Рабочие действия после отжатия.
;OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
....................................
....................................
В случаях опросов других кнопок, принцип тот же самый, только будет опрашиваться
другая кнопка и вместо goto OPR_NO, будет goto на что-то другое.
В конечном итоге, получается "дешево и сердито": простой перенос вызова ПП
SL_I_POVIN "из одного места в другое" (немного ниже того, "где это стояло").
Далее, по ходу "терзания текущей проблемы", возникает следующее умозаключение:
"Надпись-то полезная/удобная. Почему она используется не во всех тех случаях, когда
ее можно использовать"?
Явный "прокол". Безобразие какое-то. Прямо зла не хватает.
Я бы себя за палец укусил, но здравый рассудок подсказывает, что нужно укусить не
его, а проблему.
Поэтому, начинаю усиленно ее (проблему) кусать.
.....................................................................
Всю искусал. Испугалась и убежала.
В той программе, которая прилагается к этому подразделу (BP_11.asm), мало того, что
вызов call SL_I_POVIN перенесен в указанное выше "место", но и организованы
дополнительные вызовы надписи СЛУШАЮСЬ и ПОВИНУЮСЬ! в тех "местах", в
которых ранее этих вызовов не было.
В конечном итоге, это закончилось тем, что эта надпись "высвечивается" при нажатии
различных кнопок.
Ее наличие свидетельствует о том, что "железяка восприняла команду", и после
отжатия кнопки, "с неизбежностью смен времени года", будет произведено
соответствующее, "рабочее" действие.
То есть, нажав на кнопку, нужно дождаться появление надписи СЛУШАЮСЬ и
ПОВИНУЮСЬ!, что является "указивкой" на то, что кнопку можно отжимать.
Исключением является только "внутренняя работа" в обеих подрежимах установки
порогов.
14
Так как в данных случаях, на мой взгляд, отсутствует практический смысл вывода на
индикацию этой надписи.
;################################################################################
; ВЕРХНЯЯ "ОБСЛУГА" 1-й СТРАНИЦЫ. ###############################################
;################################################################################
...................................
...................................
15
; (1-я страница, 3-й блок памяти программ).
;-----------------------------------
; Надпись " Нагрузка "
;-----------------------------------
TEXT_35 addwf PC,F ; -----"-----
dt 0x20,0x20,0x20,0x20,0x48,0x61,0xB4,0x70
dt 0x79,0xB7,0xBA,0x61,0x20,0x20,0x20,0x20
;-----------------------------------
; Надпись " ОТКЛЮЧЕНА. "
;-----------------------------------
TEXT_36 addwf PC,F ; -----"-----
dt 0x20,0x20,0x20,0x4F,0x54,0x4B,0xA7,0xB0
dt 0xAB,0x45,0x48,0x41,0x2E,0x20,0x20,0x20
;-----------------------------------
; Надпись " ВКЛЮЧЕНА "
;-----------------------------------
TEXT_37 addwf PC,F ; -----"-----
dt 0x20,0x20,0x20,0x20,0x42,0x4B,0xA7,0xB0
dt 0xAB,0x45,0x48,0x41,0x20,0x20,0x20,0x20
...................................
;################################################################################
; КОНЕЦ ВЕРХНЕЙ "ОБСЛУГИ" 1-й СТРАНИЦЫ. #########################################
;################################################################################
...................................
...................................
...................................
...................................
;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
; Сценарий "ЗАЩИТА ВЫКЛЮЧЕНА". VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
; Обеспечение "штатных" условий отработки сценария "ЗАЩИТА ВКЛЮЧЕНА", в случае
; дальнейшего перехода из сценария "ЗАЩИТА ВЫКЛЮЧЕНА" в сценарий
; "ЗАЩИТА ВКЛЮЧЕНА".
;--------------------------------------------------------------------------------
Дело в том, что в предыдущем цикле этого сценария, в зависимости от того, какая из
кнопок "жалась" последней, флаг Flag_1,6 может быть установлен как в 0 (состояние
"нагрузка включена"), так и в 1 (состояние "нагрузка выключена").
В зависимости от этого, опрос кнопки "+/Да" либо может состояться (если имеет место
быть 1, то есть, нагрузка отключена), либо не соостояться (обход. Если имеет место
быть 0, то есть, нагрузка включена).
То же самое, но "с точностью до наоборот", относится и к опросу кнопки "-/Нет".
То есть, используется такая процедура анализа:
И это должно быть понятным, так как, если нагрузка отключена, то нужно обеспечить
дальнейшую возможность ее включения.
И наоборот.
Из этого "наоборот" следует то, что тоже самое относится и к кнопке "-/Нет", но
только в этом случае, "вышележащее как бы инвертируется".
Вот Вам и программный RS-триггер, имеющий два устойчивых состояния и
осуществляющий "рулежку" внутри довольно-таки "мощненьких" циклов.
В подобных случаях, понятийная сложность программной реализации такого RS-триггера
заключается в "разбросанности по циклу" его команд (их нужно "разместить не абы
как, а в нужных местах").
Но если как следует понять принцип, то конкретные "циклы по барабану".
Любому циклу "рога обломаете" (напоминаю про "властелина колец").
Желаю Вам достигнуть этой "нирваны".
Что касается вывода на индикацию надписей Нагрузка ВКЛЮЧЕНА и Нагрузка
ОТКЛЮЧЕНА (см. "вышележащие" картинки), то это делается в "Рабочих действиях
после отжатия кнопки".
Под это дело организованы 3 подпрограммы вычисляемых переходов (TEXT_35 … 37).
Вывод на индикацию - стандартный.
Так как процедуры вывода на индикацию этих надписей требуются более одного раза,
они вынесены в "обслугу".
Что касается сценария включенной защиты, то суть одна и та же.
Специфика заключается только в том, что в целях наиболее "экономной" (по
количеству команд), программной реализации RS-триггера, я "проинвертировал" (по
отношению к флагу ручного отключения нагрузки сценария выключенной защиты)
состояния флага ручного отключения нагрузки сценария включенной защиты.
То есть, включенному состоянию соответствовует не 0, а 1, а выключенному состоянию
соответствует не 1, а 0.
Таким образом, имеет место быть 2 программно реализованных RS-триггера, которые
взаимодействуют между собой.
Первая "половинка" этого взаимодействия "вышележит", а вторая его половинка такая:
...................................
...................................
;||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
; Сценарий "ЗАЩИТА ВКЛЮЧЕНА". |||||||||||||||||||||||||||||||||||||||||||||||||||
19
;||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
...................................
...................................
;--------------------------------------------------------------------------------
; Обеспечение "штатных" условий отработки сценария "ЗАЩИТА ВЫКЛЮЧЕНА", в случае
; дальнейшего перехода из сценария "ЗАЩИТА ВКЛЮЧЕНА" в сценарий
; "ЗАЩИТА ВЫКЛЮЧЕНА".
;--------------------------------------------------------------------------------
bcf Flag_1,6 ; Перевод флага ручного отключения нагрузки
; в состояние "нагрузка включена".
...................................
...................................
Это нужно для того, чтобы в любом случае (по умолчанию), обеспечить включение
нагрузки после перехода из режима включенной защиты, в режим выключенной
защиты.
Если Вам такое "правило игры" не нравится (моя "самодеятельность"), то уберите эту
команду.
В этом случае, после возврата в режим выключенной защиты, факт включения или
выключения нагрузки будет определяться тем состоянием Flag_1,6, которое имело
место быть на момент предыдущего перехода из режима выключенной защиты в
режим включенной защиты (оперативная память).
21
"Практикум по конструированию устройств на PIC контроллерах" http://ikarab.narod.ru E-mail: karabea@lipetsk.ru
22