Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2011_Микроконтроллер_ST7_2

.pdf
Скачиваний:
21
Добавлен:
23.02.2015
Размер:
591.76 Кб
Скачать

зование регистров X и Y для временного хранения данных. В некоторых командах содержимое индексных регистров может быть операндом или одним из операндов. Индексные регистры неравнозначны. Команды, использующие регистр X, входят в основную сетку команд. Команды, использующие регистр Y, входят в дополнительную сетку команд, которая формируется путем добавления перед первым байтом команды специального префиксного байта (префикса), который удлиняет команду на один байт. Это утверждение справедливо при любой адресации данных, кроме косвенной. Команды с косвенной адресацией формируются на основе команд основной сетки путем добавления специального префиксного байта косвенной адресации. Команды с косвенной адресацией, использующие регистр X, и команды с косвенной адресацией, использующие регистр Y, имеют одинаковую длину и отличаются только префиксами. При переходе к подпрограмме обработки прерываний содержимое регистра X автоматически сохраняется в стеке, а содержимое регистра Y – не сохраняется. Если содержимое регистра Y необходимо сохранить в стеке, то это надо сделать программным путем в подпрограмме обработки прерывания. Системный сброс не влияет на состояние индексных регистров.

 

 

 

 

 

7

 

0

Аккумулятор A

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

7

 

0

Индексный регистр X

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

7

 

0

Индексный регистр Y

 

 

 

 

 

 

 

 

 

 

 

15

 

 

 

8 7

 

0

Программный счетчик PC

 

 

PCH

 

 

 

 

PCL

 

15

 

 

 

8 7

 

0

Указатель стека SP

0

0

0

0

0

0

0

1

1

 

 

7 0

1 11 H I N ZC Регистр признаков СС Рис. 3

Программный счетчик PC предназначен для хранения адреса очередной выполняемой команды. После выполнения команды содержимое программного счетчика автоматически изменяется и указывает на начальный адрес следующей команды. При переходе к подпрограммам содержимое программного счетчика PC автоматически сохраняется в стеке: сначала – младший байт PCL, а затем – старший байт PCH. Шестнадцать разрядов программного счетчика обеспечивают доступ к 64 Kb памяти. После системного сброса в программный счетчик загружается адрес первой выполняемой команды, который размещается в двух смежных ячейках

11

памяти, адрес которых указан в ячейках памяти с адресами FFFEh (старший байт адреса) и FFFFh (младший байт адреса).

Шестнадцатиразрядный указатель стека SP служит для хранения адреса первой свободной ячейки памяти стека. В микроконтроллерах семейства ST7 используется так называемый перевернутый стек, когда запись в стек производится в сторону уменьшения адресов ячеек памяти. Размер стека и его размещение в памяти зависит от типа микроконтроллера. В микроконтроллерах подсемейства ST7Lite2 стек занимает 128 байт с адресами от 0180h до 01FFh [11]. Поскольку для адресации к 128 ячейкам достаточно 7 младших разрядов указателя стека, то старшие 9 разрядов указателя стека SP аппаратно устанавливаются в состояние, показанное на рис. 3. После системного сброса или выполнения команды RSP (reset stack pointer) указатель стека устанавливается в начальное состояние (в микроконтроллерах подсемейства ST7Lite2 – 01FFh).

В 8-разрядном регистре признаков CC хранятся пять признаков результата операции (рис. 3):

C – признак переноса. Принимает значение C = 1, если в результате выполнения операции был перенос или заем. В противном случае C = 0;

Z – признак нуля. При нулевом результате операции Z = 1;

N – признак знака. Принимает значение старшего разряда результата, который при обработке чисел со знаком содержит знак результата операции: N = 0 при положительном результате и N = 1 при отрицательном результате;

I– маска прерывания. При I = 1 прерывания запрещены, а при I = 0 – разрешены. После системного сброса или при переходе к подпрограмме обработки прерывания автоматически устанавливается значение I = 1. Имеется возможность установить или сбросить маску прерывания программным путем (команды SIM и RIM соответственно);

H – признак переноса между тетрадами (полубайтами). Этот признак принимает значение H = 1, если был перенос из младшей тетрады в старшую. Формируется командами сложения ADD и ADC. Командами умножения MUL сбрасывается в ноль. Используется при обработке чисел в двоично-десятичном формате.

Системный сброс не влияет на признаки C, Z, N, H.

1.4.СПОСОБЫ АДРЕСАЦИИ

Воригинальной документации на микроконтроллеры семейства ST7

[12]выделяется 17 способов адресации:

