21.ПРОГРАММИРОВАНИЕ ТИПОВЫХ ФУНКЦИЙ УПРАВЛЕНИЯ: ОПРОС ДВОИЧНОГО ДАТЧИКА, ОЖИДАНИЕ СОБЫТИЯ(ПЕРЕПАДА УРОВНЕЙ И ИМПУЛЬСА), ЗАЩИТА ОТ ДРЕБЕЗГА
Типовые программы (процедуры) управления и контроля используются при работе с дискретными датчиками (кнопки, реле, переключатели) и с дискретными исполнительными устройствами (светодиоды, лампочки, реле, двигатели переменного тока):
1. опрос двоичного датчика
2. ожидание события
3. формирование управляющего сигнала
4. формирование временной задержки
Опрос двоичного датчика − сигналы датчика можно разделить по характеру датчика на контактные и бесконтактные.
Опрос состоит в том, что МП опрашивает состояние датчика и зависимости от состояния происходит переход к какой-то ветви программы.
Пример подключения датчика к порту ввода:
OPROS: IN IPORT
ANI 0000 0010B ; выделить D1
JZ M2 ; если D1 = 0
M1: … ; если D1 = 1
∙
∙
∙
M2: …
Ожидание события (ожидание появления определенного сигнала) − МП опрашивает состояние датчика в цикле до тех пор, пока на выходе датчика не будет заданного сигнала. Сигналы по виду разделяются на:
Ожидание размыкания контактов (высокого уровня)
CALL WAIT_H
WAIT_H: IN IPORT
ANI 0000 0100B ; выделить D2
JZ WAIT_H ; цикл ожидания
RET ; выход
Ожидание замыкания контактов (низкого уровня)
WAIT_L: IN IPORT
ANI 0000 0100B ; выделить D2
JZ WAIT_L ; цикл ожидания
RET ; выход
Борьба с дребезгом контактов
При использовании контактных элементов появляется дребезг (многократное срабатывание)
Для борьбы:
1. аппаратный метод − используются RS − триггеры или триггер Шмидта
2. программный метод:
а) подсчитывается число переключений контакта.
Время дребезга зависит от типа контакта: для реле небольшой мощности ≈ 20 ÷ 30 мс, для кнопок ≈ 10 мс, для герконовых реле ≈ 2 мс.
б) программная задержка: когда программа обнаружила срабатывание контакта, выполнение ее приостанавливается на время, большее времени дребезга.
WAIT_L: IN IPORT
ANI 0000 0010B
JNZ WAIT_L ; цикл, если D1 = 1
CALL DELAY ; подпрограмма задержки на tзд
RET
22.ПРОГРАММИРОВАНИЕ ТИПОВЫХ ФУНКЦИЙ УПРАВЛЕНИЯ: ФОРМИРОВАНИЕ УПРАВЛЯЮЩИХ СИГНАЛОВ(СТАТИЧЕСКИХ И ИМПУЛЬСНЫХ), РЕАЛИЗАЦИЯ ВРЕМЕННЫХ ЗАДЕРЖЕК
Подключение исполнительного устройства к порту вывода
Виды управляющих сигналов:
1] Статические
VKL: MVI A, 01H
OUT OPORT ; вывод D0 = 1
OTKL: MVI A, 00H
OUT OPORT ; вывод D0 = 0
OTKL: XRA A ; сброс (А)
OUT OPORT ; вывод D0 = 0
2] Формирование импульсных управляющих сигналов
XRA A
OUT OPORT ; вывод D1 = 0
MVI A, 02H
OUT OPORT ; вывод D1 = 1
CALL DELAY ; задержка на tИ
XRA A
OUT OPORT ; вывод D1 = 0
MEANDER: MVI A, 02H
OUT OPORT
CALL DELAY
XRA A
OUT OPORT
CALL DELAY
JMP MEANDER
MEANDER: XRI 02H
OUT OPORT
CALL DELAY
JMP MEANDER
Формирование временных задержек
Для формирования временной задержки обычно используется метод программных циклов, при котором в некоторый регистр общего назначения, выполняющего роль счетчика, загружается число, которое затем в каждом проходе цикла уменьшается на 1. Так продолжается до тех пор, пока содержимое регистра-счетчика не станет равным нулю, что интерпретируется программой как момент выхода из программного цикла. Время задержки при этом определяется числом, загруженным в регистр-счетчик, и временем выполнения команд, образующих программный цикл. Схема алгоритма такой программы приведена на рис.1. Программы имеет символическое имя DELAY (задержка). Обычно программы временной задержки оформляются как подпрограммы, вызов которых из основной программы осуществляется по команде CALL DELAY, а возврат в основную программу - по команде RET.
Если в качестве регистра-счетчика использовать регистр В, то текст программы, отображающий структуру алгоритма на рис.1, имеет вид:
|
Рис.1. Структурная схема алгоритма подпрограммы временной задержки
CALL DELAY ; вызов подпрограммы задержки
DELAY: MVI B, X ; загрузка в регистр В числа Х
LOOP: DCR B ; декремент В
JNZ LOOP ; цикл, если (В)=0
RET ; возврат в основную программу, если
; (В)=0
Для получения требуемой временной задержки необходимо определить значение числа Х, загружаемого в регистр-счетчик В. Определение числа Х выполняется на основе расчета времени выполнения команд, образующих данную подпрограмму. При этом необходимо учитывать, что команды MVI B, X и RET выполняются однократно, а число повторений команд DCR B и JNZ LOOP равно числу Х, загружаемому в регистр В. Кроме того, обращение к подпрограмме временной задержки осуществляется по команде CALL DELAY, время выполнения которой также необходимо учитывать при подсчете временной задержки.
В описании команд микропроцессора КР580ВМ80А указывается, за сколько машинных тактов Т выполняются команды [2, с.307-315]. На основе этих данных можно записать длительность выполнения команд:
CALL DELAY - 17 тактов
MVI B, X - 7 тактов
DCR В - 5 тактов
JNZ LOOP - 10 тактов
RЕТ - 10 тактов
Время выполнения любой команды подсчитывается по формуле: t = n * T, где n - число машинных тактов в команде;
Т - длительность машинного такта.
Длительность машинного такта определяется частотой fт тактового генератора микропроцессорной системы:
Т=1/fт
Величина Х может быть вычислена по формуле:
X=(tз-to)/tц, где tз - заданная величина задержки;
tо - время, требуемое для однократно выполняемых команд;
tц - время цикла, требуемое для выполнения циклически повторяемых команд.
Для примера примем, что требуемая временная задержка tз=100мкс, тактовая частота fт=2,0 МГц.
Рассчитаем
Т=1/fт=0,5 мкс, tо=(17+7+10)*0,5=17 мкс, tц=(10+5)*0,5=7,5 мкс, Х=(100-17)/7,5=11,07.
Если принять Х=11, получим tз=17+11*7,5=99,5 мкс, следовательно временная задержка будет реализована с погрешностью.
Определим величину погрешности программной реализации задержки.
Абсолютная погрешность
tз=99,5-100=-0,5 мкс.
Относительная погрешность = tз/tз * 100%=0,5/100*100%=0,5%.
Если такая погрешность удовлетворяет условиям задачи, то на этом разработка программы заканчивается.
В случае, когда точность формирования задержки 100 мкс с погрешностью -0,5мкс (-0,5%) не удовлетворяет разработчика, поступают одним из следующих способов:
1) уменьшают полученное значение Х на единицу или несколько единиц
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.