Система команд ОЭВМ КР1816ВЕ51

Система команд МК51 содержит 111 базовых команд. По функциональному признаку команды можно разделить на пять групп:

1. команды передачи данных;

2. арифметические команды;

3. логические команды;

4. команды передачи управления;

5. команды операций с битами.

Большинство команд (94) имеют формат один или два байта и выполняются за один или два машинных цикла. Остальные команды - трехбайтные и выполняются за два машинных цикла. Только на выполнение команд умножения и деления требуется четыре машинных цикла.

Первый байт всех 13 типов команд (рисунок 4.18) содержит код операции (КОП). Второй и третий байты содержат либо адреса операндов, либо непосредственные данные.

Система команд ОЭВМ КР1816ВЕ51 - student2.ru

Рисунок 4.18 - Типы операндов в МК51

В системе команд МК51 используется четыре способа адресации данных.

1. Регистровая адресация. В команде указано символическое название регистра.

2. Прямая адресация. В команде явно указан адрес операнда в памяти.

3. Непосредственная адресация. В команде задан сам операнд.

4. Косвенная адресация. В команде задано имя регистра или регистровой пары, в которых содержится адрес, по которому и происходит обращение к операнду в памяти.

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

Rn, n=0,7 - регистры R0-R7 текущего выбранного банка регистров;

direct (ad, add, ads) - 8-битный прямой адрес ячейки резидентной памяти данных (0-127) или регистра специальных функций (128-255);

@Ri, i=0,1 - 8-битная ячейка РПД или регистра специальных функций, косвенно адресуемая через регистр R0 или R1;

#data (#d) - 8-битная константа, входящая в состав команды;

#data16 (#d16h, #d16l) - 16-битная константа, входящая в состав команды (непосредственная адресация);

addr16 (ad16h, ad16l), ad16 - 16-битовый адрес назначения в командах длинного перехода LJMP и вызова подпрограмм LCALL, позволяющий охватить полное адресное пространство (64 К);

addr11, ad11 - 11-битовый адрес назначения в командах абсолютного перехода АJMP и вызова подпрограмм АCALL, позволяющий выполнить переход в пределах 2 К страницы от адреса текущей команды;

rel - 8-битное значение смещения со знаком. Смещение с учетом знака суммируется с текущим содержимым счетчика команд и позволяет выполнить переход в пределах -128 +127 байт относительно текущего адреса;

bit - 8-битовый прямой адрес адресуемого бита, находящегося в РПД (0-127) или в регистре специальных функций (128-255).

Микроконтроллер оперирует данными четырех типов: биты, тетрады (4-битовые цифры), байты и 16-битовые слова.

Биты. В МК51 определены 256 битов, из них 128 находятся в РПД и используются как флаги пользователя, а остальные 128 битов расположены в блоке регистров специальных функций и входят в состав некоторых регистров этого блока. Для обращения к битам используется прямой 8-битный адрес (bit).

Тетрады. Операции с тетрадами определены только в командах обмена тетрад в аккумуляторе и между регистром и аккумулятором.

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

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

В слове состояния процессора (PSW, таблица 4.2) имеются четыре флага, отражающие результат операции в АЛУ: C - перенос, AC - вспомогательный перенос, OV - переполнение и P - паритет. Только некоторые команды изменяют флаги результата (таблица 4.13).

Таблица 4.13 - Команды, изменяющие флаги результата

Команды Флаги Команды Флаги
ADD C, OV, AC CLR C C=0
ADDC C, OV, AC CPL C C= Система команд ОЭВМ КР1816ВЕ51 - student2.ru
SUBB C, OV, AC ANL C,b C
MUL C=0, OV ANL C,/b C
DIV C=0, OV ORL C,b C
DA C ORL C,/b C
RRC C MOV C,b C
RLC C CJNE C
SETB C C=1    

Флаги C, AC, OV связаны с состоянием АЛУ и не изменяются в операциях, минующих использование АЛУ. Состояние этих флагов можно изменять и прямой записью соответствующих битов в регистре PSW. Флаг паритета Р изменяется любой командой, изменяющей аккумулятор. Прямое изменение флага P не вызовет сообщения об ошибке, но его значение останется соответствующим состоянию аккумулятора.

Команды передачи данных

Команды передачи данных не влияют на флаги результата.

На графе возможных путей передачи данных в МК (рисунок 4.19) аккумулятор представлен отдельной вершиной, поскольку многие команды используют его при передаче данных.

Система команд ОЭВМ КР1816ВЕ51 - student2.ru

Рисунок 4.19 - Граф путей передачи данных в МК51

Большую часть команд данной группы (таблица 4.14) составляют команды передачи и обмена байтами. Столбец «Байты» показывает количество байтов в команде, а «Циклы» - это количество машинных циклов на выполнение команды.

Таблица 4.14 - Команды передачи данных

Система команд ОЭВМ КР1816ВЕ51 - student2.ru Система команд ОЭВМ КР1816ВЕ51 - student2.ru

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

В данную группу команд (таблица 4.15) входят команды сложения, вычитания, умножения и деления байтов. Имеются команды десятичной коррекции результата сложения, увеличения на единицу как 8-битовых, так и 16-битовых операндов, уменьшения на единицу для 8-битовых операндов.

Таблица 4.15 - Группа арифметических операций

