48274 (Программное обеспечение встроенных систем управления на базе однокристальных микропроцессоров (МП)), страница 3
Описание файла
Документ из архива "Программное обеспечение встроенных систем управления на базе однокристальных микропроцессоров (МП)", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "контрольные работы и аттестации", в предмете "информатика, программирование" в общих файлах.
Онлайн просмотр документа "48274"
Текст 3 страницы из документа "48274"
Пример 1.3. Определение максимального из двух положительных чисел. При обработке сигналов часто встречается необходимость определения максимального из нескольких положительных чисел. Такие задачи возникают, например, при обнаружении полезных сигналов или при нахождении максимального значения сигнала при заданном интервале времени. Нахождение максимального из нескольких чисел сводится к последовательному определению максимального из двух чисел.
В системе команд МП имеется команда сравнения СМР, которая не изменяет содержимого аккумулятора, однако устанавливает триггер признака CY (перенос) в единичное состояние, если содержимое аккумулятора меньше содержимого регистра.
Рисунок 1.8 – Схема алгоритма нахождения большего из двух положительных чисел
Таблица 1.4 – Программа определения модуля числа
Метка | Мнемокод | Операнд | Адрес | Н-код | Комментарий | Vт |
MOV | A, E | 01F0 | 7B | Пересылка в аккумулятор | 5 | |
ORA | A | 01F1 | B7 | Определение знака числа | 4 | |
JP | M2 | 01F2 | F2 | Условный переход по положительному значению | 10 | |
01F3 | F8 | |||||
01F4 | 10 | |||||
CMA | A | 01F5 | 2F | Изменение знака числа | 4 | |
INR | A | 01F6 | 3C | 5 | ||
MOV | E, A | 01F7 | 5F | Пересылка в регистр Е | 5 | |
M2: | 10F8 |
Для определенности будем считать, что одно из чисел находится в аккумуляторе, а другое – в регистре В. Требуется большее число поместить в регистр В, а меньшее – в аккумулятор. Схема алгоритма показана на рис. 1.8, а программа в машинных кодах приведена в табл. 1.5.
Рисунок 1.9 – Схема алгоритма формирования временной задержки
Таблица 1.5 – Программа нахождения большего из двух положительных чисел
Метка | Мнемокод | Операнд | Адрес | Н-код | Комментарий | Vt |
CMP | B | 00A1 | B8 | Сравнение чисел | 7 | |
JC | M1 | 00А2 | DA | Переход на М1, если (А) <(В) | 10 | |
00А3 | А8 | |||||
00А4 | 00 | |||||
MOV | C, A | 00A5 | 4F | Обмен содержимого между аккумулятором и регистром B через регистр С | 5 | |
MOV | A, B | 00A6 | 7B | 5 | ||
MOV | B, C | 00A7 | 41 | 5 | ||
M1: | 00A8 |
Пример 1.1. Организация временной задержки длительностью 100мкс.
Программу, обеспечивающую такую задержку, оформим в виде подпрограммы, которую назовем 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Н), в которой должна быть расположена следующая за ней команда прикладной программы.
Псевдокомандой EQU можно любому символическому имени, используемому в программе, поставить в соответствие определенный операнд. Например, запись
PETEQU13
приводит к тому, что в процессе ассемблирования всюду, где встретится символическое имя PET, оно будет заменено числом 13.
Символические имена операндов, переопределяемых в процессе исполнения программы, определяются псевдокомандой SET:
ALFASET3
. . .
. . .
ALFASETALFA+1
Ассемблер MCS-51 позволяет определить символическое имя как адрес внутренних (псевдокоманда DATA), внешних (XDATA) данных или адрес бита (псевдокоманда BIT). Например, директива
ERROR_FLAGBIT25H.3
определяет символическое имя ERROR_FLAG как третий бит ячейки ОЗУ с адресом 25Н.
Псевдокоманда DB обеспечивает занесение в ПП константы, представляющей собой байт.
Псевдокомандой END программист дает ассемблеру указание об окончании трансляции.
В результате трансляции должна быть получена карта памяти программ, где каждой ячейке памяти поставлен в соответствие хранящийся в ней код.
В соответствии с форматом команд для представления их объектных кодов отводятся одна, две или три ячейки памяти программ.
Пример программы на языке ассемблера:
ORG801FH;Присвоение начального адреса для
;подпрограммы DELET (задержка)
COUNTEQUXXXXH;Присвоение символического имени
;значению XXXXH (количество циклов
;в подпрограмме для формирования
;задержки)
PUSHPSW;11 тактов. Сохранение в стеке
;программно доступные регистры
; (A, F, H, L)
PUSHH;11 тактов
LXIH,COUNT;10 т. Установка счетчика циклов в
;регистровой паре (H)(L)
CICL:DCXH;5т.Уменьшение счетчика циклов на 1
MOVA,L;4т. и проверка
ORAH;4т. на “нуль”
JNZCIC1;10т. If XXXX0 GOTO CICL
POPH;10т. Восстановление программно-
POPPSW;10т. доступных регистров перед
; выходом из подпрограммы
RET;10т. Выход
8 Ввод, редактирование, трансляция и отладка прикладных программ
Написанием текста программы заканчивается первый этап разработки прикладного программного обеспечения – "от постановки задачи к исходной программе" и начинается следующий – "от исходной программы к объектному модулю".
Для простых программ объектный код может быть получен вручную (ручная трансляция). Однако для более сложных программ требуются специальные средства автоматизации подготовки программ. Обычно такие средства используют большие емкости памяти и широкий набор периферийных устройств, в силу чего они не могут быть резидентными, а используются только на микроЭВМ.
В минимальный состав программного обеспечения кросс-средств входят:
системная программа для ввода исходного текста прикладной программы, его редактирования и записи на внешней носитель информации – так называемый редактор текстов;
программа-транслятор, обеспечивающая преобразование исходного текста прикладной программы в объектный модуль (ASM).
Более мощные кросс-средства предполагают наличие редактора внешних связей (LINK), позволяющего включать в программу модули, разработанные независимо друг от друга, и программу, обеспечивающую настройку перемещаемых программных модулей на абсолютные адреса (LOCATE).
Для ввода исходного текста прикладной программы необходимо вызвать редактор текстов, указав ему тип носителя, на котором будет создан исходный файл.
Для трансляции исходного текста программы необходимо вызвать транслятор, указав ему файл с исходным текстом, место размещения объектного кода, а также условия формирования и вывода листинга. После окончания трансляции при отсутствии синтаксических ошибок выдается сообщение
ASSEMBLY COMPLETE NO ERRORS
_
или сообщение
ASSEMBLY COMPLETE NNN ERRORS
_
с указанием числа ошибок (NNN) и номера последней ошибочной строки (LLL) при наличии синтаксических ошибок.
Все обнаруженные ошибки исправляются в исходном тексте прикладной программы (это относится и к ошибкам, обнаруженным на этапе отладки). Для этого необходимо вновь вызвать редактор текста и осуществить редактирование исходного текста программы, а затем выполнить повторную трансляцию.
Если исходный текст прикладной программы не имел внешних ссылок и содержал директиву ORG, то после успешного завершения трансляции этап разработки программного обеспечения "от исходной программы к объектному модулю" можно считать законченным.
Литература
-
Тавернье К. PIC-микроконтроллеры. Практика применения: Пер. с фр. -М: ДМКПресс, 2008. - 272 с.: ил. (Серия «Справочник»).
-
Борзенко А.Е. IBM PC: устройство, ремонт, модернизация. – 2-е изд. перераб. и доп. – М.: ТОО фирма «Компьютер Пресс», 2006. – 344с.: ил.
-
Цифровые интегральные микросхемы: Справ./М. И. Богданович, И.Н. Грель, В.А. Прохоренко, В.В. Шалимо.–Мн.: Беларусь, 2001. – 493 с.: ил.
-
ДСТУ 3008-95. Документация. Отчеты в сфере науки и техники. Структура и правила оформления.
-
Охрана труда в вычислительных центрах. Ю.Г. Собаров и др. – М.: Машиностроение, 2000. – 192с.