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

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

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

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

В машинном коде команда занимает один, или два байта в зависимости от типа команды. Команды выполняются за один или два машинных цикла. При этом большинство команд выполняются за один машинный цикл длительностью 2,5 мкс (при 6 МГц кварцевом резонаторе).

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

MOV A, R2

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

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

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

ADD A, R1

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

В таблице 1 приведены инструкции, влияющие на установку флагов.

Таблица 1

Мнемоника

Флаги

C

AC

F0

F1 TF BS DBF

ADD, ADDC

+

+

-

- - - -

DA

+

+

-

- - - -

CLR C

0

-

-

- - - -

CPL C

+ - - - - - -

CLR F0

-

-

0

- - - -
CPL F0 - - + - - - -

CLR F1

-

-

-

0 - - -
CPL F1

-

-

-

+ - - -
JTF -  - - - 0 - -

RRC

+ - - - - - -
RLC + - - - - - -

MOV A, PSW

+ + + - - + -

RETR

+ + + - - + -

SEL MB0, SEL MB1

- - - - - - +

SEL RB0, SEL RB1

- - - - - + -

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

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

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

Действия производятся над целыми числами без знака. Команды сложения ADD позволяют сформировать перенос в следующий разряд. Команды сложения с учЈтом знака переноса позволяют выполнять многобайтное сложение. Вычитание может быть реализовано переводом одного из операндов в дополнительный код с последующим выполнением операции суммирования. Более сложные операции такие как умножение или деление могут быть реализованы только программным способом.

Логические команды.

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

  • И ( 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

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

   MOVP A, @A          ;Скопировать символ из первой страницы памяти программ в аккумулятор
   MOVP3 A, @A         ;Скопировать символ из третьей страницы памяти программ  в аккумулятор

Ячейка адресного пространства 256 байт внешнего ОЗУ также может быть выбрана с использованием косвенно-регистровой адресации через регистры R0 или R1, например:

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

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

XCH A, R0.

Для работы с параллельными портами используется отдельные команды пересылки данных IN и OUTL:

   IN A, P0                ;Скопировать число из порта P0, в аккумулятор
   OUTL P1, A              ;Скопировать число из аккумулятора, в порт P1

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

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

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

В системе команд имеются команды условных переходов. Эти команды позволяют осуществлять переход в пределах страницы 256 байт. Примеры использования команд условного перехода:

JB5, TstNxtUsl               ;Если в 6 бите аккумулятора нулевое значение,
  CALL Podprogramma             ;то вызвать подпрограмму, обозначенную меткой ‘Podprogramma’
JNZ A, #5, TstNxtUsl         ;Если в аккумуляторе содержится нулевое значение,
  CALL Podprogramma             ;то вызвать подпрограмму, обозначенную меткой ‘Podprogramma’

Косвенный переход JMPP @A в системе команд микроконтроллера обеспечивают ветвление содержимого аккумулятора А. Это позволяет реализовывать операцию перехода по заданному коду, эквивалентное оператору case в языке программирования pascal, но намного быстрее (за два машинных цикла).

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

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

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

   RR A          ;сдвиг содержимого аккумулятора вправо
   DA A          ;десятичная коррекция аккумулятора

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

 MOV A, R7 ;Во втором операнде использована регистровая адресация

Косвенно-регистровая адресация используется для обращения к ячейкам внутреннего ОЗУ данных. В качестве регистров-указателей используются регистры R0, R1 выбранного банка регистров. Примеры использования косвенно-регистровой адресации:

 
   MOV A, @R0          ;Косвенно-регистровая адресация использована во втором операнде
   MOV @R1, A          ;Косвенно-регистровая адресация использована в первом операнде

Косвенно - регистровая адресация используется также для обращения к внешней памяти данных. В этом случае с помощью регистров- указателей R0 и R1 (рабочего банка рабочих регистров) выбирается ячейка из блока 256 байт внешней памяти данных. Номер блока предварительно задается содержимым порта Р2. Например:

   MOVX A, @R0          ;Косвенно-регистровая адресация использована во втором операнде
   MOVX @R1, A          ;Косвенно-регистровая адресация использована в первом операнде

Косвенно- регистровая адресация по содержимому аккумулятора А упрощает просмотр таблиц, записанных в памяти программ. Любой байт из таблицы может быть выбран по адресу, определяемому содержимым аккумулятора А, например:

MOVP A, @A

Непосредственная адресация позволяет выбрать из адресного пространства памяти программ константы, явно указанные в команде, например:

   MOV A, #11h     ;помещает в аккумулятор число 11h
   MOV R5, #48     ;помещает в регистр R5 число 48

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