Учебное пособие: Аппаратное и программное обеспечение простых микропроцессорных систем
Исходя из приведенного расчета, запишем текст подпрограммы TIME:
TIME: MVIB, 31 ; загрузка в регистр В числа 31
COUNT: DCRB; декремент регистра В
JNZ, адрес COUNT; цикл, если В≠0
RET; возврат в основную программу.
В том случае, если точность представления временного интервала 250 мкс с погрешностью – 0,5 мкс не удовлетворяет разработчика, можно поступить двояко:
– реализовать подпрограмму точной задержки на 50 мкс и пятикратно повторить ее вызов;
– путем внесения в подпрограмму пустых операций NOP и соответствующего изменения набора команд (с целью устранения временного рассогласования 0,5 мкс) обеспечить точную временную выдержку.
Во многих случаях применения МП-систем требуется сформировать длительные временные задержки (секунды, минуты, часы и т.д.). Сделать это при частоте, равной 2МГц с использованием ранее описанного метода невозможно, так как максимальной емкости регистровой пары FFFF не хватит для того, чтобы представить число Х, достаточное для формирования задержки в 1 секунду. Сформировать столь большую для МП задержку можно с использованием метода вложенных циклов (как показано на рис. 7).
С целью получения задержки, равной 1 мин, основная управляющая программа может 60 раз осуществлять вызов подпрограммы ONESEC. Для этого число 60 загружается, например, в регистр В, который выполняет функции декрементного счетчика секунд, и после каждого прогона подпрограммы ONESEC его содержимое уменьшается на 1. Текст программы «ONESEC» приводится ниже.
ONESEC: MVIB, FF; счетчик внешних циклов
L1: MVIC, FB; счетчик внутренних циклов
L2: NOP; точная подгонка времени
внутреннего цикла
NOP;
NOP; время
NOP;
DCRC; декремент счетчика внутренних циклов
JNZ, адрес L2; возврат во внутренний цикл, если С≠0
DCR В; декремент счетчика внешних циклов
JNZ, адрес L1; возврат во внешний цикл, если В≠0
RET
Рис. 7. Алгоритм задержки на 1 секунду
Блок-схема типовой процедуры сбора и формирования в ОЗУ МП-системы массива данных от одного источника показана на рис. 8. Источником вводимых данных является порт ввода с символическим адресом NN, 8100 – начальный адрес массива данных, регистр С используется в качестве счетчика данных и регистровая пара HL используется командами с косвенно-регистровой адресацией в качестве указателя данных; ETX – знак-терминатор «конец массива».
Рис. 8. Типовая процедура сбора данных
Программа имеет вид:
LXIH, 8100; запись начального адреса