Опрос состояния системы прерываний производится в конце каждого машинного цикла в фазе S5P2 , за исключением команд RETI и любых команд с обращением к регистрам IE и IP. От момента фиксации запроса на прерывания до обслуживания прерывания требуется от 38 до 86 периодов частоты fOSC , в зависимости от фазы поступления запроса и числа машинных циклов команды, во время выполнения которой поступил запрос.

При реализации прерывания аппаратным способом выполняется команда LCALL addr16, обеспечивающая запоминание в стеке текущего состояния программного счетчика (запоминание адреса возврата), и переход к стартовому адресу addr16 соответствующей процедуры обслуживания. С каждым источником запроса прерываний связан свой

стартовый адрес (вектор прерывания):

Внешнее прерывание INT0.

Прерывание таймера/счетчика ТС0.

Внешнее прерывание INT1.

Прерывание таймера/счетчика ТС1.

Прерывание последовательного порта.

2.7. Методы адресации и система команд семейства MCS-51

Система команд семейства MCS-51 ориентирована на организацию гибкого ввода-вывода данных через универсальные порты P0...P3 и первичную обработку информации. Особое внимание уделено операциям с битами и передаче управления по их значению. Команды, выполняющие такие операции, составляют многочисленную группу и образуют вместе с соответствующими аппаратными средствами так называемый «булев процессор» в составе архитектуры MCS-51.

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

2.7.1. Методы адресации

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

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

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

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

Ниже приведены основные методы адресации, используемые в системе команд семейства MCS-51.

Неявная адресация . В команде не содержится явных указаний об адресе участвующего в операции операнда или адресе, по которому помещается результат операции, но этот адрес подразумевается. В командах наиболее часто неявно адресуется аккумулятор как приемник результата операции. Например, результат сложения содержимого аккумулятора (A) и регистра R1 текущего банка данных командой ADD A,R1 записывается в неявно адресуемый аккумулятор. Вся указанная команда занимает в памяти один байт, в то время как адрес только аккумулятора (8Eh области SFR) содержит один байт.

Непосредственная адресация . В поле адреса команды содер-

жится не адрес операнда, а непосредственно сам операнд. На непосредственную адресацию указывает специальный символ # перед числом. Например, командой MOV A,#15h шестнадцатеричное число 15 (второй байт команды) загружается в аккумулятор. В системе команд непосредственная адресация обозначена как #data, где data – число

(data = 00h...FFh).

Прямая адресация . В поле адреса команды указан прямой адрес ячейки памяти данных, в которой находится или куда заносится операнд. Например, командой MOV A,15h содержимое ячейки DSEG с адресом 15h загружается в аккумулятор. Ячейка памяти имеет прямую адресацию, а аккумулятор - неявную. В зависимости от местонахождения адресуемого операнда, прямая адресация подразделяется на прямую регистровую и абсолютную.

Прямая регистровая адресация . В поле адреса команды указан прямой адрес регистра текущего регистрового банка. Регистров в каждом банке восемь, и для их адресации необходим трехбитовый прямой адрес. В мнемонике команд адресуемый регистр обозначен Rn, где n=0...7. Все поля команды умещаются в один байт. Такую адресацию называют короткой. Например, MOV R4,R1.

Прямая абсолютная адресация позволяет обратиться к любой ячейке DSEG и области SFR. Прямой адрес в этом случае занимает один байт, а команда – два байта. В системе команд байт прямого адреса обозначен словом direct (прямой) (direct = 00h…FFh). Например, команда MOV 80h,R2 (или MOV P0,R2) загружает содержимое регистра R2 текущего банка данных в порт Р0 (ячейка 80h области SFR). Если оба операнда имеют прямую абсолютную адресацию, то команда становится трехбайтовой (Например, MOV 80h,15h).

Косвенная адресация . В поле адреса указан адрес ячейки памяти, в которой находится прямой адрес операнда. В системе команд на косвенную адресацию указывает специальный символ @. Свойством

хранить прямой адрес обладают регистры R0 и R1 (@Ri, i = 0,1) каждого регистрового банка. Например, если содержимое регистра R1 текущего банка регистров равно 15h, то команда MOV A,@R1 выполнит то же действие, что и приведенная выше команда MOV A,15h – загрузит содержимое ячейки памяти DSEG с адресом 15h в аккумулятор. Однако команда MOV A,@R1 однобайтовая, но самое главное, здесь имеется возможность программным способом изменять адрес, изменяя содержимое регистра R1.

