Контрольная работа: Программное обеспечение встроенных систем управления на базе однокристальных микропроцессоров (МП)

Таблица 1.2 – Программа сложения в шестнадцатеричных кодах

Мнемокод Адрес Н - код Vt
MOV A,B 0004 78 5
LXI H 0005 21 16
0006 8F
0007 00
ADD M 0008 86 7
HLT 0009 76 7
. . . . . . . . . . . . . . . . . . . . . . . . .
008F 17

Первая команда – пересылка содержимого регистра В в аккумулятор – является однобайтовой, имеет код операции. Код операции расположен в ПЗУ по адресу 0000 0000 0000 0100, который для данной программы является начальным.

Следующая команда – трехбайтовая, имеет код операции 00100001, представляющий первый байт команды. Второй и третий байты, расположенные в очередных ячейках ПЗУ, содержат соответственно младшую и старшую части адреса 1000 1111 0000 0000, передаваемые по этой команде в регистровую пару H и L.

Микропроцессор при выполнении программы последовательно обращается к ячейкам памяти и выполняет поочередно все команды. Напомним, что коды операций и операнды хранятся в памяти в одинаковом виде и их различение осуществляется микропрограммами выполнения команд, заложенными в МП. Последняя команда имеет код 01110110 и является командой останова (HLT).

В результате выполнения программы в аккумуляторе окажется записанным число 01111011.

Даже рассмотрение такой простейшей программы показывает, насколько неудобным и недостаточно наглядным является представление чисел в машинных двоичных кодах. Поэтому принято запись машинных кодов производить в шестнадцатеричной системе.

В табл. 1.2 приведен фрагмент той же самой программы, записанной в шестнадцатеричных кодах. Рядом с кодом операции показаны его мнемоническое изображение и наименования операндов, принятые в системе команд данного МП. Например, шестнадцатеричный код команды 78, имеющей мнемоническое обозначение MOV A,B, соответствует операции пересылки содержимого регистра В в аккумулятор А. В табл. 1.2 также указано число тактов Vt, необходимое для выполнения каждой команды. Для выполнения всей программы требуется 35 машинных тактов.

Практически удобнее программировать непосредственно в мнемокодах, а затем представлять шестнадцатеричные коды адресов и операндов, получающиеся после распределения памяти.

6 Программирование в мнемокодах

Наиболее удобным методом написания программ является использование мнемонических кодов, состоящих из аббревиатуры полного названия инструкции. В этом случае мнемокод отражает содержательный смысл выполняемой операции.

Пример 1.1. Организация счетчиков циклов. Схема алгоритма счета показана на рис. 1.6, а фрагмент программы приведен в табл. 1.3.

Рисунок 1.6 – Схема алгоритма счета циклов

Счетчиком служит один из РОН – регистр В. По команде MVI B, N в него заносится число N, определяющее количество повторяемых циклов. В данной программе N=16. Для определенности принято, что участок программы, который необходимо повторить 16 раз, начинается командой логической операции «ИСКЛЮЧАЮЩЕЕ ИЛИ» XRA A, расположенной по адресу 1002, и заканчивается командой пересылки из аккумулятора в регистр D: MOV D, A, расположенный по адресу 10А1. После каждого выполнения этого участка программы содержимое счетчика (регистра В) уменьшается на единицу посредством команды DCR B (адрес 10А2). До тех пор, пока содержимое регистра В отлично от нуля, признак Z имеет нулевое значение и программа переходит к выполнению команды, адрес 1002 который содержится во втором и третьем байтах команды JNZ (переход по отсутствию нуля). Указанный адрес отмечен в программе меткой М1, т.е. метка М1 является мнемоническим обозначением адреса 1002.

Таблица 1.3 – Программа счета циклов

Метка Мнемокод Операнд Адрес Н - код Комментарий Vt
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MVI B, 16 1000 06 Установка счётчика 7
1001 10 N=16 в (B)
M1: XRA A 1002 AF Обнуление признака переноса 4
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MOV D, A 10A1 57 Пересылка содержимого А в регистр D (D:=A) 5
DCR B 10A2 05 Уменьшение содержимого счётчика на 1 5
JNZ M1 10A3 C2 Переход по условию (N) ¹ 0 к ячейке памяти с адресом 1002 10
10A4 02
10A5 10
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Если в результате очередного вычитания единицы содержимое регистра В окажется равным нулю (Z=1), то программа перейдет к выполнению команды, расположенной за JNZ. Происходит выход из циклического участка программы. Поскольку регистр В имеет восемь двоичных разрядов, рассмотренная структура программы позволяет организовать счетчик от 1 до 255 циклов. При необходимости получения большого числа циклов для организации счетчика следует использовать регистровые пары (например, В и С). Загрузка такой пары осуществляется с помощью команды LXI B, а вместо команды DCR В необходимо использовать команду DCX B (декремент регистровой пары).

Пример 1.2. Определение модуля числа. При исследовании сигналов часто приходится оценивать погрешность измерения по модулю. Рассмотрим программу определения модуля числа, содержащую условный переход. В связи с тем, что отрицательные числа представляются в дополнительных кодах, при определении модуля нельзя ограничиться только отбрасыванием знака числа, информация о котором заключена в старшем бите. Если число положительное, то его надо умножить на -1. Знак можно определить, используя операцию маскирования или засылку старшего бита в триггер переноса с последующим его анализом. В данном случае эти операции нежелательны, так как сопровождаются изменением содержимого аккумулятора. Целесообразно применить команду логического сложения содержимого аккумулятора с самим собой. При этом содержимое аккумулятора не меняется, а флаги устанавливаются в соответствующие состояния. Условный переход выполняется по содержимому триггера знака S.

На рис. 1.7 изображена схема алгоритма определения модуля числа, находящегося в регистре Е. Программа работает следующим образом. Число из регистра Е пересылается в аккумулятор. В результате выполнения операции логического сложения аккумулятора с самим собой в триггер знака записывается старший бит числа. С помощью команды условного перехода осуществляется ветвление программы. Если S=0 (положительное число) не выполняется, то производится изменение знака числа и модуль числа из аккумулятора пересылается в регистр Е. Знак числа изменяется применением операции дополнения, заключающейся в инвертировании всех разрядов числа (команда CMA) c последующим прибавлением единицы к младшему разряду (команда INR A). Если условие S=0 выполняется (число положительное), то по условному переходу JM M2 три последние команды обходятся, содержимое регистра Е не меняется, а выполнение программы продолжается с адреса 01F8, соответствующего метке М2. Программа в машинных кодах с комментариями приведена в табл. 1.1.

Рисунок 1.7 – Схема алгоритма определения модуля числа

Пример 1.3. Определение максимального из двух положительных чисел. При обработке сигналов часто встречается необходимость определения максимального из нескольких положительных чисел. Такие задачи возникают, например, при обнаружении полезных сигналов или при нахождении максимального значения сигнала при заданном интервале времени. Нахождение максимального из нескольких чисел сводится к последовательному определению максимального из двух чисел.

В системе команд МП имеется команда сравнения СМР, которая не изменяет содержимого аккумулятора, однако устанавливает триггер признака CY (перенос) в единичное состояние, если содержимое аккумулятора меньше содержимого регистра.

Рисунок 1.8 – Схема алгоритма нахождения большего из двух положительных чисел

Таблица 1.4 – Программа определения модуля числа

Метка Мнемокод Операнд Адрес Н-код Комментарий
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

К-во Просмотров: 192
Бесплатно скачать Контрольная работа: Программное обеспечение встроенных систем управления на базе однокристальных микропроцессоров (МП)