1.неявная (inherent addressing mode);

2.непосредственная (immediate addressing mode);

3.короткая прямая (short direct addressing mode);

12

4.длинная прямая (long direct addressing mode);

5.индексная без смещения (no offset indexed addressing mode);

6.индексная прямаяс коротким смещением (short indexed addressing mode);

7.индексная прямаяс длинным смещением (longindexed addressing mode);

8.короткая косвенная (short indirect addressing mode);

9.длинная косвенная (long indirect addressing mode);

10.косвенно-индексная с коротким смещением (short indirect indexed addressing mode);

11.косвенно-индексная с длинным смещением (long indirect indexed addressing mode);

12.битовая прямая (bit direct addressing mode);

13.битовая косвенная (bit indirect addressing mode);

14.прямая относительная (relative direct addressing mode);

15.косвенная относительная (relative indirect addressing mode);

16.битовая прямая относительная (bit direct relative addressing mode);

17.битовая косвенная относительная (bit indirect relative addressing mode).

При неявной адресации в команде нет прямых указаний на место

нахождения операнда. Адрес операнда подразумевается самим кодом операции. Надо отметить, что классификация команд и способов адресации, принятая в фирме STMicroelectronics, существенно отличается от общепринятой в русскоязычной литературе по вычислительной технике. Судя по документации фирмы STMicroelectronics [12], под способами адресации понимаются способы указания места нахождения операнда только в памяти. Поэтому к неявной адресации отнесены все команды, операнды которых располагаются не в памяти. В русскоязычной литературе команды, операнды которых располагаются в регистрах, считают командами с регистровой адресацией [7–12]. В эту же группу команд включены безадресные команды [12], которые обычно не соотносят с каким либо способом адресации. К командам с неявной адресацией отнесены также команды работы со стеком, которые обычно выделяют в отдельную группу команд со стековой адресацией [14,18].

При непосредственной адресации операнд является частью команды и размещается во втором байте команды сразу за кодом операции (рис. 4). Стрелка на рис. 4 указывает направление увеличения адресов ячеек памяти. Признаком непосредственной адресации служит символ # (решетка) перед операндом. Непосредственная адресация удобна для хранения разного рода констант. Команды с непосредственной адресацией компактны и быстры.

При прямой адресации адресная часть команды является исполнительным адресом обращения к памяти. Возможны два варианта прямой адресации: короткая прямая адресация и длинная прямая адресация.

13

Память

1-й байт ком-ды

Операнд

Рис. 4

При короткой прямой адресации байт адреса содержится во втором байте команды (рис. 5) и обеспечивает доступ только к первой странице памяти с диапазоном адресов от 0000 до 00FF.

Память

 

 

Память

 

 

 

 

 

1-й байт ком-ды

 

Байт адреса

 

Операнд

 

 

 

 

 

 

 

 

 

Рис. 5

При

длинной

прямой

адресации два байта адреса содержатся

во втором

и третьем

байтах

команды (рис. 6) и обеспечивают доступ

к любой ячейки памяти полного адресного пространства (диапазон адре-

сов от 0000 до FFFF).

Память

Память

1-й байт ком-ды

Ст. байт адреса Операнд Мл. байт адреса

Рис. 6

В командах с индексной адресацией без смещения исполнительный адрес обращения к памяти находится в одном из индексных регистров X или Y (рис. 7). Этот способ адресации обеспечивает доступ только к первой странице памяти.

Память

Индексный регистр

Байт адреса

Операнд

Рис. 7

14

При индексной прямой адресации с коротким смещением исполнительный адрес обращения к памяти определяется как результат суммирования однобайтового смещения, размещенного во втором байте команды, и содержимого одного из индексных регистров X или Y (рис. 8). Такой способ адресации обеспечивает доступ к ячейкам памяти в диапазоне адресов от 0000 до 01FE. Индексная адресация со смещением удобна при организации доступа к массиву данных. При этом смещение задает начальный адрес массива, а индекс – адрес элемента в массиве.

Индексный регистр

Индекс

Память

Память

+ Операнд

1-й байт ком-ды

Байт смещения

Рис. 8

При индексной прямой адресации с длинным смещением исполнительный адрес обращения к памяти определяется суммированием двухбайтового смещения, размещенного во втором и третьем байтах команды, и содержимого одного из индексных регистров X или Y (рис. 9). В этом случае обеспечивается доступ к любой ячейки памяти полного адресного пространства (диапазон адресов от 0000 до FFFF).

Индексный регистр

Индекс

Память

Память

+ Операнд

1-й байт ком-ды

Ст. байт смещ.