Относительная адресация . При относительной адресации прямой адрес формируется путем сложения базового адреса с адресным полем команды. В качестве базового адреса используется содержимое программного счетчика, а адресное поле команды представляет собой восьмиразрядное смещение rel (relative - относительный). Число rel интерпретируется командой как целое со знаком, представленное в дополнительном коде. Диапазон его представления - (-128...+127). При определении числа rel следует учесть, что программный счетчик указывает на следующую, подлежащую выполнению, команду. Относительная адресация широко используется в командах передачи управления, что позволяет создавать перемещаемые программные модули. Команды передачи управления с относительной адресацией позволяют организовать ветвление относительно текущего положения программного счетчика PC в обе стороны на (-128...+127) байт.

В программах на языке ассемблера в поле смещения можно указать метку, на которую необходимо перейти. В результате трансляции ассемблер вычислит величину смещения, если она не превышает (-128…+127). В противном случае будет выдано сообщение об ошибке.

Базовая адресация представляет разновидность относительной адресации. Прямой адрес в этом случае формируется путем сложения адреса, указанного в команде, с содержимым базового регистра, в котором хранится базовый адрес. Функцию базового регистра в семействе MCS-51 выполняет регистр-указатель данных DPTR или программный счетчик PC. Этот тип адресации особенно удобен при обработке таблиц и массивов данных. В командах MOVC A,@A+DPTR и MOVC A,@A+PC 16-разрядный прямой адрес формируется как сумма содержимого регистров DPTR и A или PC и A.

Страничная адресация . При использовании страничной адресации память разбивается на ряд страниц одинаковой длины. Адресация страниц осуществляется отдельным регистром страниц, а адресация ячеек памяти внутри страницы – адресом, содержащимся в команде. Прямой адрес формируется конкатенацией (присоединением) адреса страниц и адреса ячейки памяти внутри страницы. В команде MOVX A,@Ri функцию регистра страниц выполняет порт P2 (старший байт адреса), а содержимое регистра Ri (младший байт адреса) задает адрес внутри страницы. При этом память разбивается на 256 страниц по 256 ячеек в каждой из них.

Стековая адресация используется в безадресных командах и представляет собой сочетание автоинкрементного и автодекрементного способов адресации, работающее по принципу LIFO (L ast I nput – F irst O utput)- «последним вошел – первым вышел». Стек располагается в DSEG и растет в сторону увеличения адреса. Адрес вершины стека содержится в указателе стека SP. При записи байта в стек сначала выполняется инкремент содержимого SP, а затем по этому адресу производится запись. При чтении байта из стека сначала выполняется чтение по адресу, на который указывает SP, а затем - декремент SP. При использовании стека необходимо учитывать, что глубина стека (максимальное число ячеек памяти, занятых под стек) аппаратными средствами не контролируется. При чрезмерном увеличении стека могут быть заняты не предназначенные для него ячейки памяти с потерей информации в них. Аппаратно стек используется для сохранения адреса возврата при обслуживании прерывания.

2.7.2. Система команд семейства MCS-51

Система команд представлена в таблицах П2.1...П2.6 приложения 2. В таблицах указаны наименование команды, ее мнемоника, двоичный код операции, влияние выполняемой команды на флаги C, OV, AC и P, длина команды в байтах (Б) и время выполнения в машинных циклах (Ц), а также содержание преобразования, выполняемого командой. В качестве разделителя адресных полей в командах используется запятая. Для улучшения читаемости можно добавить пробелы после запятой, если их поддерживает используемый ассемблер.

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

Группа команд операций передачи данных (таблица П2.1 ) со-

