Смекни!
smekni.com

Аппаратное и программное обеспечение простых микропроцессорных систем (стр. 2 из 2)

CALL, TIME – 17 тактов – 8,5 мкс;

MVIB, X – 7 тактов – 3,5 мкс;

DCRB – 5 тактов – 2,5 мкс;

JNZ, адрес COUNT – 10 тактов – 5,0 мкс;

RET – 10 тактов – 5,0 мкс.

Таким образом, однократно исполняемые команды (CALL, MVI, RET) в этой подпрограмме требуют 17 мкс (8,5+3,5+5,0). Следовательно, для получения требуемой задержки в 250 мкс необходимо команды DCRB и JNZ, COUNT столько раз, чтобы время их исполнения составило 233 мкс, т.е. (250–17). Однако время выполнения этой пары команд составляет (2,5+5,0). Поэтому, если принять Х=31, возможно получение временной задержки 232,5 мкс.

Если точность подпрограммной реализации временной задержки длительностью 250 мкс с погрешностью – 0,5 мкс удовлетворяет условиям задачи, то на этом разработка программы заканчивается.

Исходя из приведенного расчета, запишем текст подпрограммы 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; запись начального адреса

8100 → (H+L)

MVIC, C, 00; счетчик = 0

SAVE: IN, NN; ввод данных из порта в А

MOVM, A; перенос данных А → ячейку ОЗУ,

адрес которой в (H+L)

INXH; (H+L) = (H+L+1)

INRC; счетчик = счетчик+1

SUI, ETX; проверка терминатора

JNZ, адрес SAVE; продолжение сбора, если не 0

DONE

Если число слов данных известно и хранится в ячейке с адресом 81N0, то программа сбора данных будет иметь вид:

LXIH, 8100;

LDA, 81N0; пересылка содержимого 81N0 → (A)

MOVC, A; счетчик = длина массива: А → (С)

SAVE: IN, NN;

MOV M, A;

INXH;

DCRC; счетчик = счетчик-1

JNZ, адрес SAVE; продолжение сбора, если не 0

DONE

Рассмотрим несколько примеров обработки массива данных.

LDACOUNT; загрузка содержимого М 8200

(COUNT) → (A)

MOVB, A; загрузка счетчика: (В) ← (А)

LXIH, 8100; запоминание в (H+L) адреса начала

массива данных

SUBA; сброс аккумулятора: (А) ← 0

ADDN: ADDM ; прибавление элемента М+(А) → (A)

INXH; переход к следующему адресу

(H+L) ← (H+L+1)

DCRB; декремент счетчика: (В) ← (В-1)

JNZ, адрес ADDN; организация цикла, если не 0

DONE

LDACOUNT; загрузка содержимого

М (COUNT) → (A)

MOVB, A; организация счета в регистре В:

(В) ← (А)

LXIH;

NEWMX: MOVA, M; загрузка нового максимума

NEXTE: DCRB; декремент счетчика: (В) ← (В-1)

JNZ, адрес DONE; проверка окончания цикла: если 0,

то скачок на адрес метки DONE

INXH; (H+L) ← (H+L+1)

CMPM; сравнение с максимумом

JС, адрес NEWMX;

JМР, адрес NEXTE;

DONE

Литература

1. Г.И. Пухальский. Программирование микропроцессорных систем. Учебное пособие для Вузов – М. Политехника, 2002.

2. В.С. Ямпольский. Основы автоматики и электронно-вычислительной техники. – М.: Просвещение, 1991.

3. Л.Н. Ананченко, И.Е. Рогов. Составление алгоритмов и программ на языке «Ассемблер» для управления технологическими процессами: Метод. указания – Ростов-на-Дону: ДГТУ, 1993 г.

4. Л.Н. Ананченко. Набор команд микропроцессора КР580ИК80: Метод. указания – Ростов-на-Дону, РИСХМ, 1991.