Мл. байт смещ.

Рис. 9

При короткой косвенной адресации адресная часть команды содержит указатель (адрес) ячейки памяти, в которой размещен байт адреса операнда (рис. 10). Такой способ адресации обеспечивает доступ только к первой странице памяти.

15

Память

 

 

 

 

 

 

Память

Память

Префикс

 

 

 

 

1-й байт ком-ды

 

 

 

 

Указатель

 

Адрес

 

Операнд

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 10

При длинной косвенной адресации адресная часть команды содержит указатель (адрес) на две последовательно расположенные ячейки памяти, в которых размещены два байта адреса операнда (рис. 11). Такая адресация обеспечивает доступ к любой ячейки памяти полного адресного пространства (диапазон адресов от 0000 до FFFF).

Память

 

 

 

 

 

Память

 

 

 

 

 

 

Префикс

 

 

Память

 

 

 

1-й байт ком-ды

 

Ст. байт адреса

 

 

 

 

 

Указатель

 

 

 

 

 

Операнд

 

 

Мл. байт адреса

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 11

В командах с косвенно-индексной адресацией с коротким смещением адресная часть команды содержит указатель (адрес) ячейки памяти, в которой размещен байт смещения. Исполнительный адрес обращения к памяти формируется суммированием байта смещения и содержимого одного из индексных регистров X или Y (рис. 12). Такой способ адресации

обеспечивает доступ к ячейкам памяти

в диапазоне

адресов от 0000

до 01FE.

 

 

 

 

 

 

 

 

 

 

Индексный регистр

 

 

 

 

 

 

 

 

 

 

 

 

 

Память

 

 

Память

 

Индекс

 

 

 

 

 

 

+

 

 

 

 

Память

 

Операнд

 

 

 

 

 

 

 

Префикс

 

 

 

 

 

 

 

 

 

 

1-й байт ком-ды

 

 

 

 

 

 

 

 

 

Указатель

 

Байт смещения

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 12

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

16

смещения. Исполнительный адрес обращения к памяти формируется суммированием двухбайтового смещения и содержимого одного из индексных регистров X или Y (рис. 13). При таком способе адресации обеспечивается доступ к любой ячейки памяти полного адресного пространства (диапазон адресов от 0000 до FFFF).

 

Индексный регистр

 

 

 

Память

 

 

 

 

 

Память

 

Индекс

 

 

 

 

 

 

 

 

 

Память

+

 

 

 

 

Префикс

 

Операнд

 

 

 

1-й байт ком-ды

 

 

 

 

 

 

Указатель

 

Ст. байт смещ.

 

 

 

 

 

 

 

 

 

Мл. байт смещ.

Рис. 13

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

Относительная адресация используется только в командах передачи управления. Возможно два варианта относительной адресации: прямая относительная адресация и косвенная относительная адресация.

При прямой относительной адресации исполнительный адрес формируется путем сложения начального адреса следующей команды (содержимое программного счетчика) и однобайтного смещения, заданного во втором байте команды перехода (рис. 14). Байт смещения интерпретируется как число со знаком, поэтому переход возможен в пределах 127 позиций выше и ниже текущего содержимого программного счетчика.

Программный счетчик

Начальный адрес след. команды

 

Память

Память

 

+

Команда

1-й байт ком-ды

Байт смещения

Рис. 14

17

При косвенной относительной адресации адресная часть команды содержит указатель (адрес) ячейки памяти, в которой размещен байт смещения. Исполнительный адрес формируется путем сложения начального адреса следующей команды (содержимое программного счетчика) и однобайтного смещения (рис. 15). Байт смещения интерпретируется как число со знаком, поэтому переход возможен в пределах 127 позиций выше и ниже текущего содержимого программного счетчика.

Программный счетчик

Начальный адрес след. команды

Память

 

 

Память

 

 

 

+

 

 

 

 

 

 

 

Память

Команда

Префикс

 

 

 

 

 

1-й байт ком-ды

 

 

 

 

 

 

 

 

 

Указатель

Байт смещения

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 15

1.5. СИСТЕМА КОМАНД

Система команд микроконтроллеров семейства ST7 включает 63 инструкции языка ассемблера [11,12] (табл. 1). Поскольку многие инструкции могут быть реализованы в различных вариантах адресации, то полная система команд включает 513 машинных команд (табл. 2). Длина команды может быть от одного до четырех байт. В табл. 2 использованы следующие обозначения:

MS – старший байт адреса или смещения;

LS – младший байт адреса или смещения;

XX – содержимое байта может быть любым.

