Раздел: Документация
0 ... 22 23 24 25 26 27 28 ... 39 Воспроизводим последовательность сигналов, соблюдая временные интервалы В предьщущей задаче изменение состояния контактов выключателей воспроизводилось через одинаковые промежутки времени. Для этого главная программа, представленная на Рис. 7.13, вызывала подпрограмму задержки (блок 4): LDDE,0800H [CALL DELAY Эту часть алгоритма следует изменить следующим образом: из числа, полученного в процессе подсчета интервала времени между двумя последовательными сигналами, каждый раз вычитаем 1. Повторяем эту операцию до тех пор, пока не получим 0. После этого переходим к воспроизведению очередного записанного сигнала. Подпрограмма этой процедуры представлена на Рис. 7.16. Она состоит из 5 блоков. Блок 1: последовательно считываем из памяти 3 байта числа, выражающего соответствующий интервал времени и загружаем их в 3 регистра - С, D и Е. Блок 2: из содержимого регистра С вычитаем 1. Если в результате вычитания был перенос разряда, то переходим в блок 3: из содержимого регистра D вычитаем 1. Если при этом произошел перенос разряда, переходим в блок 4: из содержимого регистра Е вычитаем 1. Затем повторяем операции начиная с блока 2 до тех пор, пока не выполнится условие, сформулированное в блоке 5 (равенство нулю содержимого всех трех регистров - С, D и Е). Проверка этого условия осуществляется путем двукратного применения логической операцию «ИЛИ» (сначала между содержимым регистров Е и D, а затем между результатом первой операции и содержимым регистра С). Если конечный результат равен 0, то это означает, что содержимое каждого из регистров С, D и Е равно 0. Справа от текста программы, представленной на Рис. 7.16, цифрами обозначено количество импульсов тактовой частоты, которое тре- Подпрограмма подсчета © ® Три байта числа счетных циклов поочередно считываются из памяти и загружаются в регистры C,DuE TIMER: Из содержимого регистра С вычитается 1 Если в предыдущей операции был перенос разряда, то из содержимого регистра D вычитается 1 DCOUNT: Чтобы число тактовых импульсов цикла было равно 70, в цикл добавлена «холостая» команда
/ Эта подпрограмма используется вместо I подпрограммы задержки из предыдущего параграфа Рис. 7.16. Подпрограмма воспроизведения временного интервала буется для данной команды цикла, а внизу дана их сумма начиная от метки DCOUNT. Для того чтобы эта сумма равнялась ровно 70 (то есть сумме тактовых импульсов соответствующего цикла программы, представленной на Рис. 7.15), нам пришлось добавить так называемый «холостой» или «пустой» оператор «SUB ООН», выполнение которого требует 7 импульсов тактовой частоты (именно столько не хватало до 70). Составленную ранее программу воспроизведения последовательности сигналов (Рис. 7.13) нужно модернизировать в соответствии с новой задачей, изменив в ней блок 4. А именно заменить оператор «CALL DELAY» оператором «CALL TIMER», вызывающим подпрограмму, представленную на Рис. 7.16. Полный текст программы для задачи № 3 представлен на Рис. 7.17. Она отличается от программы, рассмотренной нами в предыдущем разделе, тем, что в ней метки DCHNG и DELAY заменены соответственно на метки DTCHK и TIMER. Эту программу можно применить для того, чтобы поручить микрокомпьютеру осуществлять последовательность манипуляций по управлению какими-либо механизмами или установками вместо оператора (Рис. 7.18). Записав в память микрокомпьютера последовательность операций управления какой-либо системой, можно в точности воспроизвести эту последовательность. А изменив временной масштаб цикла воспроизведения, мы имеем возможность в несколько раз увеличить скорость воспроизведения заданной последовательности операций управления. На базе контроллера, в память которого загружена аналогичная программа, можно спроектировать музыкальный инструмент (например, фортепиано) с функцией записи и воспроизведения. Давайте теперь вместе подумаем, как решить одну техническую проблему, связанную с особенностями работы устройств ввода, используемых в задачах № 1 и № 3. Речь идет о механических выключателях (в том числе кнопочных). Радиолюбителям хорошо известно, что переход механических контактных устройств из состояния «включено» в состояние «выключено» и наоборот, часто сопровождается явлением, получившим образное название «дребезг». Рассмотрим подробнее, в чем оно состоит и как с ним бороться.
REPEAT: LD DTOUT: LD OUT INC LD HL, DATAM A,(HL) (PORT2), A HL B,A DCOUNT: CALLjnMER LD А, В AND 80H JP Z, DTOUT JP REPEAT DTCHK: LD С, ООН ~~W4" LD D, ООН LD E, ООН Продолжение справа вверху LD SUB LD LD SBC LD LD SBC LD SUB OR OR JP RET END А, С 01H C,A A, D А, ООН D,A A, E А, ООН E,A ООН D С NZ, DCOUNT Рис. 7.17. Программа воспроизведения последовательности сигналов и интервалов между ними Пример применения программы к задаче № 3 Концевые Рычаг управления Кнопки управления В 8. V V°01 Порт ввода Программа, воспроизводящая последовательность подачи команд оператора Порт вывода Электро- х двигатель Электро- £ g § магнитный § g ~> клапан & 1 Внешние устройства ввода команд, подаваемых оператором Объекты управления контроллера Исполнительные устройства и механизмы Рис. 7.18. Контроллер абсолютно точно воспроизводит манипуляции, ранее произведенные опытным оператором Коррекция ошибок ввода состояния переключателей (устранение «дребезга») В момент изменения состояния механического переключателя (включение/выключение) его контакты вибрируют, многократно касаясь друг друга. Мы не замечаем этого, когда включаем или выключаем какой-либо прибор, так как весь этот процесс (Рис. 7.19) протекает в течение всего нескольких миллисекунд. Этот «танец» контактов при смене состояния переключателя и называется дребезгом. Дребезг контактов переключателя вполне может стать причиной ошибок в работе микрокомпьютера. Например, при загрузке в память последовательности сигналов выключателей по программе, приведенной на Рис. 7.17, в случае возникновения дребезга контактов выключателя компьютер может ошибочно принимать их многократное замыкание как ввод новых данных. Таким образом, последовательность сигналов будет записана неправильно. +5 В Выключатель Входной , сигнал Область дребезга]
Замыкание Входной I, Размыкание \ «1» ~~I! «о» Контакты дребезжат» в течение нескольких миллисекунд Время Рис. 7.19. Дребезг контактов переключателя Для борьбы с дребезгом разработано много способов. Мы предлагаем применить для этого RS-триггер, построенный на логических элементах «И-НЕ» (например, ТТЛ серии SN 7400). Если соединить два вентиля «И-НЕ», как показано на Рис. 7.20, то получим RS-триггер, то есть триггер с раздельной установкой состояния «О» и «1» на выходе. Название этой разновидности триггеров происходит от первых букв английских слов Reset (сброс) и Set (установка). Таблица соответствия сигналов на входах (А и В) и выходе (X) RS-триггера представлена на Рис. 7.20. Мы знаем, что на выходе вентиля «И-НЕ» сигнал соответствует «О» только в том случае, когда на обоих входах сигнал равен «1». Согласно таблице, если в начальный момент сигнал на входе А триггера равен «0», а на входе В и на выходе X - «1», то даже если на входе А произойдет инверсия сигнала с «0» на «Ь>, а затем с «1» на «0», на выходе X все равно сохранится предыдущее состояние, то есть «1». Принцип действия схемы подавления дребезга контактов переключателя, использующей это свойство RS-триггера, проиллюстрирован на Рис. 7.21. Давайте попробуем разобраться в том, как она Работает. 0 ... 22 23 24 25 26 27 28 ... 39
|