Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Prakt4.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
42.16 Кб
Скачать

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]