В колонке «Ц» табл. 2 указано количество циклов в команде. Рис. 16 иллюстрирует выполнение команд сдвига.

Основная сетка команд задается первым байтом команды и содержит 226 команд из 256 возможных (табл. 3), т. е часть кодов основной сетки не используется. В основную сетку не входят команды, использующие индексный регистр Y (за исключением команды пересылки содержимого регистра Y в регистр X) и команды с косвенной адресацией. Расширение системы команд в микроконтроллерах семейства ST7 достигается за счет введения трех префиксных байтов (префиксов), которые предшествуют

18

первому байту команды и переопределяют смысл команд основной сетки. Коды префиксов не совпадают с кодами команд основной сетки.

 

C

 

7

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

C7 0

C7 00

7 0C

07 0C

RLC – Rotate left logical through C

Циклический сдвиг влево через бит переноса

RRC – Rotate right logical through C

Циклический сдвиг вправо через бит переноса

SLA – Shift left arithmetic. SLL – Shift left logical

Сдвиг влево арифметический (логический)

SRA – Shift right arithmetic

Сдвиг вправо арифметический

SRL – Shift right logical

Сдвиг вправо логический

Рис. 16

Префикс PDY (код 90h) заменяет в командах основной сетки индексный регистр X на индексный регистр Y. Префикс PDY расширяет основную сетку команд на 100 команд (табл. 4).

Префикс PIX (код 92h) заменяет в командах основной сетки прямую адресацию на косвенную. В командах с индексной адресацией используется только регистр X. Префикс PIX расширяет основную сетку команд на 137 команд (табл. 5).

Префикс PIY (код 91h) заменяет в командах основной сетки индексный регистр X на индексный регистр Y и прямую адресацию заменяет на косвенную, т. е действие префикса PIY эквивалентно одновременному действию префиксов PDY и PIX. В командах с индексной адресацией используется только регистр Y. Префикс PIY расширяет основную сетку команд на 50 команд (табл. 6).

19

Таблица 1

Инструкции языка ассемблера микроконтроллеров семейства ST7

Инст-

Приемник

Источник

Операция

Описание

рукция

(dst)

(src)

 

 

 

 

 

 

 

 

 

 

 

 

ADC

A

M

A A+M+C

Сложение с учетом переноса

ADD

A

M

A A+M

Сложение

AND

A

M

A A&M

Логическое И

BCP

A

M

{N,Z} A & M

Битовое тестирование

BRES

M

 

b 0

Установка заданного бита в 0

BSET

M

 

b 1

Установка заданного бита в 1

BTJF

M

 

 

Проверка заданного бита

 

 

 

 

и переход по относительному

 

 

 

 

адресу, если b=0

BTJT

M

 

 

Проверка заданного бита

 

 

 

 

и переход по относительному

 

 

 

 

адресу, если b=1

CALL

 

 

 

Безусловный переход к под-

 

 

 

 

программе по абсолютному

 

 

 

 

адресу

CALLR

 

 

 

Безусловный переход к под-

 

 

 

 

программе по относительно-

 

 

 

 

му адресу

CLR

A,X,Y,M

 

dst $00

Запись 0

CP

A,X,Y

M

{N,Z,C} dst – M

Сравнение

CPL

A,X,Y,M

 

dst FF – dst

Логическая инверсия

DEC

A,X,Y,M

 

dst dst – 1

Декремент

HALT

 

 

 

Переход в режим останова

INC

A,X,Y,M

 

dst dst + 1

Инкремент

IRET

 

 

CC,A,X,PC STACK

Возврат из прерывания

JP

 

 

PC M

Безусловный переход

 

 

по абсолютному адресу

 

 

 

 

JRA

 

 

PC PC + RA

Безусловный переход

 

 

по относительному адресу

 

 

 

 

JRC

 

 

PC PC+ RA if C=1

Переход по относительному

 

 

адресу, если C=1

 

 

 

 

JREQ

 

 

PC PC+ RA if Z=1

Переход по относительному

 

 

 

 

адресу, если Z=1

JRF

 

 

PC PC+rel if false

Отсутствие операций

JRH

 

 

PC PC+RA if H=1

Переход по относительному

 

 

адресу, если H=1

 

 

 

 

 

 

 

 

Переход по относительному

JRIH

 

 

PC PC+ RA if IL =1

адресу, если линия прерыва-

 

 

 

 

ния (IL) в 1

 

 

 

 

Переход по относительному

JRIL

 

 

PC PC+ RA if IL =0

адресу, если линия прерыва-

 

 

 

 

ния в 0

 

 

 

20