Типовые процедуры ввода. данных
Опрос двоичного датчика. Двоичный датчик типа переключатель подключен к входу D5 порта 4 МП-контроллера. Если контакт разомкнут, то на входе D5 присутствует сигнал 1, если замкнут, то D5=0.
Необходимо в некоторой части УП контроллера в зависимости от значения сигнала на входе D5 передать управление фрагменту программы с меткой LABELA (D5=0) или фрагменту с меткой LABELA (D5=1). На рисунке 51. представлена БСА программы, реализующей процедуру опроса датчика. Программа имеет символичное имя INPKEY (ввод ключа), используемое в качестве метки начальной команды этой программы. При программировании с использованием механизма подпрограмм можно обращаться к этой процедуре опроса датчика по команде CALL INPKEY и выходить из нее по команда RET. На языке ассемблера текст программы будет выглядеть так:
INPKEY: | IN 04H | ; ввод в аккумулятор из порта 4 |
ANI 20H | ; маскирование всех разрядов введенного байта ; ; кроме D5 | |
JNZ LABELB | ; переход к фрагменту LABELB, если D5=1, | |
; иначе выполнение очередной команды | ||
LABELA: | . . . | |
. . . | ||
. . . | ||
JMP EX | ; конец фрагмента LABELA | |
LABELB: | . . . | ; начало фрагмента LABELB |
. . . | ||
EX | RET | ; конец фрагмента LABELB |
Если фрагменты LABELA и LABELB оформить в виде подпрограмм, то программа будет иметь вид:
INPKEY: IN 04
ANI 20H
CZ LABELA
CALL LABELB
RET
Рисунок 51 – Схема алгоритма опроса двоичного счетчика
Рисунок 52 – Схема алгоритма ожидания события
Ожидание события. Известно, что контроллеры объектов работают в реальном масштабе времени и, следовательно, их функционирование должно определяться событиями, происходящими в объекте или процессе управления.
События фиксируются с использованием двоичных датчиков, размещенных на объекте управления. Если есть задача по ходу выполнения УП приостановить процесс, продвижение но программе реализуется до тех пор, пока в результате процессов происходящих в объекте управления, не замкнется контакт двоичного датчика подключенного ко входу D2 порта 7. На рисунке 52 представлена БСА ожидания события. Она имеет символическое имя HUNT (засада) и может быть многократно использована основной УП контроллера по команде CALL HUNT.
На языке ассемблера текст программы читается так:
HUNT: | IN 07Н | ; ввод аккумулятора из порта 7 |
ANI 04X | ; маскирование всех разрядов | |
; введенного байта, кроме D2 | ||
JNZ HUNT | ; переход в цикл ожидания, если D2=1 | |
; очередная команда | ||
. . . | ; основной программы (или команда PET) | |
; в случае, если 02=0 |
Аналогичным образом с изменением различных кодов маски в команде ANI можно осуществлять отмежевание множества событий, фиксируемых различными датчиками, присоединенными к другим входам порта ввода информации.
Обнаружение импульсного сигнала. Программа, опрашивающая состояние датчика импульсного сигнала, обнаруживает не только факт появления, но и факт сброса сигнала. Пусть импульсный датчик подключен к входу D7 порта 4. БСА состоит из двух процедур: ожидание появления фронта сигнала и ожидание его спада (рис.53). Текст программы имеет вид:
WAITC: | IN 04H | ; вывод из порта 4 |
ANI 80H | ; анализ D7 | |
JNZ WAITC | ; если D7=1,TO ждать | |
WAITO: | IN 04H | ; вывод из порта 4 |
ANI 80H | ; анализ D7 | |
JZ WAITO | ; если 07=0,то ждать, иначе | |
; выход из процедуры. |
Реализуемый программой цикл ожидания выполняется за 13,5 мкс и импульсы с меньшей длительностью не фиксируются контроллером. Для обнаружения кратковременных импульсов используют два способа: буферизацию импульса на триггере флага и систему прерывания. При фиксации импульса с помощью триггера флага на вход порта поступает не кратковременный сигнал с датчика, а сигнал от триггера флага с динамическим входом (рис.54). Триггер устанавливается по фронту импульса, а сбрасывается программой вследствие выдачи управляющего воздействия через рт 7. Таким образом, флаг инициируется на новый цикл слежения за кратковременным импульсом.
Рисунок 53 – Схема алгоритма
Рисунок 54. Схема включения триггера обнаружения импульсного флага для фиксации краткого сигнала временных импульсов
В случае использования системы прерывания для отслеживания кратковременных импульсов выход их источника подключается к входу запроса прерывания ЗПР микропроцессора.
Устранение дребезга контактов. У датчиков, имеющих механические или электромеханические контакты (реле, клавиши и т.п.), возникает явление, называемое дребезгом, так как при замыкании контактов имеет место переходный процесс. В этом случае сигнал с контакта может быть прочитан МП-контроллером как последовательность 0 и 1. Этот дребезг можно ликвидировать схемными средствами с использованием одновибратора, буферного триггера, а также программным путем (рис.55 а, б, и в).
Применяют в основном два программных способа ожидания установившегося значения:
- временная задержка;
- отсчет заданного числа совпадающих значений сигнала. Устранение дребезга контактов по первому способу основано на том, что уп, обнаружив замыкание контакта, запрещает его опрос на время, равное паспортному времени переходного процесса контакта (1...50 мс).
Рисунок 55 – Подавление дребезга контактов:
а - использование одновибратора;
б - использование буферного триггера;
в - БСА, использующая временную задержку
Например, датчик подключен к входу порта 7. На рисунке 55, «в» представлена БСА, а программа имеет вид:
DBNC: | IN 07H | ; ввод из порта 7 |
ANI 08H | ; анализ состояния контакта | |
JNZ DBNC | ; если D3=1, то ждать | |
CALL DELAY | ; подпрограмма задержки | |
. . . | ; выход из процедуры |
Временная задержка реализуется подпрограммой DELAY, вызываемой командой CALL.
Дополнение программы DEBNC группой команд IN 07H ANI 08H JNZ DBNC.
После команды CALL DELAY позволяет не только устранить дребезг контактов, но и отфильтровать помеху импульсного типа.
Устранение дребезга путем подсчета заданного числа совпадающих значений сигнала состоит в многократном считывании сигнала с контакта и подсчете удачных опросов N (т.е. опросов, обнаруживших, что контакт устойчиво замкнут). Число N подбирается экспериментально и равно 10-50.
Опрос группы двоичных датчиков. На практике МП-контроллеры связаны не с одним датчиком, а с группой независимых или взаимосвязанных датчиков. В этих случаях МП-контроллер, анализируя состояния датчиков, выполняет процедуру передачи управления соответствующим фрагментом прикладной программы. Например, программа INPGR обеспечивает переда
чу управления по четырем направлениям в соответствии с БСА на рисунке 56, в зависимости от состояния датчиков, подключенных ко входам DO ... D2 порта 3.
Анализ состояния датчиков начинается с бита DO и выполняется последовательными сдвигами содержимого аккумулятора в сторону младших разрядов.
INPGR: | IN 03H | ввод из порта 3 |
RAR | Do=0? | |
JNC LABTL1 | ||
RAR | D1=0? | |
JNC LABEL2 | ||
RAR | D2=0 ? JNC LABELS | |
LABEL4: | начало фрагмента программы с меткой LABEL4 | |
LABEL3: | начало фрагмента программы с меткой LABEL3 | |
LABEL2: | начало фрагмента программы с меткой LABEL2 | |
LABEL 1: | начало фрагмента программы с меткой LABEL 1 |
Если датчиков много, то передача управления реализуется контроллером через таблицу переходов. В работе взаимосвязанных датчиков часто возникает необходимость осуществить передачу управления не только в зависимости от двоичного эквивалента принятого кода, как в рассмотренном выше примере, но и в зависимости от соотношения принятого кода и некоторой заранее определенной установки.
Пример. В порте 3 группы двоичных датчиков формируется двоичный код. Если он четный, то передать управление программе с меткой LABELC, если нет - программе с меткой LABELD.
Напишем программу:
IN | 02Н | ; ввод из порта 3 |
RAR | ; сдвиг кода вправо | |
JNC | LAB ELC | ; число четное |
JMP | LAB ELD | ; число нечетное |
Рисунок 56 – Схема алгоритма опроса группы автономных датчиков
Проверка на четность производится по окончании его младшего разряда, а потому эту проверку выполняют сдвигом в сторону младших разрядов (RAR) и условным переходом по признаку СЧУ.
Пример.
В порте 3 от группы датчиков формируется двоичный код. Если десятичный эквивалент кода лежит в диапазоне 17 < х < 109, то передать управление программе с меткой LABELE, в противном случае - программе с меткой LABELF.
Текст программы:
IN | 03X | ; ввод из порта 3 |
CPI | ; сравнение с установкой нижней границы диапазона | |
JC | LABEL F | ; число < 17 |
JZ | LABEL F | ; число = 17 |
CPI | ; сравнение с установкой верхней границы диапазона | |
JC | LABEL E | ; число < 109 |
JZ | LABEL E | ; число =109 |
JMP | LABEL F |
Сравнение чисел выполняется командой CPI, а передача управления или одной командой JC (JNC), или парой команд JS, JZ (JNC, JNZ) и зависит от того, подлежат ли анализу на равенство числа, определяющие границы диапазона, или нет.
Выделение и обработка отдельных бит при вводе информации. Байт информации, поступающий на аккумулятор МП из порта ввода, как правило, является совокупностью независимых бит, поэтому в задачах управления возникает необходимость выделения из байта определенного бита. Это может быть выполнено двумя способами: наложением маски или логическим сдвигом.
Логические операции с непосредственным операндом осуществляют наложение маски. Как правило, это операция логического умножения (команда ANI). В результате маскирования выбранного бита изменяется значение признака Z (Z=1, если результат = 0). Передача управления осуществляется командами условного перехода JZ (переход, если = 0) или JNZ (переход, если не = 0).
Пример программы выделения бита D2 порта 3:
IN | ОЗН | ; ввод из порта 3 |
ANI | 04H | ; наложение маски 00000100 |
JNZ | MARK1 | ; если 02=1, то переход к программе с меткой MARK1 |
Наложением маски можно выделить и группу бит. Для выделения старшего или младшего бита, а также для выделения последовательности бит используются операции логического сдвига (RAL, RLC, RAR, RRC). В результате выполнения этих операций модифицируется признак переноса CY. Передача управления осуществляется командами JC (переход, если CY =1).
Пример программы выделения младшего бита Do порта 3:
IN | ОЗН | ; ввод из порта 3 PAP |
RAR | ; сдвиг вправо | |
JC | MARK3 | ; если Do=1, то передача управления |
; программ с меткой MARK3 |
Дата добавления: 2019-02-07; просмотров: 487;