Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПМПУ / andr.doc
Скачиваний:
40
Добавлен:
20.04.2015
Размер:
710.14 Кб
Скачать

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, прямого адреса, макрорасширения или адреса перехода в памяти программ. Если метка заканчивается двоеточием, то она может быть расположена в любом месте строки, в противном случае метка должна начинаться в начале строки.

Поле комментарий содержит пояснения различного характера - может объяснять применение той или иной команды или директивы, содержать описание алгоритма участка или МК-программы в целом и др. Это поле не является обязательным и при использовании должно начинаться символом ;.