Микропроцессоры

Система команд микроконтроллеров MCS-51

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

Реализована побитная, потетрадная (4 бита), побайтовая (8 бит) и 16-разрядная обработка данных. Микросхемы семейства MCS-51 - это 8-разрядные микропроцессоры, а это означает, что ПЗУ, ОЗУ, регистры специального назначения, АЛУ и внешние шины имеют байтовую организацию.

Двухбайтовые данные используются только регистром-указателем (DPTR) и счетчиком команд (PC).

В машинном коде команда занимает один, два или три байта в зависимости от типа адресации.

Команды выполняются за один, два или четыре (умножение и деление) машинных цикла.

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

MOV A, 35

символы MOV обозначают операцию копирования, второй операнд 35 определяет, что данные необходимо взять из 35 ячейки памяти, а первый операнд A определяет, что результат необходимо поместить в регистр – аккумулятор. При этом старое значение регистра – аккумулятора будет стЈрто.

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

Если операция требует для выполнения двух источников и одного приЈмника результата операции (например, команда сложения ADD или вычитания SUBB), то первый операнд является одновременно и источником и приЈмником результата операции. Например, в команде

ADD A, 35

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

В таблице 1.4 приведены инструкции, влияющие на установку флагов. В таблице 1.5 приведены обозначения и символы, используемые в системе команд.

Таблица 1.4

Мнемоника

Флаги

Мнемоника

Флаги

C

OV

AC

C

OV

AC

ADD

+

+

+

CLR C

0

   

ADDC

+

+

+

CPL C

+

   

SUBB

+

+

+

ANL C, bit

+

   

MUL

0

+

 

ANL C, /bit

     

DIV

0

+

 

ORL C, bit

+

   

DA

+

   

ORL C, /bit

+

   

RRC

+

   

MOV C, bit

+

   

RLC

+

   

CJNE

+

   

SETB C

1

           

Таблица 1.5

Обозначение Назначение
А аккумулятор
Rn регистры текущего выбранного банка регистров
R номер загружаемого регистра, указанного в команде
direct прямо адресуемая 8-битовая ячейка памяти данных
@Ri косвенно адресуемая 8-битовая ячейка внутреннего ОЗУ данных
date 8 8-битная константа, входящая в код операции (КОП).
date 16 16-битная константа, входящая в код операции (КОП).
date H старшие биты (15-8) 16-битной константы
date L младшие биты (7-0) 16-битной константы
adr 11 младшие 11-бит адреса
adr 16 полный 16-битный адрес
adr L младшие биты адреса
rel байт смещения с учетом знака
bit адрес бита

Систему команд микроконтроллера условно можно разбить на пять групп:

Арифметические команды

В наборе команд микроконтроллера имеются следующие арифметические операции:

Действия производятся над целыми числами без знака.

При операции умножения содержимое аккумулятора A умножается на содержимое регистра B, и результат размещается следующим образом: младший байт в регистре B, старший - в регистре А.

В случае выполнения операции деления целое от деления помещается в аккумулятор A, остаток - в регистр В.

Логические команды с байтовыми переменными.

Система команд ОМЭВМ позволяет реализовать логические операции

  • И (ANL),
  • ИЛИ (ORL),
  • ИСКЛЮЧАЮЩЕЕ ИЛИ (XRL).

Логические операции выполняются над аккумулятором или непосредственно над портами ввода/вывода.

Существуют логические операции, которые выполняются только на аккумуляторе:

  • сброс и инвертирование всех восьми разрядов A (CPL A; CLR A);
  • циклический сдвиг влево и вправо с учетом переноса и без (RR A; RRC A; RL A; RLC A);
  • обмен местами старшей и младшей тетрад внутри аккумулятора (SWAP A).

Команды пересылки данных.

Как было рассмотрено ранее, арифметические и логические команды могут быть выполнены только над содержимым регистра аккумулятора, поэтому исключительно важное значение в системе команд приобретают команды пересылки данных. С помощью этих команд можно скопировать содержимое любой ячейки памяти в регистр-аккумулятор или наоборот скопировать содержимое аккумулятора в любую ячейку памяти.

Любая ячейка 256- байтового блока внутреннего ОЗУ данных может быть выбрана с использованием косвенно-регистровой адресации через регистры указатели R0 и R1 (выбранного банка рабочих регистров), например:

MOV A, @R0             ;Скопировать число из ячейки памяти с адресом, хранящемся в R0, в аккумулятор
MOV @R1, A             ;Скопировать число из аккумулятора, в ячейку памяти с адресом, хранящемся в R1

Команды пересылки с прямой адресацией между ячейками памяти позволяют заносить содержимое порта в ячейку внутреннего ОЗУ или обмениваться содержимым ячеек внутреннего ОЗУ между собой без использования аккумулятора, например:

MOV 15, 25            ;Скопировать содержимое 25-й ячейки  в 15-ю ячейку

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

MOVC A, @A+DPTR         ;Скопировать символ в аккумулятор

Ячейка адресного пространства 64 Кбайт внешнего ОЗУ также может быть выбрана с использованием косвенно-регистровой адресации через регистр указатель данных DPTR, например:

