| Метка
| Мнемоника
| Операнд
| Количество тактов
|
|
|
|
|
|
|
|
|
|
|
|
| CALL
| DELAY
|
|
|
|
|
|
|
|
|
|
|
|
| DELAY
| MVI
| B, TIME
|
|
| LOOP
| DCR
| B
|
|
|
| JNZ
| LOOP
|
|
|
| RET
|
|
|
Подпрограмма представляет собой простой цикл. Счетчик цикла реализован на регистре В. Основной задачей является расчет величины 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