46822 (597300), страница 2
Текст из файла (страница 2)
ONESEC: MVI B, FF; счетчик внешних циклов
L1: MVI C, FB; счетчик внутренних циклов
L2: NOP; точная подгонка времени
внутреннего цикла
NOP;
NOP; время
NOP;
DCR C; декремент счетчика внутренних циклов
JNZ, адрес L2; возврат во внутренний цикл, если С≠0
DCR В; декремент счетчика внешних циклов
JNZ, адрес L1; возврат во внешний цикл, если В≠0
RET
Рис. 7. Алгоритм задержки на 1 секунду
Блок-схема типовой процедуры сбора и формирования в ОЗУ МП-системы массива данных от одного источника показана на рис. 8. Источником вводимых данных является порт ввода с символическим адресом NN, 8100 – начальный адрес массива данных, регистр С используется в качестве счетчика данных и регистровая пара HL используется командами с косвенно-регистровой адресацией в качестве указателя данных; ETX – знак-терминатор «конец массива».
Рис. 8. Типовая процедура сбора данных
Программа имеет вид:
LXI H, 8100; запись начального адреса
8100 → (H+L)
MVI C, C, 00; счетчик = 0
SAVE: IN, NN; ввод данных из порта в А
MOV M, A; перенос данных А → ячейку ОЗУ,
адрес которой в (H+L)
INX H; (H+L) = (H+L+1)
INR C; счетчик = счетчик+1
SUI, ETX; проверка терминатора
JNZ, адрес SAVE; продолжение сбора, если не 0
DONE
Если число слов данных известно и хранится в ячейке с адресом 81N0, то программа сбора данных будет иметь вид:
LXI H, 8100;
LDA, 81N0; пересылка содержимого 81N0 → (A)
MOV C, A; счетчик = длина массива: А → (С)
SAVE: IN, NN;
MOV M, A;
INX H;
DCR C; счетчик = счетчик-1
JNZ, адрес SAVE; продолжение сбора, если не 0
DONE
Рассмотрим несколько примеров обработки массива данных.
LDA COUNT; загрузка содержимого М 8200
(COUNT) → (A)
MOV B, A; загрузка счетчика: (В) ← (А)
LXI H, 8100; запоминание в (H+L) адреса начала
массива данных
SUB A; сброс аккумулятора: (А) ← 0
ADDN: ADD M ; прибавление элемента М+(А) → (A)
INX H; переход к следующему адресу
(H+L) ← (H+L+1)
DCR B; декремент счетчика: (В) ← (В-1)
JNZ, адрес ADDN; организация цикла, если не 0
DONE
LDA COUNT; загрузка содержимого
М (COUNT) → (A)
MOV B, A; организация счета в регистре В:
(В) ← (А)
LXI H;
NEWMX: MOV A, M; загрузка нового максимума
NEXTE: DCR B; декремент счетчика: (В) ← (В-1)
JNZ, адрес DONE; проверка окончания цикла: если 0,
то скачок на адрес метки DONE
INX H; (H+L) ← (H+L+1)
CMP M; сравнение с максимумом
JС, адрес NEWMX;
JМР, адрес NEXTE;
DONE
Литература
1. Г.И. Пухальский. Программирование микропроцессорных систем. Учебное пособие для Вузов – М. Политехника, 2002.
2. В.С. Ямпольский. Основы автоматики и электронно-вычислительной техники. – М.: Просвещение, 1991.
3. Л.Н. Ананченко, И.Е. Рогов. Составление алгоритмов и программ на языке «Ассемблер» для управления технологическими процессами: Метод. указания – Ростов-на-Дону: ДГТУ, 1993 г.
4. Л.Н. Ананченко. Набор команд микропроцессора КР580ИК80: Метод. указания – Ростов-на-Дону, РИСХМ, 1991.