Программная реализация функций времени
Рисунок 57 – Схема алгоритма временной задержки
Формирование временной задержки малой длительности. Применяется метод программных циклов, при котором в рабочий регистр блока регистров общего назначения загружается число, которое затем в каждом проходе цикла уменьшается на 1. Процедура продолжается до тех пор, пока содержимое рабочего регистра не станет равным О, что интерпретируется программой как момент выхода из программного цикла. Время задержки при этом определяется величиной числа, загруженного в рабочий регистр, и временем выполнения команд, образующих программный цикл. На рисунке 57 представлена БСА такой программы. Программа имеет символическое имя TIME и в случае вызова ее основной УП по команде CALL TIME должна завершаться командой возврата RET.
Пример. В программе, управляющей работой контроллера, процессор которого работает с тактовой частотой 2 МГц (период - 500 нс), необходимо реализовать временную задержку 100 мс. Фрагмент программы необходимо оформить в виде подпрограммы, так как предполагается, что основная УП производила к ней многократные обращения для формирования выходных импульсных сигналов, длительность которых кратна величине 100 мс.
Текст программы (рис. 57) будет выглядеть следующим образом:
TIME: | MVI | В, Х | ; Загрузка в регистр В числа Х |
COUNT: | PCR | В | ; Уменьшение на 1 содержимого В |
JNZ | COUNT | ; Цикл, если В = О | |
RET | ; Возврат в основную программу, | ||
; Если В = О |
Для получения требуемой временной задержки определяется величина числа X, загружаемого в рабочий регистр В. Определение Х производится на основе расчета времени выполнения команд, образующих подпрограмму. Необходимо учитывать, что команды MVI В X и RET выполняются однократно, а число повторений команд DCR В и JNZ COUNT равно числу X, загружаемому в регистр В. Обращение к подпрограмме временной задержки осуществляется по команде CALL TIME, время исполнения которой также необходимо учитывать при подсчете временной задержки. В описании команд МП 580ИК80 указывается, за сколько тактов основной частоты синхронизации исполняется каждая команда МП. Имея эти данные, запишем:
CALL | TIME | - 17 тактов | - 8,5 мкс |
MVI | B,X | - 7 тактов | - 3,5 мкс |
DCR | В | - 5 тактов | - 2,5 мкс |
JNZ | COUNT | - 10 тактов | - 5,0 мкс |
RET | - 10 тактов | - 5,0 мкс |
Таким образом, однократно исполняемые команды в этой подпрограмме требуют 17 мкс (8,5 + 3,5 + 5,0). Следовательно, для получения требуемой задержки в 100 мкс необходимо выполнять команды DCR В и JNZ COUNT столько раз, чтобы время их исполнения составило 83 мкс (100-17), но время исполнения этой пары команд составляет 7,5 мкс (2,5 + 5,0). Поэтому, если принять, что Х=10, то возможно получение временной задержки 7,5 мкс, а недостающие 8 мкс можно получить четырехкратным использованием команды пустой операции NOP, время исполнения которой равно 2 мкс. На основании вышеизложенного запишем текст подпрограммы TIME:
TIME: | MVI | B, 10 | ; загрузка в регистр В числа 10 |
COUNT: | DCR | В | ; декремент регистра В |
JNZ | COUNT | ; цикл, если В = О | |
NOP | ; четыре пустых операции | ||
NOP | ; для точной поднастройки 37 | ||
NOP | ; времени | ||
NOP | ; задержки | ||
RET | ; возврат в основную программу |
Формирование временной задержки равно 1 с. Формирование длительных задержек (с, мин и т.д.) при частоте синхронизации МП, равной 2 МГц, с использованием этого процесса невозможно, так как максимальной емкости регистровой пары (FFFFH) не хватает и для 1 с. Сформировать большую задержку можно с использованием метода вложенных циклов так, как представлено на БСА (рис. 58), а текст программы будет иметь следующий вид:
ONESEC: | MVI | В, OFFH | ; счетчик внешних циклов |
L1: | MVI | С, OFBH | ; счетчик внутренних циклов |
L2: | NOP | ; точная | |
NOP | ; подгонка | ||
NOP | ; времени | ||
NOP | ; внутреннего цикла | ||
DCR | С | ; декремент счетчика внутреннего цикла | |
JNZ | L2 | ; внутренний цикл, если С = О | |
DCR | B | ; декремент счетчика временных циклов | |
JNZ | L1 | ; внешний цикл, если В = О |
Рисунок 58 – Схема алгоритма временной задержки, равной 1 с
Для получения задержки, равной 1 мин, основная УП может 60 раз осуществить вызов подпрограммы ONESEC. Для этого число 60 загружается в регистр, например D, который выполняет функции декрементного счетчика секунд и после каждого прогона подпрограмм ONESEK его содержимое уменьшается на 1.
Недостаток длительной задержки в том, что во время подсчета временных интервалов МП не выполняет другой работы и устройство может не отреагировать на быстроменяющиеся процессы в объекте управления.
Дата добавления: 2019-02-07; просмотров: 440;