Контрольная работа: Программное обеспечение встроенных систем управления на базе однокристальных микропроцессоров (МП)
Программу, обеспечивающую такую задержку, оформим в виде подпрограммы, которую назовем DEL. Это символическое имя будем использовать в виде метки, указывающей начальный адрес подпрограммы. Схема алгоритма формирования временной задержки изображена на рис. 1.9, а программа помещена в табл. 1.6. Начальный адрес подпрограммы записан во втором и третьем байтах команды, с помощью которой происходит обращение к подпрограмме DEL. При выполнении подпрограммы в регистр В должно быть записано число циклов Х, которое вначале неизвестно. Содержимое регистра В уменьшается на единицу до тех пор, пока не станет равным нулю. При этом признак Z устанавливается в единичное состояние (Z=1) и происходит выход из цикла.
Подпрограмма неработоспособна до тех пор, пока не будет задано значение X.
Зная, какие команды используются в данной подпрограмме и время их выполнения, можно вычислить, сколько раз должен повториться циклический участок подпрограммы для обеспечения требуемой временной задержки.
Команды MVI B, X, CALL DEL и RET используется один раз. Если частота задающего генератора МП составляет 2МГц, каждый такт длится 0.5мкс. В этом случае время выполнения перечисленных команд составит 17мкс.
Для получения задержки времени, равной 100мкс, циклический участок программы должен выполняться столько раз, чтобы этот процесс завершился за 100-17=83мкс. Время выполнения команд DCR B и JNZ M1 составляет 2. 5+5=7. 5 мкс. Задержку 83мкс нельзя получить многократным повторением команд цикла, поскольку 83 не делится на 7.5 без остатка.
Если повторить циклический участок программы X = 10 раз, то получим временную задержку 75 мкс. Оставшиеся 835=8 мкс можно скомпенсировать введением подряд четырех команд NOP (К=4). Значение X=0A, соответствующее требуемому числу циклов, заносится во второй байт команды MVI B, X.
Таблица 1.6 – Программа формирования временной задержки длительностью 100мкс
Метка | Мнемокод, операнд | Адрес | Н-код | Комментарий | Vт |
CALL DEL | 01C0 | CD | Вызов подпрограммы формирования временной задержки | 17 | |
01С1 | 09 | ||||
01С2 | 0A | ||||
. . . | . . . . . . . . . . . . | . . . . | . . . . | . . . . . . . . . . . . . . . | . . . |
DEL: | MVI B, X | 0A09 | 06 | Запись в регистр В числа X=0A | 7 |
0A0A | 0A | ||||
M1: | DCR B | 0A0B | 05 | Уменьшение содержимого регистра В на 1 | 5 |
JNZ M1 | 0A0C | С2 | Повторить цикл, если результат не равен нулю | 105 | |
0A0D | 0B | ||||
0A0E | 0A | ||||
NOP | 0A0F | 00 | Пустые операции | 4 | |
NOP | 0A10 | 00 | 4 | ||
NOP | 0A11 | 00 | 4 | ||
NOP | 0A12 | 00 | 4 | ||
RET | 0A13 | C9 | Возврат к основной программе | 10 |
7 Программирование на языке ассемблера
При написании программ на языке ассемблера также используется мнемоническое представление команд, отражающее содержательный смысл выполняемой операции. Однако в этом случае необходимо помнить, что исходный текст программы на языке ассемблера должен иметь определенный формат.
Командная строка при этом разделяется на четыре поля:
поле «МЕТКА» | поле «КОД ОПЕРАЦИИ» | поле «ОПЕРАНДЫ» | Поле «КОММЕНТАРИИ» |
Поля могут отделяться друг от друга произвольным числом пробелов, но не менее одного.
Метка. В поле метки размещается символическое имя ячейки памяти, в которой хранится отмеченная команда или операнд. Метка представляет собой буквенно-цифровую комбинацию, начинающуюся с буквы. Используются только буквы латинского алфавита. Некоторые ассемблеры допускают использование в метках символа подчеркивания (_). Длина метки не должна превышать шесть символов. Метка завершается двоеточием (:).
Псевдокоманды ассемблера не преобразуются в двоичные коды, а потому не могут иметь меток. Исключение составляют псевдокоманды резервирования памяти и определения данных (DS, DB, DW). У псевдокоманд, осуществляющих определение символических имен, в поле метки записывается определяемое символическое имя, после которого двоеточие не ставится.
В качестве символических имен и меток не могут быть использованы мнемокоды команд, псевдокоманд и операторов ассемблера, а также мнемонические обозначения регистров и других внутренних блоков МП или МК.
Код операция. В этом поле записывается мнемоническое обозначение команды МП или МК или псевдокоманды ассемблера, которое является сокращением (аббревиатурой) полного английского наименования выполняемого действия. Например: МОV – movе – переместить, JМР – jump – перейти, DВ – define bуtе – определить байт.
Для всех МП и МК используется строго определенный и ограниченный набор мнемонических кодов. Любой другой набор символов, размещенный в поле операции, воспринимается ассемблером как ошибочный.
Операнды. В этом поле определяются операнды (или операнд), участвующие в операции. Команды ассемблера могут быть без-, одно- или двухоперандными. Операнды разделяются запятой (,).
Операнд может быть задан непосредственно или в виде его адреса (прямого или косвенного). Непосредственный операнд представляется числом. В некоторых МП он задается в команде.
ПРИМЕР:
MVIA,15H
LXIH,23BEH
ACI25
В МК семейства MCS 51 записывается с обязательным указанием префикса непосредственного операнда (#) (MOV A,#25 или с символическим именем: ADDC A,#OPER2). Адрес операнда может быть задан мнемоническим обозначением регистра (INC Rn; MOV A,D), символическим именем (MOV A,MEMORY). Указателем на косвенную адресацию может служить для одних МП буква М (MOV M,A; ADD M), для других префикс @ (MOV @Ri,2FH). Операндом может являться прямой адрес ячейки памяти (JMP 8324H; CALL 115BH; JNC 1F5AH), порта ввода/вывода (IN F9H, OUT BAH) или их символические имена (JMP LABEL; MOV A,P3).
Используемые в качестве операндов символические имена и метки должны быть определены, а числа представлены с указанием системы счисления, для чего используется суффикс (буква, стоящая после числа): В – для двоичной, Q – для восьмеричной, D – для десятичной и Н – для шестнадцатеричной. Число без суффикса по умолчанию считается десятичным.
Обработка выражений в процессе трансляции. Некоторые ассемблеры допускают использование выражений в поле операндов, значения которых вычисляются в процессе трансляции.
Выражение представляет собой совокупность символических имен и чисел, связанных операторами ассемблера. Операторы ассемблера обеспечивают выполнение арифметических ("+" – сложение, "-" – вычитание,* – умножение, / – целое деление) и логических (ОR – ИЛИ, АND – И, ХОR – исключающее ИЛИ) операций в формате 2-байтных слов.
Комментарий. Поле комментария может быть использовано программистом для текстового или символьного пояснения логической организации прикладной программы. Поле комментария полностью игнорируется ассемблером, а потому в нем допустимо использовать любые символы. По правилам языка ассемблера поле комментария начинается после точки с запятой (;).
Псевдокоманды ассемблера. Ассемблирующая программа транслирует исходную программу в объектные коды. Хотя транслирующая программа берет на себя многие из рутинных задач программиста, таких как присвоение действительных адресов, преобразование чисел, присвоение действительных значений символьным переменным и т.п., программист все же должен указать ей некоторые параметры: начальный адрес прикладной программы, конец ассемблируемой программы, форматы данных и т.п. Всю эту информацию программист вставляет в исходный текст своей прикладной программы в виде псевдокоманд (директив) ассемблера, которые только управляют процессом трансляции и не преобразуются в коды объектной программы.
Псевдокоманда ORG 10Н задает ассемблеру адрес ячейки памяти (10Н), в которой должна быть расположена следующая за ней команда прикладной программы.