МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«Московский политехнический университет» (московский политех)
Факультет машиностроения
Кафедра «Автоматика и управление»
Лабораторная работа №1
По дисциплине «Проектирование микропроцессорных систем управления»
Группа |
204-251 |
Бригада |
2 |
Студенты |
Антоненко А.С. Сагитова Л.С. Сагитова Н.С. Ширяев В.А. |
|
|
Преподаватель |
Палагута К.А. |
Москва 2021 Лабораторная работа №1. Микроконтроллер mc68hc908gp32: регистровая структура, способы адресации, команды пересылки
Цель работы: знакомство с интегрированной средой программирования, изучение регистровой структуры микроконтроллера, способов адресации и команд пересылки данных.
Теоретическое введение
Процессорный модуль CPU08, используемый в микроконтроллерах семейства 68HC08, выполняет набор из 90 команд с использованием 9 способов адресации.
Регистровая модель. Процессорный модуль CPU08 (рис. 1) содержит 8-разрядные аккумулятор A и регистр признаков CCR, 16-разрядные индексный регистр H:X, указатель стека SP и программный счетчик PC.
|
7 0 |
|
||||||||
|
A |
Аккумулятор A |
||||||||
15 8 |
7 0 |
|
||||||||
Н |
Х |
Индексный регистр Н:Х |
||||||||
15 0 |
|
|||||||||
РС |
Программный счётчик PC |
|||||||||
15 0 |
|
|||||||||
SP |
Указатель стека SP |
|||||||||
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
|
|
V |
1 |
1 |
H |
I |
N |
Z |
C |
Регистр признаков CCR |
Рис. 1. Регистровая модель процессора CPU08
Регистр CCR содержит значения следующих признаков:
C - признак переноса (принимает значение C=1 при возникновении переноса из старшего разряда результата);
Z - признак нуля (принимает значение Z=1 при нулевом результате);
N - признак знака (равен старшему разряду результата, при обработке чисел со знаком имеет значения N=0 при положительном результате, N=1 при отрицательном результате);
I - маска прерывания (при значении I=0 обработка прерываний разрешается, при I=1 – запрещается);
H - признак переноса между тетрадами (используется при операциях над двоично-десятичными числами).
V – признак переполнения при обработке чисел со знаком (принимает значение V=1, когда результат выходит за границы диапазона чисел +127…-128).
Программный счётчик PC содержит адрес очередной выполняемой команды. Максимальный объем адресуемой памяти для семейства 68HC08/908 составляет 64 Кбайт, при этом модели с меньшим размером памяти используют только часть адресуемого пространства. При запуске и перезапуске микроконтроллера (процедура RESET) в PC автоматически загружается адрес первой команды выполняемой программы (вектор начального запуска) из двух последних ячеек адресуемой памяти с адресами $FFFE-FFFF (старший байт PCh – младший байт PCl).
Указатель стека SP служит для адресации ячейки ОЗУ, являющейся вершиной стека. При запуске микроконтроллера (процедура RESET) в SP автоматически загружается значение $00FF, обеспечивая возможность использования в качестве стека ячеек ОЗУ и регистров, имеющих адреса в диапазоне $0000-FF. При дальнейшей работе процессора в качестве вершины стека может быть использована любая позиция адресуемой памяти в пределах имеющегося в данной модели ОЗУ данных.
Способы адресации. Микроконтроллер выполняет набор операций над операндами, размещёнными в регистрах A, X и памяти. Команды имеют длину от 1 до 3 байтов: первый байт содержит код операции, второй и третий байты обеспечивают адресацию операнда. Для выборки операнда используются следующие способы адресации:
- регистровая (операнд располагается в регистре A или X);
- индексная (адресом операнда служит содержимое регистра H:X);
- индексная со смещением (адрес операнда образуется сложением содержимого регистра H:X и 8- или 16-разрядного смещения, заданного во втором и третьем байте команды);
- индексная с пост-инкрементом (используется только в командах MOV и CBEQ - адресом операнда служит содержимое регистра H:X, которое после выполнения команды автоматически увеличивается на 1);
- индексная со смещением и пост-инкрементом (используется только в команде CBEQ - адрес операнда образуется сложением содержимого регистра H:X и 8-разрядного смещения, заданного во втором байте команды, после выполнения команды содержимое регистра H:X автоматически увеличивается на 1);
- индексная по указателю стека со смещением (адрес операнда образуется сложением содержимого регистра SP и 8- или 16-разрядного смещения, заданного во втором и третьем байте команды);
- прямая (8- или 16-разрядный адрес операнда задаётся во втором и третьем байте команды);
- непосредственная (8-разрядный операнд задаётся во втором байте команды);
- относительная (используется только в командах ветвления - адрес команды образуется сложением текущего содержимого PC и заданного во втором байте команды 8-разрядного смещения, которое является числом со знаком).
При прямой адресации с 8-разрядным адресом обращение возможно только к 256 начальным позициям адресного пространства (см. рис.2), в котором располагаются регистры интерфейсных и периферийных модулей и часть ОЗУ. При индексной адресации смещение является числом без знака. Индексная адресация и прямая адресация с 16-разрядным адресом позволяют обращаться к любой позиции адресного пространства, однако при этом необходимо, чтобы значение адреса не превышало $FFFF. При относительной адресации возможен переход к командам, расположенным в пределах 127 позиций ниже или выше очередной команды программы.
В набор команд входят безадресные и одноадресные команды. Регистровая адресация задаётся указанием имени соответствующего регистра A, X в мнемокоде команды, поэтому команды с такой адресацией являются безадресными. В одноадресных командах задаётся адрес используемого операнда или размещения результата. В таблицах после мнемокода этих команд указывается символ (opr), который при записи на языке Ассемблера заменяется символом, определяющим способ адресации:
$addr8 или $addr16 – 8- или 16-разрядное значение адреса в шестнадцатиричной форме при прямой адресации;
X – при индексной адресации;
X+ - при индексной адресации с пост-инкрементом;
d8, X или d16, X – при индексной адресации со смещением (d8, d16 – 8- или 16-разрядное смещение);
d8, X+ - при индексной адресации с пост-инкрементом и смещением (d8 – 8-разрядное смещение);
d8, SP или d16, SP – при индексной адресации по указателю стека со смещением (d8, d16 – 8- или 16-разрядное смещение).
Адресуемый таким образом операнд, выбираемый из ячейки памяти, обозначается символом M. При непосредственной адресации символ (opr) заменяется на #Im - значение операнда Im с префиксом #.
Выполняемые микроконтроллером команды делятся на группы команд пересылки, арифметических и логических операций, сдвигов, битовых операций и установки признаков, управления программой и процессором. В данной работе изучается выполнение команд пересылки с различными способами адресации операндов.
Команды пересылки (табл. 1) осуществляют пересылку операндов между регистрами и ячейками памяти. Команды LDA, LDX, производящие загрузку операнда в регистры A, X, используют все способы адресации, кроме относительного и индексного с пост-инкрементом. При записи содержимого регистров A, X в память командами STA, STX не используется также непосредственная адресация. Команда LDHX позволяет записать в индексный регистр H:X двухбайтовый непосредственный операнд #Im, который содержится во втором и третьем байте команды, или загрузить в этот регистр содержимое двух рядом расположенных ячеек памяти. Команда STHX производит запись содержимого H:X в две рядом расположенные ячейки памяти. При обращении к памяти в командах LDHX, STHX задается адрес первой ячейки памяти с помощью 8-разрядной прямой адресации.
Команда MOV обеспечивает пересылку содержимого между двумя ячейками памяти. При этом возможны четыре варианта выполнения команды:
MOV #Im, addr8 - пересылка непосредственного операнда Im в прямо адресуемую ячейку памяти;
MOV addr8-s, addr8-d - пересылка между двумя прямо адресуемыми ячейками памяти: источником (адрес addr8-s) и приёмником (адрес addr8-d);
MOV addr8, X+ - пересылка содержимого прямо адресуемой ячейки в ячейку, адресуемую с помощью регистра H:X, после пересылки производится инкремент содержимого H:X;
MOV X+, addr8 - пересылка содержимого ячейки, адресуемой с помощью регистра H:X, в прямо адресуемую ячейку памяти; после пересылки производится инкремент содержимого H:X.
Во всех вариантах команды MOV используется только 8-рязрядная прямая адресация.
Таблица 1. Команды пересылки.
Мнемокод |
Команда |
Операция |
LDA (opr) |
Загрузка A |
M A |
LDX (opr) |
Загрузка X |
M X |
LDHX (opr) |
Загрузка H:X |
M:M H:X |
STA (opr) |
Запись A в память |
A M |
STX (opr) |
Запись X в память |
X M |
STHX (opr) |
Пересылка H:X в память |
H:X M:M |
MOV (opr),(opr) |
Пересылка «память-память» |
M1 M2 |
TAX |
Пересылка A в X |
A X |
TXA |
Пересылка X в A |
X A |
TAP |
Пересылка A в CCR |
A CCR |
TPA |
Пересылка CCR в A |
CCR A |
TSX |
Пересылка SP+1 в H:X |
SP+1 H:X |
TXS |
Пересылка H:X-1 в SP |
H:X -1 SP |
CLR (opr) |
Запись 0 в M |
$00 M |
CLRA |
Запись 0 в A |
$00 A |
CLRX |
Запись 0 в X |
$00 X |
CLRH |
Запись 0 в H |
$00 H |
NSA |
Перестановка тетрад в A |
(A7-4) <-> (A3-0) |
PSHA |
Запись A в стек |
A (SP), SP-1 SP |
PSHH |
Запись H в стек |
H (SP), SP-1 SP |
PSHX |
Запись X в стек |
X (SP), SP-1 SP |
PULA |
Загрузка A из стека |
SP+1 SP, (SP) A |
PULH |
Загрузка H из стека |
SP+1 SP, (SP) H |
PULX |
Загрузка X из стека |
SP+1 SP, (SP) X |
Команды TAX, TXA выполняют пересылку операндов между регистрами A и X. Команды TAP и TPA позволяют соответственно считать в аккумулятор содержимое регистра признаков CCR для последующего анализа или сохранения и загрузить в этот регистр новое содержимое из аккумулятора.
К этой же группе относятся команды CLRA, CLRX, CLRH, CLR (opr), производящие запись 0 в регистры A, X, H и ячейку памяти. В команде CLR (opr) могут использоваться следующие способы адресации: индексная, индексная по указателю стека с 8-разрядным смещением или прямая с 8-разрядным адресом.
Команда NSA меняет местами старшую (биты A7-4) и младшую (биты A3-0) тетрады содержимого аккумулятора.
Отдельную подгруппу составляют команды сохранения в стеке содержимого регистров A, H, X и загрузки этих регистров из стека. Команды сохранения PSHA, PSHH, PSHX пересылают содержимое соответствующих регистров в ячейку памяти, адресуемую содержимым регистра SP, затем содержимое этого регистра уменьшается на 1, адресуя следующую свободную ячейку стека. Команды загрузки увеличивают на 1 содержимое SP, адресуя верхнюю заполненную ячейку стека, после чего содержимое ячейки загружается в соответствующий регистр.
Общее задание:
Записать по адресу $30 код $7C, по адресу $40 код $D4, по адресу $41 код $3E. Загрузить и выполнить программу.