
- •5. Реализация заданных временных интервалов программным способом
- •5.1. Краткие сведения из теории
- •5.2. Программы временных задержек
- •Подпрограмма временной задержки
- •Подпрограмма, выполняемая за 100 мкс
- •Подпрограмма, выполняемая за 1 с
- •5.3. Задания для самостоятельной работы
- •Рекомендуемая литература
5.2. Программы временных задержек
При программировании МП - систем часто стоит задача реализовать заданный временной интервал программным способом. Эта задача обычно решается с использованием подпрограмм.
Пример 5.1. Написать подпрограмму, которая вырабатывает временную задержку длительностью 100 мкс.
Примем, что частота синхроимпульса Ф1 и Ф2, поступающих на МП, 2 МГц, тогда длительность одного такта составит 0,5 мкс.
Подпрограмма на языке Ассемблер, выполняющая данную задачу, представлена в табл. 5.1. Число в правом столбце показывает длительность выполнения каждой команды в тактах. Эту информацию можно взять из полного описания системы команд 2.
Таблица 5.1
Подпрограмма временной задержки
Метка |
Мнемоника |
Операнд |
Количество тактов |
|
|
|
|
|
|
|
|
|
CALL |
DELAY |
17 |
|
|
|
|
|
|
|
|
DELAY |
MVI |
B, TIME |
7 |
LOOP |
DCR |
B |
5 |
|
JNZ |
LOOP |
10 |
|
RET |
|
10 |
Подпрограмма представляет собой простой цикл. Счетчик цикла реализован на регистре В. Основной задачей является расчет величины TIME, которая загружается в регистр В. Эта величина может быть рассчитана по формуле 3
TIME
=
,
где
означают, что результат должен быть
получен отбрасыванием дробной части;
t3
– заданная величина задержки; t0
– время выполнения однократно выполняемых
команд; tц
– время цикла, затрачиваемое на выполнение
одного прохода цикла.
В нашем случае
t3 = 100 мкс;
t0
=
(17+7+10)
0,5 = 17 мкс
tц = (10+5) 0,5 = 7,5 мкс;
TIME =
= 11.
Если примем TIME = 11, получим t3 = 17 + 11 7,5 = 99,5 мкс.
Если полученная точность формирования временной задержки недостаточна, поступают следующим образом: уменьшают полученное значение TIME на единицу или больше, а полученное уменьшение t3 компенсируют командой NOP (холостая команда); изменяют значения tц путем добавления в цикл других команд (например, MOV B, B).
Воспользуемся первым способом. Пусть TIME = 10. Тогда t3 = 17 + +10 7,5 = 92 мкс. Недостающие 8 мкс получим за счет четырех команд NOP (длительность NOP – 4 такта). Окончательно подпрограмма задержки примет вид, представленный в табл. 5.2.
Таблица 5.2
Подпрограмма, выполняемая за 100 мкс
Метка |
Мнемоника |
Операнд |
Количество тактов |
|
|
|
|
|
|
|
|
|
CALL |
DELAY |
17 |
|
|
|
|
|
|
|
|
DELAY |
MVI |
B, TIME |
7 |
LOOP |
DCR |
B |
5 |
|
JNZ |
LOOP |
10 |
|
NOP |
|
4 |
|
NOP |
|
4 |
|
NOP |
|
4 |
|
NOP |
|
4 |
|
RET |
|
10 |
В тех случаях, когда необходимо реализовать большие временные задержки, в подпрограммах организуют так называемые вложенные циклы. В табл. 5.3 представлена подпрограмма на языке Ассемблер, реализующая временную задержку в 1 секунду с точностью 0,9988 с использованием двух циклов: LOOP 2 – внутренний и LOOP 1 – внешний.
Для получения задержки с более высокой точностью поступают, как описано выше.
Таблица 5.3