Система команд ОМЭВМ предоставляет большие возможности обработки данных, обеспечивает реализацию логических, арифметических операций, а также управление в режиме реалиного времени. Реализована побитовая, потетрадная (4 бита), побайтовая (8 бит) и 16-разрядная обработка данных.
БИС семейства MCS-51 - 8-разрядная ОМЭВМ: ПЗУ, ОЗУ, регистры специального назначения, АЛУ и внешние шины имеют байтовую организацию. Двухбайтовые данные используются только регистром-указателем (DPTR) и счетчиком команд (РС). Следует отметить, что регистр-указатель данных может быть использован как двухбайтовый регистр DPTR или как два однобайтовых регистра специального назначения DPH и DPL. Счетчик команд всегда используется как двухбайтовый регистр.
Набор команд ОМЭВМ имеет 42 мнемонических обозначения команд для конкретизации 33 функций этой системы.
Синтаксис большинства команд ассемблерного языка состоит из мнемонического обозначения функции, всед за которым идут операнды, указывающие методы адресации и типы данных. Различные типы данных или режимы адресации определяются установленными операндами, а не изменениями мнемонических обозначений.
Систему команд условно можно разбить на пять групп:
Существуют следующие типы адресации операндов-источников:
- Косвенно-регистровая адресация по сумме базового и индексного регистров
Таблица обозначений и символов, используемых в системе команд
Обозначение, символ | Назначение |
А | Аккумулятор |
Rn | Регистры текущего выбранного банка регистров |
r | Номер загружаемого регистра, указанного в команде |
direct | Прямо адресуемый 8-битовый внутренний адрес ячейка данных, который может быть ячейкой внутреннего ОЗУ данных (0-127) или SFR (128-255) |
@Rr | Косвенно адресуемая 8-битовая ячейка внутреннего ОЗУ данных |
data8 | 8-битовое непосредственное данное, входящее в КОП |
dataH | Старшие биты (15-8) непосредственных 16-битовых данных |
dataL | Младшие биты (7-0) непосредственных 16-битовых данных |
addr11 | 11-битовый адрес назначения |
addrL | Младшие биты адреса назначения |
disp8 | 8-битовый байт смещения со знаком |
bit | Бит с прямой адресацией, адрес которого содержит КОП, находящийся во внутреннем ОЗУ данных или SFR |
a15, a14...a0 | Биты адреса назначения |
(Х) | Содержимое элемента Х |
((Х)) | Содержимое по адресу, хранящемуся в элементе Х |
(Х)[M] | Разряд М элемента Х |
+ - * AND OR XOR /X |
Операции: сложения вычитания умножения деления логического умножения (операция И) логического сложения (операция ИЛИ) сложения по модулю 2 (исключающее ИЛИ) инверсия элемента Х |
Мнемонические обозначения функций однозначно связаны с конкретными комбинациями способов адресации и типами данных. Всего в системе команд возможно 111 таких сочетаний. В таблице приведен перечень команд, упорядоченных по алфавиту.
Мнемоника | Функция | Флаги |
Команда ACALL | Абсолютный вызов подпрограммы | |
Сложение | AC, C, OV | |
Сложение с переносом | AC, C, OV | |
Команда AJMP | Абсолютный переход | |
Логическое "И" | ||
Логическое "И" для переменных-битов | C | |
Сравнение и переход, если не равно | C | |
Команда CLR A | Сброс аккумулятора | |
Команда CLR |
Сброс бита | C, bit |
Команда CPL A | Инверсия аккумулятора | |
Команда CPL |
Инверсия бита | C, bit |
Команда DA A | Десятичная коррекция аккумулятора для сложения | AC, C |
Команда DEC <байт> | Декремент | |
Команда DIV AB | Деление | C, OV |
Команда DJNZ <байт>, <смещение> | Декремент и переход, если не равно нулю | |
Команда INC <байт> | Инкремент | |
Команда INC DPTR | Инкремент указателя данных | |
Команда JB |
Переход, если бит установлен | |
Команда JBC |
Переход, если бит установлен и сброс этого бита | |
Команда JC |
Переход, если перенос установлен | |
Команда JMP @A+DPTR | Косвенный переход | |
Команда JNB |
Переход, если бит не установлен | |
Команда JNC |
Переход, если перенос не установлен | |
Команда JNZ |
Переход, если содержимое аккумулятора не равно нулю | |
Команда JZ |
Переход, если содержимое аккумулятора равно 0 | |
Команда LCALL | Длинный вызов | |
Команда LJMP | Длинный переход | |
Переслать переменную-байт | ||
Переслать бит данных | C | |
Команда MOV DPTR,#data16 | Загрузить указатель данных 16-битовой константой | |
Команда MOVC A,@A+( |
Переслать байт из памяти программ | |
Переслать во внешнюю память (из внешней памяти) данных | ||
Микроконтроллеры семейства МСS-51 построены по гарвардской архитектуре, в которой память программ и память данных разделе-ны, имеют собственные адресные пространства и способы доступа к ним.
Память программ
Максимальный объем памяти составляет 64К байт, из них 4К, 8К, 16К или 32К байт памяти (табл.7.3.1) располагаются на кристалле, остальной объем — вне кристалла.
При напряжении на выводе ЕА =
V CC
использу-ется как внутренняя, так и внешняя память, при ЕА = V CC = 0 — только внешняя па-мять.
В табл.7.3.1 приведены адреса обращения к памяти программ
для указан-ных случаев.
Нижняя область памяти программ отводится для начала работы микроконт-роллера (стартовый адрес 0000h после сброса) и под обработку прерываний (ад-реса прерываний расположены с интервалом 8 байт: 0003h, 000Bh, 0013h и т.д.).
Память программ доступна только для чтения, причем при обращении:
● к внешней памяти
программ вырабатывается сигнал ¯PSEN и всегда формиру-ется 16-разрядный адрес.
Младший байт адреса передается через порт P0 в первой половине машинного цикла и фиксируется по срезу строба ALE в регистре.
Во второй половине цикла порт P0 используется для ввода в МК байта данных из внешней памяти.
Старший байт адреса передается через порт P2 в течение всего времени обращения к памяти (рис.7.1.11);
● к внутренней памяти сигнал чтения не формируется и используются циклы обмена по внутренней шине микроконтроллера.
Память данных
Внутреннюю память
данных можно условно разделить на три блока (табл.7.3.2).
Внутренняя память всегда адресуется байтом, который обеспечивает адреса-цию только к 256 ячейкам памяти.
Поэтому, как видно из табл.7.3.2, для адреса-ции к верхним 8-битным ячейкам внутреннего ОЗУ и регистрам специальных фун-кций SFR, занимающим одно и то же адресное пространство, в командах исполь-зуются разные способы адресации: косвенный и прямой.
Особенности организации нижней области внутреннего ОЗУ отражены в табл.7.3.3.
Младшие 32 байта внутреннего ОЗУ с адресами 00h.
1Fh сгруппированы в че-тыре банка по восемь регистров (R0.R7).
Следующие 16 байтов ОЗУ с адресами 20h.
2Fh представляют собой область памяти объемом 8×16= 128 бит, которая допускает обращение к каждому отдельному биту.
Для выбора адреса регистра банка используется его имя R0.
R7, для выбора банка — биты RS0, RS1 регистра слова состояния PSW.
Адреса битов
Адреса битов приведены в табл.7.3.3.
Адресация осуществляется прямым
способом.
Список всех регистров специальных функций SFR с их адресами дан в табл.7.2.2.
Для наглядности в табл.7.3.
4 приведена карта адресов ре-гистров
SFR
рассматриваемых микросхем семейства MCS-51.
Адрес SFR опреде-ляется совокупностью цифр столбца и строки в шестнадцатеричной системе счисления.
Например, регистр CMOD имеет адрес D9h.
Для регистров SFR, адреса которых оканчиваются на 0h или 8h (они выделены полужирным шрифтом), помимо байтовой
допускается побитовая
адресация.
При этом адрес бита, занимающего в регистре N-й разряд, определяется как XXh + 0Nh, где XXh — адрес регистра SFR, N = 0.7.
Битовые адреса в этой облас-ти имеют значения от 80Н до FFH.
Например, адреса битов аккумулятора АСС ле-жат в пределах E0h-E7h.
Внешняя память
данных (объемом до 64 Кбайт) создается дополнительными микросхемами памяти, подключаемыми к МК.
Для работы с внешней памятью данных используются специальные команды, поэтому адресные пространства внешней и внутренней памяти не пересекаются и, следовательно, оба вида памя-ти данных можно задействовать одновременно.
Для обращения к ячейкам внеш-ней памяти данных используются (рис.7.1.8):
● команды с косвенной адресацией;
● сигналы чтения ¯RD и записи ¯WR;
● порт P0 для передачи младшего байта адреса и приема/передачи байта данных;
● порт P2 для передачи старшего байта адреса.
Способы адресации.
В системе команд используется:
● прямая, косвенная, регистровая, косвенно-регистровая, непосредственная и индексная адресация (косвенная адресация по сумме базового и индексно-го регистров) операндов-источников;
● прямая, регистровая и косвенно-регистровая адресация операндов назначения.
Сочетание указанных способов (адресации) обеспечивает 21 режим адресации.
В этой и в приведенных ниже таблицах системы команд использованы следу-ющие обозначения:
Прямая адресация.
При этом способе адресации место расположения байта или бита данных определяется 8-битным адресом второго (и третьего) бай-та команды.
Прямая адресация используется только для обращения к внутренней памяти данных (нижним 128 байтам ОЗУ) и регистрам специальных функций.
Регистровая адресация.
Этот способ адресации обеспечивает доступ к данным, которые хранятся в одном из восьми регистров R0.
R7 текущего банка рабочих регистров.
Его также можно использовать для обращения к регистрам A, В, АВ (сдвоенному регистру), регистру-указателю DPTR и флагу переноса С.
Адрес указанных регистров заложен в код операции, благодаря чему сокращает-ся число байт команды.
Косвенно-регистровая адресация.
В этом случае адрес данных хра-нится в регистре-указателе, место расположения которого определено кодом операции.
Данный способ адресации используется для обращения к внешнему ОЗУ и верхней половине внутреннего ОЗУ.
Регистрами-указателями 8-битных ад-ресов могут служить регистры R0, R1 выбранного банка рабочих регистров или указатель стека SР, для 16-битной адресации используется только регистр указа-теля данных DPTR.
Непосредственная адресация.
При этом способе адресации данные непосредственно указаны в команде и находятся во втором (или во втором и тре-тьем) байтах команды, т.е.
не требуется адресация к памяти.
Например, по ко-манде МОV A,#50 в аккумулятор A загружается число 50.
Индексная адресация.
Этот способ представляет собой косвенно-реги-стровую адресацию, при котором адрес байта данных определяется как сумма содержимого базового (DPTR или РС) и индексного (А) регистров.
Способ ис-пользуется только для доступа к программной памяти и только в режиме чтения;
он упрощает просмотр таблиц, зашитых в памяти программ.
Структура команд.
Длина команды составляет один (49 команд), два (45 ко-манд) или три (17 команд) байта.
Первый байт команды всегда содержит код опе-рации (КО), A второй и третий байты — адреса операндов или непосредственные значения данных.
В качестве операндов могут быть использованы отдельные биты, тетрады, байты и двухбайтные слова.
Можно выделить 13 типов команд, ко-торые приведены в табл.7.3.5:
● A, PC, SP, DPTR, Rn (n = 0, 7) — аккумулятор, счетчик команд, указатель стека, регистр указателя данных и регистр текущего банка;
● Rm (m = 0, 1) — регистр текущего банка, используемый при косвенной адре-сации;
● direct — 8-разрядный адрес прямо адресуемого операнда;
● bit — адрес прямо адресуемого бита;
● rel — относительный адрес перехода;
● addr11, addr16 — 11- и 16-разрядный абсолютный адрес перехода;
● #data8, #data16 — непосредственные данные (операнды) 8- и 16-разрядной длины;
● A10, A9, A0 — отдельные разряды 11-разрядного адреса;
● (.) — содержимое ячейки памяти по адресу, указанному в скобках;
● СБ, МБ — старший и младший байты 16-разрядного операнда.
Общие сведения о системе команд.
Система команд обеспечивает большие возможности обработки данных в виде бит, тетрад, байтов, двухбайтных слов, A также управления в режиме реального времени.
Для описания команд используется язык макроассемблера ASM51. Синтаксис большинства команд состоит из мнемонического обозначения (аббревиатуры) выполняемой операции, за которым следуют операнды.
С помощью операндов указываются различные способы адресации и типы данных.
В частности аббреви-атура MOV имеет 18 различных команд, предназначенных для обработки трех ти-пов данных (битов, байтов, адресов) в различных адресных пространствах.
Набор команд имеет 42 мнемонических обозначения 111 типов команд для конкрети-зации 33 функций МК.
Из 111 команд 64 выполняются за один машинный цикл, 45 — за два цикла и лишь две команды (MUL — умножение и DIV — деление) вы-полняются за 4 цикла. При частоте тактового генератора 12 МГц длительность машинного цикла (12 тактов) составляет 1 мкс. По функциональному признаку
команды можно разбить на пять групп. Ниже приведено описание команд каждой группы, представленных в виде таблиц. Для компактности таблиц выделим группу команд (табл.7.3.6), выполнение которых влияет
(помечены знаком +) на состояние флагов
регистра слова состояния PSW.
Команды пересылки данных
Команды пересылки можно разбить на отдель-ные подгруппы.
Команды пересылки и обмена данными между ячейками внутрен-ней памяти
(табл.7.3.7).
Команды 1-16, имеющие мнемонику MOV dest, src, предназначены для пересылки
байта или двух байтов (команда 16) данных из ис-точника src в приемник dest, при этом:
● для указания источника
(src) используется четыре способа адресации: регист-ровый (команды 2-4, 6, 8), прямой (команды 1, 7, 9, 11), косвенный (команды 5, 10) и непосредственный (команды 12-16);
● для указания приемника
(dest)
используется три способа: регистровый (команды 1, 3…5, 9, 12, 14, 16), прямой (команды 2, 7, 8, 10, 13), косвенный (команды 6, 11, 15).
Команды 17-20 обеспечивают обмен
информацией между двумя ячейками внутренней памяти данных (или двустороннюю пересылку).
При выполнении ко-манд ХСН происходит обмен байтами, A команды XCHD — младшими тетрадами байтовых операндов.
Одной из ячеек всегда является аккумулятор A. В качестве другой ячейки при обмене байтами используется один из регистров Rn текущего банка, A также прямо или косвенно адресуемая ячейка внутренней памяти; при обмене тетрадами — только косвенно адресуемая ячейка внутренней памяти.
Так как во всех МК стек размещается во внутреннем ОЗУ, в эту же подгруппу включены команды
(20, 21) обращения к стеку
PUSH src, POP dest.
Эти команды ис-пользуют только прямой способ адресации, записывая байт в стек или восстанав-ливая его из стека.
Следует иметь в виду, что в тех МК, у которых в ОЗУ отсут-ствуют верхние 128 байт, увеличение стека за пределы 128 байт ведет к потере данных.
Команды пересылки данных между внутренней и внешней па-мятью данных (табл.7.3.8).
Эти команды используют только косвенную адре-сацию, при этом однобайтный адрес может располагаться в Р0 или R1 текущего банка регистров, A двухбайтный адрес — в регистре-указателе данных DРТR.
При любом доступе к внешней памяти роль приемника или источника операндов во внутренней памяти играет аккумулятор А.
Команды пересылки данных из памяти программ
(табл.7.3.9).
Эти команды предназначены для чтения таблиц из программной памяти.
Команда MOVC A,@А + DPTR используется для обращения к таблице с числом входов от 0 до 255.
Номер требуемого входа в таблицу загружается в аккумулятор, A регистр DPTR устанавливается на точку начала таблицы. Отличительной особенностью другой команды является то, что в качестве указателя базы используется про-граммный счетчик PC и обращение к таблице производится из подпрограммы. Вначале номер требуемой точки входа загружается в аккумулятор, затем вызыва-ется подпрограмма с командой MOVC A,@А + PC. Таблица может иметь 255 вхо-дов с номерами от 1 до 255, так как 0 используется для адреса команды RET вы-хода из подпрограммы.
Команды арифметической обработки данных. Все арифметические коман-ды выполняются над беззнаковыми целыми числами. Операции над двумя операндами
(табл.7.3.10). В операциях сложе-ния
ADD, сложения с учетом переноса
ADDC и вычитания с учетом заема
SUBB:
● источником одного 8-битного операнда и приемником результата служит ак-кумулятор;
● источником другого операнда — либо один из рабочих регистров Rn (n = 0-7) текущего банки, либо прямо direct
или косвенно @Rm (m = 0, 1) адресуемая ячейка памяти ОЗУ, либо непосредственные данные #data.
Операции умножения
MUL и деления
DIV выполняются над содержимым реги-стров A и В. При умножении старшие 8 разрядов результата записываются в ре-гистр В, младшие 8 разрядов — в регистр A.
Если произведение больше 255, устанавливается флаг переполнения OV; флаг переноса С всегда сбрасывается. Команда DIV выполняет деление 8-битного операнда аккумулятора A на 8-битный операнд регистра В.
При делении частное (старшие разряды) записывается в ре-гистр в A, остаток (младшие разряды) — в B. Флаги переноса C и переполнения OV сбрасываются.
При попытке деления на 0 устанавливается флаг переполнения OV. Операция деления чаще используется для сдвигов и преобразования оснований чисел.
При делении двоичного числа на 2 N происходит его сдвиг на N бит влево.
Лишние биты переносятся в регистр В.
Операции над однобайтными операндами (табл.7.3.11).
Команда DA используется для выполнения двоично-десятичных операций. Команды INC, DEC позволяют соответственно увеличить или уменьшить на единицу содержимое ячейки памяти.
Они применимы к содержимому аккумулято-ра A, одного из рабочих регистров Rn или ячейки памяти, адресуемой как пря-мым, так и косвенным способом.
Операция увеличения на единицу применима также к содержимому 16-разрядного регистра-указателя DPTR.
Команды логических операций.
Двуместные операции
(табл.7.3.12).
Команды AML, ORL, XRL позволяют выполнить три двуместные логические операции над 8-битными операндами: ANL — логическое умножение (AND), ORL — ло-гическое сложение (OR), XRL — исключающее ИЛИ (XOR).
Операции выполняются над отдельными битами операндов. Источником одного из операндов и одновре-менно приемником результата служит либо аккумулятор (А), либо прямо адресу-емая ячейка памяти (direct).
Для источника другого операнда используется реги-стровый, прямой, косвенный или непосредственный способ адресации.
Одноместные операции
(табл.7.3.13).
В состав группы входит также ряд одноместных операций над содержимым аккумулятора A: операции очистки (CLR), логического дополнения или инверсии (CPL), циклического и расширенного циклического сдвигов на 1 бит вправо (RL, RLC) и влево (RR, RRC), обмена тетрад или циклического сдвига байта на 4 разряда (SWAP), A также пустая операция (NOP), в результате которой состояние всех регистров МК (за исключением про-граммного счетчика) остается неизменным.
Команды передачи управления
Команды безусловного перехода
(табл.7.3.14).
Команды 1-3 отличаются лишь форматом адреса назначения.
Ко-манда LJMP (L — Long) выполняет «длинный» безусловный переход по указанному адресу addr16, загружая счетчик PC вторым и третьим байтами команды.
Команда обеспечивает переход в любую точку 64К байтного адресного пространства.
Ко-манда AJMP (А — Absolute) обеспечивает «абсолютный» переход по адресу внутри 2К байтной страницы, начальный адрес которой задается пятью старшими разря-дами программного счетчика PC (вначале содержимое PC увеличивается на 2).
Команда SJMP (S — Short) позволяет осуществить «короткий» безусловный переход по адресу, который вычисляется сложением смещения rel со знаком во втором байте команды с содержимым счетчика PC, предварительно увеличенного на 2.
Адрес перехода находится в пределах -128+127 байт относительно адре-са команды.
Для перехода в любую другую точку 64-килобайтного адресного про-странства может быть использована также команда 4 с косвенной @A+DPTR адре-сацией.
В этом случае содержимое A интерпретируется как целое без знака.
Пустая операция (NOP), в результате которой состояние всех регистров мик-ропроцессора (за исключением программного счетчика) остается неизменным.
Команды условного перехода
(табл.7.3.15).
С помощью команд JZ и JNZ осуществляется переход, если содержимое аккумулятора соответственно равно или не равно нулю.
Адрес перехода вычисляется путем сложения относительного знакового смещения rel с содержимым счетчика команд PC после прибавления к нему числа 2 (длины команды в байтах).
Содержимое аккумулятора остается не-изменным.
Команды на флаги не влияют.
Команды CJNE (3-6) служат для реализации условного перехода по результату сравнения двух 8-разрядных операндов, расположение которых указано в коман-дах.
Если их значения не равны, осуществляется переход.
Адрес перехода вычис-ляется сложением смещения rel с содержимым счетчика PC, предварительно уве-личенным на 3.
В противном случае выполняется следующая команда.
В графе Алгоритм показано влияние значений сравниваемых 8-разрядных операндов на флаг переноса С.
Команды DJNZ (7, предназначены для организации программных циклов.
Регистр Rn или прямо (direct) адресуемая ячейка представляют собой счетчик по-вторений цикла, A смещение rel (во втором и третьем байтах команд) — относи-тельный адрес перехода к началу цикла.
При выполнении команд содержимое счетчика уменьшается на единицу и проверяется на нуль.
Если содержимое счет-чика не равно нулю, осуществляется переход на начало цикла.
В противном слу-чае выполняется следующая команда.
Адрес перехода вычисляется сложением смещения с содержимым счетчика, предварительно увеличенным на длину ко-манды (на 2 или 3).
На флаги команды не влияют.
Команды вызова подпрограмм и возврата из программ
(табл.7.3.16).
Команды LCALL «длинный вызов» и ACALL «абсолютный вызов» осуществляют безусловный вызов подпрограммы, размещенной по указанному адресу.
Отличие этих команд от рассмотренных выше команд безусловного перехода состоит в том, что они сохраняют в стеке адрес возврата (содержимое счетчика) в основ-ную программу.
Команда возврата из подпрограммы RET восстанавливает из стека значение содержимого счетчика команд, A команда RETI помимо этого разрешает преры-вания обслуживающего уровня.
В командах передачи управления широко используется относительная адреса-ция, которая поддерживает перемещаемые программные модули.
В качестве отно-сительного адреса выступает 8-разрядное смещение rel со знаком, обеспечиваю-щее ветвление от текущего положения счетчика PC в обе стороны на ±127 байт.
Для перехода в любую другую точку 64К-байтного адресного пространства может быть использован либо прямой адрес addr16, либо косвенный @A+DPTR адрес.
В последнем случае содержимое A интерпретируется как целое без знака.
Вари-ант короткой прямой адресации addr11 внутри 2К-байтной текущей страницы вве-ден для совместимости с архитектурой МК48.
Все эти типы адресации могут быть применены только к операции перехода, A для операции вызова допустимы только прямой addr16 и внутренний addr11 способы адресации.
Во всех условных операциях может использоваться только относительная адресация.
Когда МК51 опознает запрос на прерывание, он генерирует одну из команд типа LCALL addr16, что автоматически обеспечивает запоминание адреса возврата в стеке.
Однако в отличии от МК48 в МК51 нет автоматически сохраняемой ин-формации о состоянии.
При этом логика прерываний перестает срабатывать на запросы того уровня, который был принят к обслуживанию.
Для понижения уров-ня прерывания служит команда возврата из прерывания RETI, которая кроме опе-рации, эквивалентной RET, включает операцию разрешения прерывания данного уровня.
К типовым условным операциям МК51 относятся также операции JZ, JNZ.
Од-нако появилась новая операция «Сравнить и перейти» CJNE.
По данной команде операнд сначала сравнивается по правилам вычитания целых чисел с константой и в соответствии с результатом сравнения выставляется флаг CY Затем в случае несовпадения с константой выполняется ветвление. Сравнивая аккумулятор, ре-гистр или ячейку памяти с последовательностью констант, получаем удобный способ проверки на совпадения, например с целью выявления особых случаев.
По сути дела команда CJNE является элементом оператора языков высокого уров-ня типа CASE.
Дальнейшее развитие получила команда DJNZ.
Теперь программист в качестве счетчика может использовать не только один из рабочих регистров Rn, но и лю-бую ячейку памяти DSEG.
Команды битовых операций.
Группа состоит из 12 команд, позволяющих вы-полнять операции над одним или двумя битами (сброс, установку, инверсию бита, A также логические И и ИЛИ), и 5 команд, предназначенных для реализации условных переходов (табл.7.3.17).
Команды обеспечивают прямую адресацию 128 битов, расположенных в шест-надцати ячейках внутреннего ОЗУ с адресами 20h.
2Fh (табл.7.3.3), и 128 битов, расположенных в регистрах специального назначения, адреса которых кратны восьми (выделены в табл.7.3.4 полужирным шрифтом).
При выполнении опера-ций над двумя одноразрядными операндами в качестве логического аккумулято-ра используется триггер регистра PSW, хранящий флаг переноса C (табл.7.1.2).
Команды MOV (1,2) осуществляют пересылку
бита из одной прямо адресу-емой битовой ячейки внутреннего ОЗУ в триггер C или в обратном направлении.
Команды CRL (3, 4), SETB (5, 6) соответственно сбрасывают
в нуль или устанавли-вают
в единицу флаг переноса C или указанный бит.
С помощью команд CPL, ANL, ORL (7-12) выполняются логические операции инверсии, сложения и умножения.
В группу входят также команды (13-17) для реализации операций условных переходов с относительным 8-разрядным смещением rel.
Переходы могут быть реализованы как при установленном бите или флаге переноса (команды 13, 16), так и при сброшенном (команды 14, 17).
Команда JBC помимо перехода по вычис-ляемому адресу при выполнении условия (бит) = 1 производит сброс этого бита в нулевое состояние.
При выполнении команд условных переходов адрес перехо-да вычисляется после прибавления к содержимому счетчика чисел 3 или 2 (отра-жающих число байт в команде).
Архитектура семейства MCS-51 в значительной мере предопределяется ее назначением - построение компактных и дешевых цифровых устройств. Все функции микроЭВМ реализуются с помощью единственной микросхемы. В состав семейства MCS-51 входит целый ряд микросхем от самых простых микроконтроллеров до достаточно сложных. Микроконтроллеры семейства MCS-51 позволяют выполнять как задачи управления различными устройствами, так и реализовывать отдельные узлы аналоговой схемы. Все микросхемы этого семейства работают с одной и той же системой команд MCS-51 , большинство из них выполняется в одинаковых корпусах с совпадающей цоколевкой (нумерация ножек для корпуса). Это позволяет использовать для разработанного устройства микросхемы разных фирм - Maxim, Atmel, NXP и т.д. (catalog..php?page=components_list&id=39"> с.м. Поиск по параметрам) без переделки принципиальной схемы устройства и программы .
Рисунок 1. Структурная схема контроллера I8751
Структурная схема контроллера представлена на рисунке 1. и состоит из следующих основных функциональных узлов: блока управления, арифметико-логического устройства, блока таймеров/счетчиков, блока последовательного интерфейса и прерываний, программного счетчика, памяти данных и памяти программ. Двусторонний обмен осуществляется с помощью внутренней 8-разрядной магистрали данных.
Рассмотрим подробнее назначение каждого блока. По такой схеме построены практически все представители семейства MCS-51 . Различные микросхемы этого семейства различаются только регистрами специального назначения (в том числе и количеством портов). Система команд всех контроллеров семейства MCS-51 содержит 111 базовых команд с форматом 1, 2 или 3 байта и не изменяется при переходе от одной микросхемы к другой. Это обеспечивает прекрасную переносимость программ с одной микросхемы на другую.
Блок управления и синхронизации
Блок управления и синхронизации (Timing and Control) предназначен для выработки синхронизирующих и управляющих сигналов, обеспечивающих координацию совместной работы блоков ОЭВМ во всех допустимых режимах ее работы.В состав блока управления входят:
- - устройство формирования временных интервалов,
- - логика ввода-вывода,
- - регистр команд,
- - регистр управления потреблением электроэнергии,
- - дешифратор команд, логика управления ЭВМ.
Устройство формирования временных интервалов предназначено для формирования и выдачи внутренних синхросигналов фаз, тактов и циклов. Количество машинных циклов определяет продолжительность выполнения команд. Практически все команды ОЭВМ выполняются за один или два машинных цикла, кроме команд умножения и деления, продолжительность выполнения которых составляет четыре машинных цикла. Обозначим частоту задающего генератора через F г. Тогда длительность машинного цикла равна 12/F г или составляет 12 периодов сигнала задающего генератора. Логика ввода - вывода предназначена для приема и выдачи сигналов, обеспечивающих обмен информации с внешними устройствами через порты ввода вывода Р0-Р3.
Регистр команд предназначен для записи и хранения 8-ми разрядного кода операции выполняемой команды. Код операции, с помощью дешифратора команд и логики управления ЭВМ, преобразуется в микропрограмму выполнения команды.
Регистр управления потреблением (PCON) позволяет останавливать работу микроконтроллера для уменьшения потребления электроэнергии и уменьшения уровня помех от микроконтроллера. Еще большего уменьшения потребления электроэнергии и уменьшения помех можно добиться, остановив задающий генератор микроконтроллера. Этого можно достичь при помощи переключения бит регистра управления потреблением PCON. Для варианта изготовления по технологии n-МОП (серия 1816 или иностранных микросхем, в названии которых в середине отсутствует буква "c") регистр управления потреблением PCON содержит только один бит, управляющий скоростью передачи последовательного порта SMOD, а биты управления потреблением электроэнергией отсутствуют.
Арифметико-логическое устройство (ALU) представляет собой параллельное восьмиразрядное устройство, обеспечивающее выполнение арифметических и логических операций. АЛУ состоит из:
- - регистров аккумулятора, регистров временного хранения TMP1 и TMP2,
- - ПЗУ констант,
- - сумматора,
- - дополнительного регистра (регистра В),
- - аккумулятора (ACC),
- - регистра состояния программ (PSW).
Регистр аккумулятор и регистры временного хранения - восьмиразрядные регистры, предназначенные для приема и хранения операндов на время выполнения операций над ними. Эти регистры программно не доступны.
ПЗУ констант обеспечивает выработку корректирующего кода при двоично-десятичном представлении данных, кода маски при битовых операциях и кода констант.
Параллельный восьмиразрядный сумматор представляет собой комбинационную схему с последовательным переносом, предназначенную для выполнения арифметических операций сложения, вычитания и логических операций сложения, умножения, неравнозначности и тождественности.
Регистр B - восьмиразрядный регистр, используемый во время операций умножения и деления. Для других инструкций он может рассматриваться как дополнительный сверхоперативный регистр.
Аккумулятор - восьмиразрядный регистр, предназначенный для приема и хранения результата, полученного при выполнении арифметико-логических операций или операций сдвига
Блок последовательного интерфейса и прерываний (ПИП) предназначен для организации ввода-вывода последовательных потоков информации и организации системы прерывания программ. В состав блока входят:
- - буфер ПИП,
- - логика управления,
- - регистр управления,
- - буфер передатчика,
- - буфер приемника,
- - приемопередатчик последовательного порта,
- - регистр приоритетов прерываний,
- - регистр разрешения прерываний,
- - логика обработки флагов прерываний и схема выработки вектора.
Счетчик команд (Program Counter) предназначен для формирования текущего 16-разрядного адреса внутренней памяти программ и 8/16-разрядного адреса внешней памяти программ. В состав счетчика команд входят 16-разрядные буфер РС, регистр РС и схема инкремента (увеличения содержимого на 1).
Память данных (RAM) предназначена для временного хранения информации, используемой в процессе выполнения программы.
Порты P0, P1, P2, P3 являются квазидвунаправленными портами ввода - вывода и предназначены для обеспечения обмена информацией ОЭВМ с внешними устройствами, образуя 32 линии ввода- вывода.
Устройство таймеров В базовых моделях семейства имеются два программируемых 16-битных таймера/счетчика (T/C0 и T/C1), которые могут быть использованы как в качестве таймеров, так и в качестве счетчиков внешних событий
Регистр состояния программы (PSW) предназначен для хранения информации о состоянии АЛУ при выполнении программы.
Память программ (EPROM) предназначена для хранения программ и представляет собой постоянное запоминающее устройство (ПЗУ). В разных микросхемах применяются масочные ПЗУ, стираемые ультрафиолетовым излучением или FLASH ПЗУ.
Регистр указателя данных (DPTR) предназначен для хранения 16-разрядного адреса внешней памяти данных или памяти программ.
Указатель стека (SP) представляет собой восьмиразрядный регистр, предназначенный для организации особой области памяти данных (стека), в которой можно временно сохранить любую чейку памяти.
Архитектура семейства MCS-51 в значительной мере предопределяется ее назначением - построение компактных и дешевых цифровых устройств. Все функции микроЭВМ реализуются с помощью единственной микросхемы. В состав семейства MCS-51 входит целый ряд микросхем от самых простых микроконтроллеров до достаточно сложных. Микроконтроллеры семейства MCS-51 позволяют выполнять как задачи управления различными устройствами, так и реализовывать отдельные узлы аналоговой схемы. Все микросхемы этого семейства работают с одной и той же системой команд , большинство из них выполняется в одинаковых корпусах с совпадающей цоколевкой (нумерация ножек для корпуса). Это позволяет использовать для разработанного устройства микросхемы разных фирм — производителей (таких как Intel, Dallas, Atmel, Philips и т.д.) без переделки принципиальной схемы устройства и программы .
Рисунок 1. Структурная схема контроллера К1830ВЕ751
Структурная схема контроллера представлена на рисунке 1. и состоит из следующих основных функциональных узлов: блока управления, арифметико-логического устройства, блока таймеров/счетчиков, блока последовательного интерфейса и прерываний, программного счетчика, памяти данных и памяти программ. Двусторонний обмен осуществляется с помощью внутренней 8-разрядной магистрали данных. Рассмотрим подробнее назначение каждого блока. По такой схеме построены практически все представители семейства MCS-51 . Различные микросхемы этого семейства различаются только регистрами специального назначения (в том числе и количеством портов). Система команд всех контроллеров семейства MCS-51 содержит 111 базовых команд с форматом 1, 2 или 3 байта и не изменяется при переходе от одной микросхемы к другой. Это обеспечивает прекрасную переносимость программ с одной микросхемы на другую.
Блок управления и синхронизации
Блок управления и синхронизации (Timing and Control) предназначен для выработки синхронизирующих и управляющих сигналов, обеспечивающих координацию совместной работы блоков ОЭВМ во всех допустимых режимах ее работы.В состав блока управления входят:
- устройство формирования временных интервалов,
- логика ввода-вывода,
- регистр команд,
- регистр управления потреблением электроэнергии,
- дешифратор команд, логика управления ЭВМ.
Устройство формирования временных интервалов предназначено для формирования и выдачи внутренних синхросигналов фаз, тактов и циклов. Количество машинных циклов определяет продолжительность выполнения команд. Практически все команды ОЭВМ выполняются за один или два машинных цикла, кроме команд умножения и деления, продолжительность выполнения которых составляет четыре машинных цикла. Обозначим частоту задающего генератора через F г. Тогда длительность машинного цикла равна 12/F г или составляет 12 периодов сигнала задающего генератора. Логика ввода - вывода предназначена для приема и выдачи сигналов, обеспечивающих обмен информации с внешними устройствами через порты ввода вывода Р0-Р3.
Регистр команд предназначен для записи и хранения 8-ми разрядного кода операции выполняемой команды. Код операции, с помощью команд и логики управления ЭВМ, преобразуется в микропрограмму выполнения команды.
Регистр управления потреблением (PCON ) позволяет останавливать работу микроконтроллера для уменьшения потребления электроэнергии и уменьшения уровня помех от микроконтроллера. Еще большего уменьшения потребления электроэнергии и уменьшения помех можно добиться, остановив задающий генератор микроконтроллера. Этого можно достичь при помощи переключения бит регистра управления потреблением PCON. Для варианта изготовления по технологии n-МОП (серия 1816 или иностранных микросхем, в названии которых в середине отсутствует буква "c") регистр управления потреблением PCON содержит только один бит, управляющий скоростью передачи последовательного порта SMOD, а биты управления потреблением электроэнергией отсутствуют.
Вместе со статьей "Архитектура микроконтроллеров MCS-51" читают:
http://сайт/MCS51/tablms.php
http://сайт/MCS51/SysInstr.php
http://сайт/MCS51/port.php
- Арифметические команды;
- Логические команды;
- Команды передачи данных;
- Команды битового процессора;
- Команды ветвления и передачи управления.
- Регистровая адресация
- Прямая адресация
- Косвенно-регистровая адресация
- Непосредственная адресация
- Косвенно-регистровая адресация по сумме базового и индексного регистров
Обозначение, символ | Назначение |
А | Аккумулятор |
Rn | Регистры текущего выбранного банка регистров |
r | Номер загружаемого регистра, указанног в команде |
direct | Прямо адресуемый 8-битовый внутренний адрес ячейка данных, который может быть ячейкой внутреннего ОЗУ данных (0-127) или SFR (128-255) |
@Rr | Косвенно адресуемая 8-битовая ячейка внутреннего ОЗУ данных |
data8 | 8-битовое непосредственное да ное, ходящее в КОП |
dataH | Старшие биты (15-8) непосредственных 16-битовых данных |
dataL | Младшие биты (7-0) непосредственных 16-битовых данных |
addr11 | 11-битовый адрес назначения |
addrL | Младшие биты адреса назначения |
disp8 | 8-битовый байт смещения со знак м |
bit | Бит с прямой адресацией, адрес которого содержит КОП, находящийся во внутреннем ОЗУ данных или SFR |
a15, a14...a0 | Биты адреса назначения |
(Х) | Содержимое элемента Х |
((Х)) | Содержимое по адресу, хранящемуся в элементе Х |
(Х)[M] | Разряд М элемента Х |
+ - * / AND OR XOR /X | Операции: сложения вычитания умножения деления логического умножения (операция И) логического сложения (операция ИЛИ) сложения по модулю 2 (исключающее ИЛИ) инверсия элемента Х |
Мнемонические обозначения функций однозначно связаны с конкретными комбинациями способов адресации и типами данных. Всего в системе команд возможно 111 таких сочетаний. В таблице приведен перечень команд, упорядоченных по алфавиту.
Мнемоника | Функция | Флаги |
Команда ACALL | Абсолютный вызов подпрограммы | |
Команда ADD A, <байт-источник> | Сложение | AC, C, OV |
Команда ADDC A, <байт-источник> | Сложение с переносом | AC, C, OV |
Команда AJMP | Абсолютный переход | |
Команда ANL <байт-назначения>, <байт-источникa> | Логическое "И" | |
Команда ANL C, <байт-источникa> | Логическое "И" для переменных-битов | |
Команда CJNE <байт-назначения>, <байт-источник>, <смещение> | Сравнение и переход, если не равно | C |
Команда CLR A | Сброс аккумулятора | |
Команда CLR | Сброс бита | C, bit |
Команда CPL A | Инверсия ак умуля ора | |
Команда CPL | Инверсия бита | C, bit |
Команда DA A | Десятичная коррекция аккумулятора для ложения | AC, C |
Команда DEC <байт> | Декремент | |
Команда DIV AB | Деление | C, OV |
Команда DJNZ <байт>, <смещение> | Декремент и переход, если не равно нулю | |
Команда INC <байт> | Инкремент | |
Команда INC DPTR | Инкремент указателя данных | |
Команда JB | Переход, если бит установлен | |
Команда JBC | Переход, если бит установлен и сброс этого бита | |
Команда JC | Переход, если перенос установлен | |
Команда JMP @A+DPTR | Косвенный переход | |
Команда JNB | Переход, если бит не установлен | |
Команда JNC | Переход, если перенос не установлен | |
Команда JNZ | Переход, если содержимое аккумулятора не равно нулю | |
Команда JZ | Переход, если содержимое аккумулятора равно 0 | |
Команда LCALL | Длинный вызов | |
Команда LJMP | Длинный переход | |
Команда MOV <байт-назначения>, <байт-источника> | Переслать переменную-байт | |
Команда MOV <бит-назначения>, <бит-источника> | Переслать бит данных | C |
Команда MOV DPTR,#data16 | Загрузить указатель данных 16-битовой константой | |
Команда MOVC A,@A+( | Переслать байт из памяти программ | |
Команда MOVX <байт приемника>, <байт источника> | Переслать во внешнюю память (из внешней памяти) данных | |
Команда MUL AB | Умножение | C, OV |
Команда NOP | Нет операции | PC |
Команда ORL <байт-назначения>, <байт-источникa> | Логическое "ИЛИ" для перемнных-байтов | |
Команда ORL C, <бит источникa> | Логическое "ИЛИ" для переменных-битов | C |
Команда POP | Чтение из стека | |
Команда PUSH | Запись в стек | |
Команда RET | Возврат из подпрограммы | |
Команда RETI | Возврат из прерывания | |
Команда RL A | Сдвиг содержимого аккумулятора влево | |
Команда RLC A | Сдвиг содержимого аккумулятора влево через флаг переноса | |
Команда RR A | Сдвиг содержимого аккумулятора вправо | |
Команда RRC A | Сдвиг содержимого аккумулятора вправо через флаг переноса | C |
Команда SETB | Установить бит | C |
Команда SJMP <метка> | Короткий переход | |
Команда SUBB A, <байт источника> | Вычитание с заемом | AC, C, OV |
Команда SWAP A | Обмен тетрадами внутри аккумулятора | |
Команда XCH A, <байт> | Обмен содержимого аккумулятора с переменной-байтом | |
Команда XCHD A,@R1 | Обмен тетрадой | |
Команда XRL <байт-назначения>, <байт-источникa> | Логическое "ИСКЛЮЧАЮЩЕЕ ИЛИ" для перемнных-байтов |
Похожие статьи