Система команд ОЭВМ КР1816ВЕ51 - student2.ru Система команд ОЭВМ КР1816ВЕ51 - student2.ru

Все команды этой группы используют АЛУ и влияют на состояние флагов.

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

В данную группу (таблица 4.16) входят команды, выполняющие логические операции вида «И», «ИЛИ», «Исключающее ИЛИ» над операндом в аккумуляторе и в любом байте РПД или в регистрах специальных функций. Сюда же входят команды сдвига аккумулятора влево и вправо, а также сброса и инверсии аккумулятора.

Таблица 4.16 - Группа логических операций

Система команд ОЭВМ КР1816ВЕ51 - student2.ru

Система команд ОЭВМ КР1816ВЕ51 - student2.ru

Все команды этой группы используют АЛУ и влияют на состояние флагов.

Команды операций с битами

Данные команды (таблица 4.17) оперируют с однобитовыми операндами. Биты расположены в области битовой адресации (128 битов пользователя) и в области регистров специальных функций. Для адресации бит используется прямой 8-битовый адрес (bit). Косвенная адресация бит невозможна.

Таблица 4.17 - Битовые операции

Система команд ОЭВМ КР1816ВЕ51 - student2.ru

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

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

Таблица 4.18 - Группа команд передачи управления

Система команд ОЭВМ КР1816ВЕ51 - student2.ru Система команд ОЭВМ КР1816ВЕ51 - student2.ru

В приложении А приведена система команд МК51 в табличной форме. По номеру строки (старшая тетрада) и столбца (младшая тетерада) можно определить байт кода операции любой команды.

В приложении Б система команд МК51 разделена на функциональные группы и представлена в списочной форме с описанием команд.

Пример составления простейших программ для ОЭВМ КР1816ВЕ51

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

Использование команд передачи данных. Одной из типовых задач является инициализация некоторой области резидентной памяти данных, например, ее очистка. Примером такой задачи является фрагмент программы (таблица 4.19), выполняющей сброс всех 128 флагов пользователя, расположенных в резидентной памяти данных.

Таблица 4.19 - Фрагмент программы сброса флагов пользователя

Система команд ОЭВМ КР1816ВЕ51 - student2.ru

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

Допустим, во внешней памяти данных с некоторого датчика порциями по 60 байтов записывается информация. После записи последнего байта, на вывод Р1.2 порта Р1 поступает положительный импульс длительностью около 10·10-6 с, что гарантирует его обнаружение в МК. Требуется обнаружить входной импульс и, по его окончанию, перенести массив из ВПД в РПД с очисткой исходной области во внешней памяти.

Для обнаружения импульса готовности данных в программе (таблица 4.20) сначала выполняется поиск положительного фронта импульса. Команда условного перехода опрашивает значение заданного бита и выполняет переход на саму себя. Другая условная команда предназначена для обнаружения спада импульса. Две условные команды последовательно позволят обнаружить импульс управления.

Таблица 4.20 - Перенос массива из ВПД в РПД

Система команд ОЭВМ КР1816ВЕ51 - student2.ru

Использование арифметических и битовых команд. Использование арифметических и битовых команд удобно показать на примере подпрограммы табличного вычисления функции sin(x). В памяти программ записана таблица значений синуса от 0º до 89º в виде байтов дробных значений. Значение угла в градусах задается старшей частью в регистре В, а младшей - в аккумуляторе.

Значения синуса угла в 3 и 4 квадранте отличается только знаком от значения угла 1 и 2 квадрантов. Значения из 2 квадранта соответствуют дополнительным значениям из 1 квадранта. Поэтому при преобразовании значения угла использовались следующие формулы:

Система команд ОЭВМ КР1816ВЕ51 - student2.ru  

При вычислении функции (таблица 4.21) для определения значения угла, превышающего 180º, старший бит значения угла из регистра В копируется во флаг переноса. Затем этот бит вдвигается в аккумулятор. Полученное половинное значение угла сравнивается с половинным значением от 180. Далее, при необходимости, вычитаем 180 для перехода в 1, 2 квадрант. Аналогично происходит переход в 1 квадрант. Затем значение берется из таблицы.

Таблица 4.21 - Табличное вычисление sin(x)

Система команд ОЭВМ КР1816ВЕ51 - student2.ru

Использование подпрограмм.Одной из типовых задач является процедура формирования программной задержки. Примером такой задачи является фрагмент программы (таблица 4.22), выполняющей задержку на 1 секунду. Во фрагменте задана подпрограмма DELAY, выполняющая задержку примерно на 0,1 сек. За счет повторных вызовов подпрограммы задержка доводится до 1 сек.

Таблица 4.22 - Фрагмент программы формирования задержки

Система команд ОЭВМ КР1816ВЕ51 - student2.ru

Коэффициенты для счетчиков подбирались исходя из требуемого числа машинных циклов. При тактовой частоте 12 МГц длительность машинного цикла равна 1·10-6 с. С учетом длительности команд и повторения циклов получается около 100 тысяч машинных циклов. Это приближенно дает задержку в 0,1 секунды.

Безусловно, задачу можно решать с использованием таймера / счетчика. При этом нужно использовать режим 16 битового делителя. Максимальный интервал задержки от таймера можно получить около 0,05 сек.

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

Наши рекомендации