MOVX A, @DPTR          ;Скопировать число из внешней ячейки памяти с адресом, ;хранящемся в DPTR, в аккумулятор

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

XCH A, R0.

Кроме того, любой бит с прямой адресацией может быть скопирован в бит переноса и наоборот:

MOV C, AdrBit

Битовые команды.

Каждый из отдельно адресуемых битов может быть установлен в 1, сброшен в 0, инвертирован или проверен. Могут быть реализованы переходы:

  • если бит установлен (содержит логическую 1);
  • если бит не установлен (содержит логический 0);
  • переход, если бит установлен со сбросом этого бита после выполнения команды (запись в этот бит 0);
  • бит может быть записан во флаг переноса или считан из флага переноса.

Между любым прямоадресуемым битом и флагом переноса могут быть произведены логические операции "И" или "ИЛИ", где результат заносится в разряд флага переноса.

Команды ветвления и передачи управления.

Команды 16-разрядных безусловных переходов и вызовов подпрограмм позволяют осуществить переход в любую точку адресного пространства памяти программ объемом до 64 Кбайт. Примеры команд:

LJMP Metka            ;Переход к команде, расположенной по адресу обозначенному меткой ‘Metka’
LCALL Podprogramma    ;Вызов подпрограммы по адресу, обозначенному меткой ‘Podprogramma’

Команды 11-разрядных переходов и вызовов подпрограмм позволяют сократить объем программы, но при этом обеспечивают переходы только внутри программного модуля 2 Кбайт. Эти команды принципиально могут приводить к необнаруживаемым транслятором ошибкам, когда программный модуль размещается на двух соседних 2 Кбайтовых сегментах памяти.

AJMP Metka            ;Переход к команде, расположенной по адресу обозначенному меткой ‘Metka’
ACALL Podprogramma    ;Вызов подпрограммы по адресу, обозначенному меткой ‘Podprogramma’

В системе команд имеются команды условных и безусловных переходов относительно начального адреса следующей команды в пределах от (РС)-127 до (РС)+127. Примеры команд:

SJMP Metka                   ;Переход к команде, расположенной по адресу обозначенному меткой ‘Metka’
JB P3.5, TstNxtUsl           ;Если на 6 выводе порта P3 нулевой потенциал,
  ACALL Podprogramma            ;то вызвать подпрограмму, обозначенную меткой ‘Podprogramma’
CJNE A, #5, TstNxtUsl        ;Если в аккумуляторе содержится число 5,
  ACALL Podprogramma            ;то вызвать подпрограмму, обозначенную меткой ‘Podprogramma’

Косвенно-регистровые переходы в системе команд ОМЭВМ обеспечивают ветвление относительно базового регистра (содержимого DPTR или РС) со смещением, находящимся в аккумуляторе А.

Способы адресации операндов.

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

Неявная адресация При неявной адресации регистр источник или регистр приЈмник подразумевается в самом коде операции. Например: RR A или DA A

Регистровая адресация используется для обращения к восьми рабочим регистрам выбранного банка рабочих регистров, а также для обращения к регистрам А, В, АВ (сдвоенному регистру), DPTR, и к флагу переноса С. Номер регистра записывается в трех младших битах команды.

Прямая байтовая адресация используется для обращения к ячейкам внутренней памяти (ОЗУ) данных (адреса 0:127) и к регистрам специального назначения (адреса 128:256). Адрес ячейки памяти помещается во второй байт команды.

Прямая битовая адресация используется для обращения к отдельно адресуемым 128 битам, расположенным в ячейках с адресами 20Н-2FH, и к отдельно адресуемым битам регистров специального назначения.

Косвенно-регистровая адресация используется для обращения к ячейкам внутреннего ОЗУ данных. В качестве регистров-указателей используются регистры R0, R1 выбранного банка регистров или DPTR. Косвенно - регистровая адресация используется также для обращения к внешней памяти данных. В этом случае с помощью регистров- указателей R0 и R1 (рабочего банка рабочих регистров) выбирается ячейка из блока 256 байт внешней памяти данных. Номер блока предварительно задается содержимым порта Р2. Если в качестве регистра - указателя используется 16 - разрядный указатель данных (DPTR), то можно выбрать любую ячейку внешней памяти данных объемом до 64 Кбайт. (В некоторых моделях микроконтроллеров семейства MSC-51 таким образом можно обращаться к внутренней памяти данных объемом более 256 байт). Косвенно- регистровая адресация по сумме: базовый регистр плюс индексный регистр (содержимое аккумулятора А) упрощает просмотр таблиц, записанных в памяти программ. Любой байт из таблицы может быть выбран по адресу, определяемому суммой содержимого DPTR или РС и содержимого А, например: MOV A, @A+PC или MOV A, @A+DPTR.

Непосредственная адресация позволяет выбрать из адресного пространства памяти программ константы, явно указанные в команде, например: MOV A, #114 (помещает в аккумулятор число 114) или MOV DPTR, #2048 (помещает в указатель данных число 2048).


[Назад] [Содержание] [Вперёд]