держит команды MOV (передачи данных между DSEG и RSEG), MOVC (между CSEG и A), MOVX (между XSEG и A), команды обращения к стеку PUSH и POP, а также две команды обмена XCH и XCHD. Все команды передачи данных, у которых приемником является аккумулятор, устанавливают флаг паритета P содержимого аккумулятора, а команды с прямой адресацией, у которых приемником является регистр PSW, изменяют все флаги. Наиболее емкой является команда MOV, использующая четыре способа адресации: прямой регистровый (A, Rn, DPTR), прямой (direct), косвенный (@Ri), непосредственный (#data, #data16). Второй операнд команды является источником, первый – приемником. Для указания приемника служат три способа адресации (кроме непосредственного), а для указания источника все четыре. Трехбайтовая команда MOV direct,direct обеспечивает пересылку между двумя любыми ячейками памяти (DSEG и SFR), включая RSEG. Для обмена с RSEG предусмотрены специальные двух- и однобайтовые форматы:

Специальная команда MOV DPTR,#data16 позволяет загрузить 16-разрядный указатель DPTR значением data16.

Команда MOVC позволяет считывать информацию из программной памяти CSEG не в регистр команд устройства управления, а в аккумулятор операционного устройства. В команде используются два способа адресации: по базе DPTR и относительно PC. В обоих случаях целое без знака смещение (индекс) хранится в аккумуляторе. Приемником результата также служит аккумулятор. Команда позволяет выполнять быструю перекодировку по таблицам.

Обращение к внешней памяти осуществляется с помощью команды MOVX . Обмен производится по байтам между аккумулятором и внешним XSEG. Ячейка XSEG может быть адресована двумя способами: косвенно через 16-разрядный указатель DPTR и странично косвенно через 8-разрядный указатель Ri, i=0,1. В последнем случае регистром страниц служит регистр P2.

Безадресные команды PUSH и POP обеспечивают передачу дан-

ных между DSEG, RSEG и SFR.

Команда обмена XCH обеспечивает двухсторонний обмен байтами, а команда XCHD - младшими тетрадами байтовых операндов.

Группа команд арифметических операций (таблица П2.2 ) со-

держит команды сложения ADD, сложения с учетом переноса ADDC, вычитания с учетом заема SUBB, увеличения и уменьшения на единицу INC и DEC, десятичной коррекции сложения в двоично-десятичном (BCD) коде упакованного формата, умножения MUL и деления DIV. Операции выполняются над беззнаковыми целыми числами. В операциях сложения и вычитания первым операндом и приемником результата служит аккумулятор. Для определения второго операнда используется прямая регистровая, прямая абсолютная, непосредственная и косвенная адресации. Операции INC и DEC применимы к аккумулятору, прямо адресуемому регистру, прямо или косвенно адресуемой ячейке памяти. Кроме того, операция INC применима к содержимому 16разрядного регистра указателя DPTR.

В операциях целочисленного умножения и деления без знака участвуют аккумулятор и регистр B. При умножении 8-разрядное значение A умножается на 8-разрядное значение B, а 16-разрядный результат записывается в пару BA. При этом регистр B хранит старшую часть произведения. Флажок OV устанавливается, если произведение больше 255. При делении 8-разрядного значения A на 8-разрядное значение B частное записывается в A, а остаток в B. При попытке деления на 0 устанавливается флаг переполнения OV.

Команда десятичной коррекции аккумулятора DA размещается после команды сложения. Слагаемые необходимо представить в BCD коде. Коррекция выполняется стандартным способом.

Группа команд логических операций (таблица П2.3 ) содержит три типовые операции: ANL – логическое И, ORL – логическое ИЛИ, XRL – логическое исключающее ИЛИ. Источником первого операнда

служит либо аккумулятор A, либо прямо адресуемая ячейка памяти. Второй операнд задается одним из четырех основных методов адресации. В состав группы входят также одноместные операции над содержимым аккумулятора: CLR - очистки, CPL – инверсии, а также RL, RLC, RR и RRC – операции циклического и расширенного сдвигов вправо и влево. Сюда же включена операция обмена тетрад в аккумуляторе SWAP,которая может интерпретироваться как циклический сдвиг байта на четыре разряда.

Группа команд операций с битами (таблица П2.6 ) содержит ко-

манды SETB – установки бита в 1, CLR – сброса бита в 0, CPL – инверсии бита, ANL и ORL – логическое И и логическое ИЛИ содержимого флага C и прямо адресуемого бита, MOV – пересылка бита.

В битовых операциях флаг C исполняет роль булевого аккумулятора. В качестве операндов используется содержимое флага C или прямо адресуемого бита bit области BSEG. В операциях ANL и ORL можно использовать содержимое прямо адресуемого бита (bit) или инверсию содержимого (/bit).

В эту группу входят также команды условного перехода с относительным 8-разрядным смещением rel. Условный переход может быть осуществлен как при установленном (команда JB), так и при сброшенном (команда JNB) бите. Особо следует отметить команду JBC, которая при установленном бите реализует ветвление и одновременно с этим сбрасывает бит в 0.

Группа команд передачи управления (таблицы П2.4 и П2.5 ) со-

держит команды безусловного перехода AJMP, LJMP, SJMP, JMP, условного перехода JZ, JNZ, CJNE, вызова ACALL, LCALL, возврата RET, RETI и модификации с условным переходом DJNZ. Сюда же включена пустая команда NOP.

В командах передачи управления широко применяется относительная адресация, позволяющая создавать перемещаемые программные модули. В качестве относительного адреса выступает 8-разрядное смещение rel – байт со знаком, обеспечивающее переход на (–128… +127) байт относительно текущего положения PC. Для перехода в любую другую точку 64 Кбайтового адресного пространства может быть использован либо прямой addr16, либо косвенный @A+DPTR адрес. В последнем случае содержимое A интерпретируется как целое без знака. Вариант короткой прямой адресации addr11 внутри 2 Кбайтовой текущей страницы введен для совместимости с семейством MCS-48.

Все эти типы адресации применяются в командах перехода. В командах вызова используются только прямой addr16 и внутристраничный addr11 способы адресации. Во всех условных командах используется только относительная адресация.

Когда микроконтроллер опознает запрос на прерывание, он генерирует команду LCALL addr16 , что автоматически обеспечивает запоминание адреса возврата в стеке. Информация о состоянии программы (содержимое регистра PSW) автоматически не сохраняется. При этом

Система команд ОМЭВМ предоставляет большие возможности обработки данных, обеспечивает реализацию логических, арифметических операций, а также управление в режиме реалиного времени. Реализована побитовая, потетрадная (4 бита), побайтовая (8 бит) и 16-разрядная обработка данных. БИС семейства MCS-51 - 8-разрядная ОМЭВМ: ПЗУ, ОЗУ, регистры специального назначения, АЛУ и внешние шины имеют байтовую организацию. Двухбайтовые данные используются только регистром-указателем (DPTR) и счетчиком команд (РС). Следует отметить, что регистр-указатель данных может быть использован как двухбайтовый регистр DPTR или как два однобайтовых регистра специального назначения DPH и DPL. Счетчик команд всегда используется как двухбайтовый регистр. Набор команд ОМЭВМ имеет 42 мнемонических обозначения команд для конкретизации 33 функций этой системы. Синтаксис большинства команд ассемблерного языка состоит из мнемонического обозначения функции, всед за которым идут операнды, указывающие методы адресации и типы данных. Различные типы данных или режимы адресации определяются установленными операндами, а не изменениями мнемонических обозначений. Систему команд условно можно разбить на пять групп:
  • Арифметические команды;
  • Логические команды;
  • Команды передачи данных;
  • Команды битового процессора;
  • Команды ветвления и передачи управления.
Существуют следующие типы адресации операндов-источников:
  • Регистровая адресация
  • Прямая адресация
  • Косвенно-регистровая адресация
  • Непосредственная адресация
  • Косвенно-регистровая адресация по сумме базового и индексного регистров
Арифметические команды В наборе команд имеются следующие арифметические операции: сложение, сложение с учетом флага переноса, вычитание с заемом, инкременирование, декременирование, сравнение, десятичная коррекция, умножение и деление. В АЛУ производятся действия над целыми числами без знака. В двухоперандных операциях: сложение (ADD), сложение с переносом (ADDC) и вычитание с заемом (SUBB) аккумулятор является первым операндом и принимает результат операции. Вторым операндом может быть рабочий регистр выбранного банка рабочих регистров, регистр внутренней памяти данных с косвенно-регистровой и прямой адресацией или байт непосредственных данных. Указанные операции влияют на флаги: пеполнения, переноса, промежуточного переноса и флаг четности в слове состояния процессора (PSW). Использование разряда переноса позволяет многократно повысить точность при операциях сложения (ADDC) и вычитания (SUBB). Выполнение операций сложения и вычитания с учетом знака может быть осуществлено с помощью программного управления флагом переполнения (OV) регистра PSW. Флаг промежуточного переноса (АС) обеспечивает выполнение арифметических операций в двоично-десятичном коде. Операции инкременирования и декременирования на флаги не влияют. Операции сравнения не влияют ни на операнд назначения, ни на операнд источника, но они влияют на флаги переноса. Существуют три арифметические операции, которые выполняются только на аккумуляторе: две команды проверки содержимого аккумулятора А (JZ, JNZ), и команда десятичной коррекции при сложении двоично-десятичных кодов. При операции умножения содержимое аккумулятора А умножается на содержимое регистра В и результат размещается следующим образом: младший байт в регистре В, старший - в регистре А. В случае выполнения операции деления целое от деления помещается в аккумулятор А, остаток от деления - в регистр В. Логические команды с байтовыми переменными Система команд позволяет реализовать логические операции: "И", "ИЛИ", "ИСКЛЮЧАЮЩЕЕ ИЛИ" на регистре-аккумуляторе (А) и байте-источнике. Вторым операндом (байтом-источником) при этом может быть рабочий регистр в выбранном банке рабочих регистров; регистр внутреннего ОЗУ, адресуемый с помощью косвенно-регистровой адресации; прямоадресуемые ячейки внутреннего ОЗУ и регистры специального назначения; непосредственная величина. Указанные логические операции могут быть реализованы на любом прямоадресуемом регистре внутреннего ОЗУ или регистре специального назначения с использованием в качестве второго операнда содержимого аккумлятора А или непосредственных данных. Существуют логические операции, которые выполняются только на аккумуляторе: сброс и инвертирование всех восьми разрядов А; циклический сдвиг влево и впрво; циклический сдвиг влево и вправо с учетом флага переноса; обмен местами старшей и младшей тетрад (ниблов) внутри аккумулятора. Команды передачи данных Таблицы символов (кодов), зашитые в ПЗУ программы могут быть выбраны с помощью команд передачи данных с использованием косвенной адресации. Байт константы может быть передан в аккумулятор из ячейки памяти программ, адресуемой суммой базового регистра (PC или DPTR) и индексного регистра (содержимого А). Это обеспечивает, например, удобное средство реализации алгоритма преобразования кода ASCII в семисегментный код. Любая ячейка 256-байтового блока внешнего ОЗУ данных может быть выбрана с использованием косвенно-регистровой адресации через регистры указатели R0 или R1 (выбранного банка рабочих регистров). Ячейка внутри адресного пространства 64 Кбайт внешнего ОЗУ также может быть выбрана с использованием косвенно-регистровой адресации через регистр-указатель данных DPTR. Команды передачи между прямоадресуемыми регистрами позволяют заносить величину из порта в ячейку внутреннего ОЗУ без использования рабочих регистров или аккумулятора. В логическом процессоре любой прямоадресуемый бит может быть помещен в бит переноса и наоборот. Содержимое аккумулятора может быть обменено с содержимым рабочих регистров (выбранного банка) и с содержимым адресуемых с помощью косвенно-регистровой адресации ячеек внутреннего ОЗУ, а также с содержимым прямо-адресуемых ячеек внутреннего ОЗУ и с содержимым регистров специального назначения. Младший нибл (разряды 3-0) содержимого аккумулятора, может быть обменен с младшим ниблом содержимого ячеек внутреннего ОЗУ, выбираемых с помощью косвенно-регистровой адресации. Команды битового процессора Битовый процессор является частью архитектуры МК семейства MCS51 и его можно рассматривать как независимый процессор побитовой обработки. Битовый процессор выполняет набор команд, имеет свое побитово-адресуемое ОЗУ и свой ввод-вывод. Команды, оперирующие с битами, обеспечивают прямую адресацию 128 битов (0-127) в шестнадцати ячейках внутреннего ОЗУ (ячейки с адресами 20Н-2FH) и прямую побитовую адресацию регистров специального назначения, адреса которых кратны восьми. Каждый из отдельно адресуемых битов может быть установлен в "1", сброшен в "0", инвертирован, проверен. Могут быть реализованы переходы: если бит установлен; если бит не установлен; переход, если бит установлен, со сбросом этого бита; бит может быть перезаписан в (из) разряда переноса. Между любым прямоадресуемым битом и флагом переноса могут быть произведены логические операции "И", "ИЛИ", где результат заносится в разряд флага переноса. Команды побитовой обработки обеспечивают реализацию сложных функций комбинаторной логики и оптимизацию программ пользователя. Команды ветвления и передачи управления Адресное пространство памяти программ не имеет страничной организации, что позволяет свободно перемщать фрагменты программы внутри адресного пространства, при этом не требуется перезасылка (изменение) номера страницы. Перемещение отдельных фрагментов программы обеспечивает возможность использования перемещаемых программных модулей различными программами. Команды 16-разрядных переходов и вызовов подпрограмм позволяют осуществлять переход в любую точку адресного пространства памяти программ объемом 64 Кбайт. Команды 11-разрядных переходов и вызовов подпрограмм обеспечивают переходы внутри программного модуля емкостью 2 Кбайт. В системе команд имеются команды условных и безусловных переходов относительно начального адреса слеующей программы в пределах от (РС)-128 до (ЗС)+127. Команды проверки отдельных разрядов позволяют осуществлять условные переходы по состоянию "0" или "1" прямоадресуемых битов. Команды проверки содержимого аккумулятора (на ноль/не ноль) позволяют осуществлять условные переходы по содержимому А. Косвенно-регистровые переходы в системе команд обеспечивают ветвление относительно базового регистра (содержимого DPTR или РС) со смещением, находящимся в аккумуляторе А. Регистровая адресация Регистровая адресация используется для обращения к восьми рабочим регистрам выбранного банка рабочих регистров (эти же регистры могут быть выбраны с помощью прямой адресации и косвенно-регистровой адресации как обычные ячейки внутреннего ОЗУ данных). Регистровая адресация используется для обращения к регистрам А, В, АВ (сдвоенному регистру), DPTR и к флагу переноса С. Использование регистровой адресации позволяет получать двухбайтовый эквивалент трехбайтовых команд прямой адресации. Прямая адресация Прямая байтовая адресация используется для обращения к ячейкам внутренней памяти (ОЗУ) данных (0-127) и к регистрам специального назначения. Прямая побитовая адресация используется для обращения к отдельно адресуемым 128 битам, расположенным в ячейках с адресами 20H-2FH и к отдельно адресуемым битам регистров специального назначения. Старший бит байта кода прямого адрема выбирает одну из двух групп отдельно адремуемых битов, расположенных в ОЗУ или регистрах специального назначения. Прямо адресуемые биты с адресами 0-127 (00H-7FH) расположены в блоке из 16 ячеек внутреннего ОЗУ, имеющих адреса 20H-2FH. Указанные ячейки последовательно пронумерованы от младшего бита младшего байта до старшего бита старшего байта. Отдельно адресуемые биты в регистрах специального назначения пронумерованы следующим образом: пять старших разрядов адреса совпадают с пятью старшими разрядами адреса самого регистра, а три младших - определяют местоположение отдельного ибта внутри регистра. Косвенно-регистровая адресация Косвенно-регистровая адресация используется для обращения к ячейкам внутренннего ОЗУ данных. В качестве регистров-указателей используется регистры R10, R1 выбранного банка регистров. В командах PUSH и POP используется содержимое указателя стека (SP). Косвенно-регистровая адресация используется также для обращения к внешней памяти данных. В этом случае с помощью регистров-указателей R0 и R1 (выбранного банка рабочих регистров) выбирается ячейка из блока в 256 байт внешней памяти данных. Номер блока предварительно задается содержимым порта Р2. 16-разрядный указатель данных (DPTR) может быть использован для обращения к любой ячейке адресного пространства внешней памяти данных объемом до 64 Кбайт. Непосредственная адресация Непосредственная адресация позволяет выбрать из адресного пространства памяти программ константы, явно указанные в команде. Косвенно-регистровая адресация по сумме базового и индексного регистров Косвенно-регистровая адресация по сумме: базовый регистр плюс индексный регистр (содержимое аккумулятора А) упрощает просмотр таблиц, зашитых в памяти программ. Любой байт из таблицы может быть выбран по адресу, определяемому суммой содержимого DPTR или РС и содержимого А. Таблица обозначений и символов, используемых в системе команд
Обозначение, символ Назначение
А Аккумулятор
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> Логическое "ИСКЛЮЧАЮЩЕЕ ИЛИ" для перемнных-байтов

Архитектура семейства 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

Архитектура семейства 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 - восьмиразрядный регистр, используемый во время операций умножения и деления. Для других инструкций он может рассматриваться как дополнительный сверхоперативный регистр.

Аккумулятор - восьмиразрядный регистр, предназначенный для приема и хранения результата, полученного при выполнении арифметико-логических операций или операций сдвига

Блок последовательного интерфейса и прерываний (ПИП) предназначен для организации ввода-вывода последовательных потоков информации и организации системы прерывания программ. В состав блока входят:

  1. - буфер ПИП,
  2. - логика управления,
  3. - регистр управления,
  4. - буфер передатчика,
  5. - буфер приемника,
  6. - приемопередатчик последовательного порта,
  7. - регистр приоритетов прерываний,
  8. - регистр разрешения прерываний,
  9. - логика обработки флагов прерываний и схема выработки вектора.

Счетчик команд (Program Counter) предназначен для формирования текущего 16-разрядного адреса внутренней памяти программ и 8/16-разрядного адреса внешней памяти программ. В состав счетчика команд входят 16-разрядные буфер РС, регистр РС и схема инкремента (увеличения содержимого на 1).

Память данных (RAM) предназначена для временного хранения информации, используемой в процессе выполнения программы.

Порты P0, P1, P2, P3 являются квазидвунаправленными портами ввода - вывода и предназначены для обеспечения обмена информацией ОЭВМ с внешними устройствами, образуя 32 линии ввода- вывода.

Устройство таймеров В базовых моделях семейства имеются два программируемых 16-битных таймера/счетчика (T/C0 и T/C1), которые могут быть использованы как в качестве таймеров, так и в качестве счетчиков внешних событий

Регистр состояния программы (PSW) предназначен для хранения информации о состоянии АЛУ при выполнении программы.

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

Регистр указателя данных (DPTR) предназначен для хранения 16-разрядного адреса внешней памяти данных или памяти программ.

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



ПЛАН ЛЕКЦИИ

1. Введение

2. Арифметические и логические инструкции

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

4. Булевы операции

5. Инструкции переходов

1. Введение

Система команд MCS-51 поддерживает единый набор инструкций, который предназначен для выполнения 8-битовых алгоритмов управления исполнительными устройствами. Существует возможность использования быстрых методов адресации к внутреннему ОЗУ, осуществления битовых операций над небольшими структурами данных. Имеется развернутая система адресации однобитовых переменных как самостоятельного типа данных, позволяющая использовать отдельные биты в логических и управляющих командах булевой алгебры.

Режимы адресации : набор команд MCS-51 поддерживает следующие режимы адресации. Прямая адресация : операнд определяется 8-битовым адресом в инструкции. Прямая адресация используется только для младшей половины внутренней памяти данных и регистров SFR . Косвенная адресация : инструкция адресует регистр, содержащий адрес операнда. Данный вид адресации используется для внешнего и внутреннего ОЗУ. Для указания 8-битовых адресов могут использоваться регистры R0 и R1 выбранного регистрового банка или указатель стека SP . Для 16-битовой адресации используется только регистр указателя данных DPTR .

Регистровые инструкции : регистры R0–R7 текущего регистрового банка могут быть адресованы через конкретные инструкции, содержащие 3-битовое поле, указывающее номер регистра в самой инструкции. В этом случае соответствующее поле адреса в команде отсутствует. Операции с использованием специальных регистров : некоторые инструкции используют индивидуальные регистры (например, операции с аккумулятором, DPTR , и т. д.). В данном случае адрес операнда вообще не указывается в команде. Он предопределяется кодом операции.

Непосредственные константы : константа может находиться прямо в команде за кодом операции.

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

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

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

Таблица. Обозначения и символы, используемые в системе команд

Обозначение, символ

Назначение

Аккумулятор

Регистры текущего выбранного банка регистров

Номер загружаемого регистра, указанного в команде

direct

Прямо адресуемый 8-битовый внутренний адрес ячейки данных, который может быть ячейкой внутреннего ОЗУ данных (0–127) или регистром специальных функций SFR (128–255)

Косвенно адресуемая 8-битовая ячейка внутреннего ОЗУ данных

8-битовое непосредственное данное, входящее в код операции (КОП)

dataH

Старшие биты (15–8) непосредственных 16-битовых данных

dataL

Младшие биты (7­–0) непосредственных 16-битовых данных

11-битовый адрес назначения

addrL

Младшие биты адреса назначения

8-битовый байт смещения со знаком

Бит с прямой адресацией, адрес которого содержит КОП, находящийся во внутреннем ОЗУ данных или регистре специальных функций SFR

a15, a14...a0

Биты адреса назначения

Содержимое элемента Х

Содержимое по адресу, хранящемуся в элементе Х

Разряд М элемента Х


+

*
AND
OR
XOR
/X

Операции:
сложения
вычитания
умножения
деления
логического умножения (операция И)
логического сложения (операция ИЛИ)
сложения по модулю 2 (исключающее ИЛИ)
инверсия элемента Х

Мнемонические обозначения функций однозначно связаны с конкретными комбинациями способов адресации и типами данных. Всего в системе команд возможно 111 таких сочетаний.

2. Арифметические и логические инструкции

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

ADD A ,7 F 16 – прибавить к содержимому регистра А число 7 F 16 и результат сохранить в регистре А;

ADD A ,@ R 0 – прибавить к содержимому регистра А число, адрес которого (@ – commercial at ) хранится в регистре R 0 (косвенная адресация), и результат сохранить в регистре А;

ADD A,R7 – прибавить к содержимому регистра А содержимое регистра R 7 и результат сохранить в регистре А;

ADD A,#127 – прибавить к содержимому регистра А число, адрес ячейки хранения которого 127 (# – символ номера), и результат сохранить в регист ­- ре А.

Все арифметические инструкции выполняются за один машинный цикл за исключением команды INC DPTR (смещение указателя данных DPTR на следующий байт), требующей два машинных цикла, а также операций умножения и деления, выполняемых за 4 машинных цикла. Любой байт во внутренней памяти данных может быть инкрементирован и декрементирован без использования аккумулятора.

Инструкция MUL AB производит умножение (multiplication – умножение) данных в аккумуляторе на данные, находящиеся в регистре B, помещая произведение в регистры A (младшая половина) и B (старшая половина).

Инструкция DIV AB делит (division – деление) содержимое аккумулятора на значение в регистре B, оставляя остаток в B, а частное – в аккумуляторе.

Инструкция DA A предназначена для двоично-десятичных арифметических операций (арифметические операции над числами, представленными в двоично-десятичном коде). Она не делает преобразования двоичного числа в двоично-десятичное , а лишь обеспечивает правильный результат при сложении двух двоично-десятичных чисел.

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

ANL A ,7 F 16 – логическое умножение содержимого регистра А на число 7 F 16 и результат сохраняется в регистре А;

ANL A ,@ R 1 – логическое умножение содержимого регистра А на число, адрес которого хранится в регистре R 1 (косвенная адресация), и результат сохранить в регистре А;

ANL A,R6 – логическое умножение содержимого регистра А на содержимое регистра R 6, и результат сохранить в регистре А;

ANL A,#53 – логическое умножение содержимого регистра А на число, адрес ячейки хранения которого 53 16 , и результат сохранить в регистре А.

Все логические операции над содержимым аккумулятора выполняются за один машинный цикл, остальные – за два. Логические операции могут производиться над любым из нижних 128 байтов внутренней памяти данных или над любым регистром SFR (регистров специальных функций) в режиме прямой адресации без использования аккумулятора.

Операции циклического сдвига RL A, RLC A и т. д. перемещают содержимое аккумулятора на один бит вправо или влево. В случае левого циклического сдвига младший бит перемещается в старшую позицию. В случае правого циклического сдвига происходит обратное .

Операция SWAP A осуществляет обмен младшей и старшей тетрад в аккумуляторе.

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

Команда MOV dest,src позволяет пересылать данные между ячейками внутреннего ОЗУ или областью регистров специальных функций SFR без использования аккумулятора. При этом работа с верхней половиной внутреннего ОЗУ может осуществляться только в режиме косвенной адресации, а обращение к регистрам SFR – только в режиме прямой адресации.

Во всех микросхемах MCS-51 стек размещается непосредственно в резидентной памяти данных и увеличивается вверх. Инструкция PUSH вначале увеличивает значение в регистре указателя стека SP , а затем записывает в стек байт данных. Команды PUSH и POP используются только в режиме прямой адресации (записывая или восстанавливая байт), но стек является всегда доступным при косвенной адресации через регистр SP . Таким образом, стек может использовать и верхние 128 байт памяти данных. Эти же соображения исключают возможность использования стековых команд для адресации регистров SFR .

Инструкции передачи данных включают в себя 16-битовую операцию пересылки MOV DPTR,#data16 , которая используется для инициализации регистра указателя данных DPTR при просмотре таблиц в программной памяти или для доступа к внешней памяти данных.

Операция XCH A,byte применяется для обмена данными между аккумулятором и адресуемым байтом. Команда XCHD A,@Ri аналогична предыдущей , но выполняется только для младших тетрад , участвующих в обмене операндов.

Для доступа к внешней памяти данных используется только косвенная адресация. В случае однобайтных адресов используются регистры R0 или R1 текущего регистрового банка, а для 16-разрядных – регистр указателя данных DPTR . При любом методе доступа к внешней памяти данных аккумулятор играет роль источника либо приемника информации.

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

MOVC A,@A+DPTR ;

MOVC A,@A+PC .

В качестве базового адреса таблицы используется содержимое соответственно регистра указателя данных DPTR или PC (программного счётчика), а смещение берется из A . Эти команды используются исключительно для чтения данных из программной памяти, но не для записи в нее.

4. Булевы операции

Микросхемы MCS-51 содержат в своем составе «булевый» процессор. Внутреннее ОЗУ имеет 128 прямо адресуемых бит. Пространство регистров специальных функций SFR может также поддерживать до 128 битовых полей. Битовые инструкции осуществляют условные переходы, пересылки, сброс, инверсии, операции «И» и «ИЛИ». Все указанные биты доступны в режиме прямой адресации.

Бит переноса CF в регистре специальных функций «слово состояния программы PSW » используется как однобитный аккумулятор булевого процессора.

5. Инструкции переходов

Адреса операций переходов обозначаются на языке ассемблера меткой либо реальным значением в пространстве памяти программ. Адреса условных переходов ассемблируются в относительное смещение – знаковый байт, прибавляемый к программному счетчику PC в случае выполнения условия перехода. Границы таких переходов лежат в пределах между минус 128 и 127 относительно первого байта, следующего за инструкцией. В регистре специальных функций «слово состояния программы PSW » отсутствует флажок нуля, поэтому инструкции JZ и JNZ проверяют условие «равно нулю» как тестирование данных в аккумуляторе.

Существует три вида команды безусловного перехода: SJMP , LJMP и AJMP – различающиеся форматом адреса назначения. Инструкция SJMP кодирует адрес как относительное смещение, и занимает два байта. Дальность перехода ограничена диапазоном от минус 128 до 127 байт относительно инструкции, следующей за SJMP .

В инструкции LJMP используется адрес назначения в виде 16-битной константы. Длина команды составляет три байта. Адрес назначения может располагаться в любом месте памяти программ.

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

Существует два вида команды вызовы подпрограммы: LCALL и ACALL . Инструкция LCALL использует 16-битный адрес вызываемой подпрограммы. В данном случае подпрограмма может быть расположена в любом месте памяти программ. Инструкция ACALL использует 11-битный адрес подпрограммы. В этом случае вызываемая подпрограмма должна быть расположена в одном 2К-байтном блоке с инструкцией, следующей за ACALL . Оба варианта команды кладут на стек адрес следующей команды и загружают в программный счетчик PC соответствующее новое значение.

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

Инструкция DJNZ предназначена для управления циклами. Для выполнения цикла N раз надо загрузить в счетчик байт со значением N и закрыть тело цикла командой DJNZ , указывающей на начало цикла.

Команда CJNE сравнивает два своих операнда как беззнаковые целые и производит переход по указанному в ней адресу, если сравниваемые операнды не равны. Если первый операнд меньше, чем второй, то бит переноса CF устанавливается в «1».

Все команды в ассемблированном виде занимают 1, 2 или 3 байта.




Close