Дата последнего обновления файла 7.11.2009

Система команд микроконтроллеров семейства MCS-48 (1816ВЕ48)

Система команд микроконтроллера 1816ВЕ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 ANLD),
  • ИЛИ ( ORL ORLD),
  • ИСКЛЮЧАЮЩЕЕ ИЛИ ( XRL).
  • сброс и инвертирование всех восьми разрядов аккумулятора ( CPL A; CLR A);
  • сброс и инвертирование флагов микроконтроллера ( CLR C; CLR F0; CLR F1; CPL C; CPL F0; CPL F1);
  • циклический сдвиг влево и вправо с учетом переноса и без ( RR A; RRC A; RL A; RLC A);
  • обмен местами старшей и младшей тетрад внутри аккумулятора ( SWAP A).

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

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

  • обмен данными во внутреннем ОЗУ: MOV, XCH
  • обмен данными из внешней памяти данных: MOVX
  • копирование данных из памяти программ: MOVP
  • обмен данными параллельных портов IN, OUTL, MOVD

Примеры использования команд пересылки данных:

Любая ячейка 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

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

Команды ветвления позволяют реализовывать условные операторы и операторы циклов. В микроконтроллерах семейства MCS-48 доступны следующие команды:

  • безусловный переход: JMP
  • Вызов и возврат из подпрограммы: CALL, RET, RETR
  • проверка содержимого аккумулятора: JZ, JNZ, JMPP, JB0 ... JB7
  • проверка флага переноса С: JC, JNC
  • проверка сигнала на ножке T0: JT0, JNT0
  • проверка сигнала на ножке T1:  JT1, JNT1
  • проверка сигнала на ножке INT: JNI
  • Проверка состояния флагов пользователя JF0, JF1

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

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

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

Примеры использования команд условного перехода:

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

Команды проверки содержимого аккумулятора и флага переноса C могут быть использованы для реализации проверки различных условий:

  MOV A, 34           ;Если в переменной, хранящейся в ячейке внутренней памяти 34 
  JB7 TstNxtUsl       ;число меньше нуля,
    CALL Podprogramma   ;то вызвать подпрограмму, обозначенную меткой ‘Podprogramma’
;---------------------------------------------------------------------------------
  MOV A, 34           ;Если в переменной, 
  ADD A, -5           ;хранящейся в ячейке внутренней памяти 34 
  JZ TstNxtUsl        ;занесено число 5,
    CALL Podpr5         ;то вызвать подпрограмму, обозначенную меткой ‘Podpr5’
;---------------------------------------------------------------------------------
  MOV A, 34           ;Если в переменной, 
  ADD A, -5           ;хранящейся в ячейке внутренней памяти 34 
  JNС TstNxtUsl       ;занесено число, меньшее 5,
    CALL PodprLT5       ;то вызвать подпрограмму, обозначенную меткой ‘PodprLT5’
;---------------------------------------------------------------------------------
  MOV A, 34           ;Если в переменной, 
  ADD A, -6           ;хранящейся в ячейке внутренней памяти 34 
  JC TstNxtUsl        ;занесено число, большее 5,
    CALL PodprGT5       ;то вызвать подпрограмму, обозначенную меткой ‘PodprGT5’
;---------------------------------------------------------------------------------
  MOV A, 34           ;Если в переменной, 
  ADD A, -5           ;хранящейся в ячейке внутренней памяти 34 
  JC TstNxtUsl        ;занесено число, большее или равное 5,
    CALL PodprGE5       ;то вызвать подпрограмму, обозначенную меткой ‘PodprGE5’
;---------------------------------------------------------------------------------
  MOV A, 34           ;Если в переменной, 
  ADD A, -6           ;хранящейся в ячейке внутренней памяти 34 
  JNC TstNxtUsl       ;занесено число, меньшее или равное 5,
    CALL PodprLE5       ;то вызвать подпрограмму, обозначенную меткой ‘PodprLE5’

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

   ORG 256          ;Разместить команды переходов по границе страницы
     JMP Case0        ;Перейти к выполнению кода по числу 0
     JMP Case1        ;Перейти к выполнению кода по числу 1
     JMP EndCase      ;Это число в ячейке 33 в список разрешённых не входит
     JMP EndCase      ;Это число в ячейке 33 в список разрешённых не входит
     JMP Case4        ;Перейти к выполнению кода по числу 4
   
BeginOpCase:        ;Сюда нужно перейти командой JMP BeginOpCase
   MOV A, 33        ;В этой ячейке хранится переменная, по которой необходимо осуществить переход на обслуживающую программу

   CLR C            ;Осуществить арифметический сдвиг аккумулятора вправо
   RLC A            ;(умножить на 2) т.к. команды переходов занимают два байта

   JMPP @A          ;Перейти к выполнению заданного в 25 ячейке кода
EndCase:

Команды управления режимами работы микроконтроллера

Команды управления микроконтроллером позволяют:

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

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

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

   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          ;Косвенно-регистровая адресация использована в первом операнде

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

   MOVP3 A, @A

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

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

Литература:

  1. В.В. Сташин А.В. Урусов О.Ф. Мологонцева Е. П. Проектирование цифровых устройств на однокристальных микроконтроллерах 1990.

Вместе со статьей "Система команд микроконтроллеров семейства MCS-48 (1816ВЕ48)" читают:

Состав семейства MCS-48
http://digteh.ru/MCS48/tablms.php


Автор Микушин А. В. All rights reserved. 2001 ... 2017

Предыдущие версии сайта:
http://neic.nsk.su/~mavr
http://digital.sibsutis.ru/

Поиск по сайту сервисом Яндекс

Поиск по сайту сервисом ГУГЛ

пЕИРХМЦ@Mail.ru


Rambler's Top100