
- •Программирование микроконтроллеров mcs-51
- •Учебное издание
- •Предисловие
- •1.1. Микроконтроллеры фирмы Intel
- •1.2. Микроконтроллеры фирмы Philips
- •1.3. Микроконтроллеры фирм Siemens, Atmel
- •2.1. Программная модель микроконтроллера 8051
- •2.2. Ассемблерный язык микроконтроллера 8051
- •2.2.1. Система команд языка асм51
- •2.2.2. Директивы языка асм51
- •Include операнды
- •3.1. Этапы проектирования ппо
- •3.2. Кросс-ассемблер x8051
- •Input Filename:
- •2500 A.D. 8051 Macro Assembler - Version 4.02a
- •Input Filename: prim.Asm
- •3.3. Кросс-редактор связей Link
- •Input Filename:
- •3.4. Примеры микроконтроллерных программ
- •Оглавление
- •Глава 1. Состав семейства mcs-51. . . . . . . 5
- •Глава 2. Особенности программирования
- •Глава 3. Технология разработки прикладного
2.2. Ассемблерный язык микроконтроллера 8051
Для эффективной разработки прикладного программного обеспечения микропроцессоров и микроконтроллеров необходимо выбрать подходящий язык программирования. Если требуется не очень сложная и при этом быстрая и компактная программа, которая не содержит сложных вычислительных операций, то для ее написания лучше выбрать язык низкого уровня (язык ассемблера). Язык высокого уровня (ЯВУ) следует выбрать в том случае, если необходимо производить сложные вычисления: операции над 16-, 32-разрядными числами, числами с плавающей точкой и др. Очень часто наиболее подходящей является смешанная модель, где критичные к быстродействию части программы написаны на ассемблере, а вычислительные процедуры реализованы на ЯВУ, например, на Си.
Изучение языков программирования целесообразнее всего начинать с ассемблера, поскольку он дает наглядное представление о функционировании аппаратной части целевого микропроцессора (микропроцессора для которого разрабатывается прикладная программа), что в конечном счете обеспечивает получение оптимальных схемотехнических решений разрабатываемой микропроцессорной техники. Язык ассемблера относится к группе машинно-ориентированных языков. Иначе говоря, каждому типу микропроцессоров или микроконтроллеров соответствует свой ассемблерный язык.
Оператором языка ассемблера микроконтроллера 8051 (языка АСМ51) является строка исходного текста микроконтроллерной программы (МК-программы), имеющая следующий формат:
-
метка
команда/ директива
;комментарий
операцияоперанды
Поле команда/ директиваявляется главным полем строки и состоит из поляоперацияи поляоперанды, разделенных пробелом.
Поле операциясодержит мнемоническое обозначение команды или директивы ассемблера, которое является сокращением (аббревиатурой) полного английского наименования выполняемого действия. Например:MOV - move - переслать,JMP - jump - перейти,DB - define byte - определить байт. Кроме того, полеоперацияможет содержать символическое имя ассемблерной макрокоманды.
Поле операнды зависит от поляоперацияи может указывать группу разделенных запятой операндов, либо может быть исключено вообще.
Операнды ассемблерных команд определяют тип используемых данных (бит, байт, 2-байтовое слово), способ адресации этих данных и адреса переходов в области памяти программ микроконтроллера. Различают следующие способы адресации данных: регистровый, прямой, косвенно-регистровый и непосредственный.
Регистровая адресация обеспечивает обращение к байтовому содержимому регистров A, Bили регистровR0-R7выбранного банка, к 2-байтовому содержимому регистраDPTRи к битовому содержимому флага переносаC, при этом в качестве операндов используются принятые имена перечисленных программно доступных элементов, а также символические имена (только для регистровR0-R7), определяемые пользователем.
Прямая адресация применяется для обращения к байтовому содержимому 128-ми ячеек резидентной памяти данных или 21-го регистра специальных функций, а также к битовому содержимому 16-ти ячеек РПД или 11-ти РСФ, допускающих побитовое обращение (рис.2). При прямой адресации данных в поле операндыуказывается прямой адрес используемых ячейки РПД, регистра специальных функций или бита. Этот адрес может быть задан числом, символическим именем, выражением, именем (только для РСФ и битов РСФ). Имена регистров специальных функций приведены в табл.2.1, а имена битов РСФ - в табл.2.3, табл.2.5-2.8. Кроме того, имя бита РСФ может быть представлено структурой вида:имя РСФ.номер бита. Например, имя пятого бита регистраTCONможно записать какTCON.5, имя второго бита аккумулятора - какA.2 и т.д.
С помощью косвенно-регистровой адресации обеспечивается обращение к байтовому содержимому 128-ми ячеек РПД, при этом адрес используемой ячейки определяется содержимым указателя стека SP или одного из регистровR0, R1выбранного банка. Косвенно-регистровая адресация используется также для обращения к внешней памяти данных. В этом случае регистром-указателем может быть 16-разрядный указатель данныхDPTRили один из упомянутых выше регистровR0, R1.Для работы с данными, "зашитыми" в виде констант в память программ микроконтроллера, применяется косвенно-регистровая адресация по сумме: базовый регистр (содержимоеDPTRили программного счетчикаPC)плюс индексный регистр (содержимое аккумулятораA). Любая такая константа может быть выбрана по адресу, который вычисляется сложением содержимогоDPTR (PC) с содержимымA. Операнд, определяющий косвенно-регистровую адресацию данных, задается именем регистра-указателя или символическим именем (только дляR0 и R1) с обязательным префиксом@.
При непосредственной адресации данные, предназначенные для обработки, непосредственно указываются в поле операндыи могут быть представлены в нем числом, символическим именем или выражением с обязательным префиксом#.
Аналогичным образом (за исключением префикса #) представляется операнд, определяющий адрес перехода в памяти программ микроконтроллера.
В качестве операндов ассемблерных директив и макрокоманд обычно используются числа, символические имена, выражения, имена программно доступных элементов микроконтроллера (только для директивы REGи макрокоманд), а в ряде случаев мнемоники языка АСМ51 (только для макрокоманд).
Символические имена, являющиеся операндами команд или директив, должны быть обязательно определены с помощью соответствующих директив (EQU, VAR или REG)языка АСМ51. Кроме того, символическое имя адреса в памяти программ может быть определено использованием этого имени в поле меткаодной из строк исходного текста МК-программы. Отметим, что корректное символическое имя должно быть представлено комбинацией букв латинского алфавита и цифр и начинаться с буквы, при этом указанная комбинация допускает использование символа подчеркивания.
Применяемые в качестве операндов числа приводятся с указанием системы счисления (СС), для чего используется суффикс (латинская буква, стоящая после числа):B - для двоичной СС,Q- для восьмеричной СС,D - иH - соответственно для десятичной и шестнадцатеричной СС. Число без суффикса считается десятичным.
Выражение, используемое в поле операнды, вычисляется в процессе трансляции исходной МК-программы и представляет собой совокупность символических имен и (или) чисел (в формате 2-байтовых слов), содержащую следующие основные операторы:
"+" - сложение (третий уровень приоритета);
"-" - вычитание (третий уровень приоритета);
"" - умножение (четвертый уровень приоритета);
"/" - деление (четвертый уровень приоритета);
"" - возведение в степень (пятый уровень приоритета);
.OR.- ИЛИ (первый уровень приоритета);
.AND. - И (второй уровень приоритета);
.XOR. - исключающее ИЛИ (первый уровень приоритета);
.NOT. - отрицание (шестой уровень приоритета);
"<" (">") - выделение младшего (старшего) байта 2-байтового слова (шестой уровень приоритета).
Оператор с более высоким уровнем приоритета выполняется в первую очередь. Если в выражении присутствуют операторы с одинаковым уровнем приоритета, то вычисления производятся слева направо. Чтобы изменить указанный порядок выполнения расчетов допускается использовать скобки. В качестве примера приведем выражение <.NOT.13H+1, реализующее процедуру преобразования числа 13H в дополнительный код и эквивалентное числу 0EDH, которое будет получено при трансляции исходной МК-программы.
Поле метка не является обязательным, отделяется от полякоманда/ директивапробелом и может содержать символическое имя непосредственных данных, одного из регистровR0-R7, прямого адреса, макрорасширения или адреса перехода в памяти программ. Если метка заканчивается двоеточием, то она может быть расположена в любом месте строки, в противном случае метка должна начинаться в начале строки.
Поле комментарий содержит пояснения различного характера - может объяснять применение той или иной команды или директивы, содержать описание алгоритма участка или МК-программы в целом и др. Это поле не является обязательным и при использовании должно начинаться символом ;.