- •Эрни Каспер Программирование на языке Ассемблера для микроконтроллеров семейства i8051
- •1.Что нужно знать программисту о микроконтроллерах семейства i8051
- •1.1.Общие сведения об архитектуре i8051
- •1.2.Правила записи команд микроконтроллера семейства i8051 на Ассемблере
- •1.3.Форматы и способы адресации данных
- •1.4.Форматы и способы адресации команд
- •1.5.Команды пересылки информации
- •1.6.Команды поразрядной обработки информации
- •1.7.Команды арифметических операций
- •1.8.Управляющие команды
- •2.Директивы ассемблера для микроконтроллеров семейства i8051
- •2.1.Общие понятия о процессах трансляции и компоновки
- •2.2.Обработка имен транслятором и компоновщиком
- •2.3.Директивы резервирования памяти и инициализации данных
- •2.4.Использование выражений в операндах
- •2.5.Директивы условной трансляции
- •2.6.Директивы подстановок
- •2.7.Директивы управления вводом и выводом
- •Глава 3.
- •3.Кросс-средства фирмы 2500 a.D. Software, Inc. Для семейства i8051
- •Глава 4
- •4.Программирование арифметических действий
- •4.1.Кодирование информации в микроконтроллере
- •4.2.Арифметические действия с большими числами
- •4.3.Арифметические действия с отрицательными числами
- •4.4.Контроль точности при программировании арифметических операций
- •Глава 5
- •5.Программирование вычисления функций
- •5.1.Возведение в квадрат и извлечение квадратного корня
- •5.2.Переход от десятичной системы счисления к двоичной и обратно
- •5.3.Вычисление функций при помощи таблиц
- •5.4.Вычисление обратной функции по таблице прямой функции
- •5.5.Компенсация систематических погрешностей при помощи таблиц
- •Глава 6
- •6.Программирование фильтрации сигналов
- •6.1.Особенности цифровой фильтрации сигналов
- •6.2.Программирование простейших фильтров нижних частот
- •6.3.Программирование фильтра для оценки параметров сигнала
- •6.4.Программирование медианного фильтра
- •Глава 7
- •7.Программирование взаимодействия с внешними устройствами
- •7.1.Общие вопросы взаимодействия
- •7.2.Порядок выполнения прерываний в микроконтроллерах семейства i8051.
- •7.3.Синхронизация работы программы внешним или внутренним сигналом
- •7.4.Программирование приема информации от датчиков
- •7.5.Программирование выдачи команд на исполнительные устройства
- •7.6.Программирование ввода и вывода информации для пользователя
- •8.Несколько рекомендаций о стиле программирования
- •8.1.Стиль программирования и использование ресурсов
- •8.2.Оформление исходного текста программы
- •8.3.Системы обозначений, выражения и простые подстановки
- •8.4.Применение подпрограмм и сложных текстовых подстановок
1.4.Форматы и способы адресации команд
Команды могут занимать от одного до трех байтов. Размер команды определяется кодом операции, записанным в первом байте, Дополнительные байты могут содержать адреса и/или данные. В символической записи команд как правило указываются все операнды. В машинных командах часть информации, необходимой для адресации, может содержаться в коде операции. При помощи байта кода операции можно закодировать 256 команд, но для микроконтроллера 8051 используется только 255. Код OA5h зарезервирован для дальнейшего развития семейства.
Адресация команд (то есть их выполнение) по порядку их расположения в ПЗУ называется естественной. При завершении чтения очередной команды содержимое программного счетчика содержит адрес кода операции следующей команды. Команды, в результате выполнения которых может быть изменен естественный порядок исполнения команд, называются управляющими. Передача управления может происходить в зависимости от выполнения некоторых условий, тогда это называется условной передачей управления (conditional jump). Если команда всегда передает управление в другую часть программы, то это называется безусловной передачей управления (unconditional jump). Некоторые из условных управляющих команд используют информацию, содержащуюся в слове состояния программы, а другие сами производят сравнение байтов или проверку содержимого битов ОЗУ. В операнде управляющей команды в общем случае должна содержаться информация для изменения кода в программном счетчике. Способы адресации управляющих команд в микроконтроллере типа 8051 различаются по дальности перехода на короткие (short), абсолютные (absolute) и длинные (long). Приведенные далее сведения по способам вычисления адреса, заносимого в программный счетчик управляющей командой, являются справочными. Для передачи управления программисту достаточно указать символический адрес перехода в соответствующем операнде ассемблерной команды.
При использовании короткого способа адресации в последнем байте команды содержится разность между адресом той команды, которой передается управления, и адресом команды, следующей за управляющей командой. Эта разность может составлять от -128 до +127. Для вычисления нового содержимого программного счетчика из содержимого последнего байта команды сначала формируется двухбайтовый код посредством записи старшего (знакового) бита во все разряды старшего байта. Затем двухбайтовый код прибавляется к содержимому программного счетчика. Такой способ часто называют относительным (relative).
Название абсолютного перехода унаследовано от предшествующей модели микроконтроллера, у которой объем ПЗУ был ограничен двумя килобайтами. При переходе к 64 Кбайт старое адресное пространство стали называть страницей (page). Поэтому 3 старших бита адреса перехода содержатся в коде операции, а 8 младших — во втором байте команды. Этот способ обеспечивает адресацию в пределах одной из 32 страниц ПЗУ, номер которой определяется 5 старшими разрядами кода операции. При абсолютном способе адресации 11 младших разрядов содержимого программного счетчика заменяются на содержимое адресной части команды. Для длинного перехода адресная часть команды состоит из двух байтов, содержимое которых заносится в программный счетчик. Короткий, абсолютный и длинный безусловные переходы обозначаются в мнемокодах команды начальными буквами S (Short), A (Absolute) и L (Long) соответственно.
Команды безусловного перехода можно разделить на команды без запоминания адреса возврата, команды с запоминанием адреса возврата и команды возврата. В последней разновидности команд безусловного перехода адресная часть отсутствует. Есть также команда безусловного перехода, использующая индексную адресацию. Более подробно о способах адресации будет рассказано в описании управляющих команд.
Эту главу мы завершаем описанием команд, разделенных функционально на следующие 4 группы: команды пересылки информации, команды поразрядной обработки информации, арифметические команды и управляющие команды. Существует одна команда, которую нельзя отнести ни к одной из групп, так как она не делает ничего в течение одного такта: NOP
Однако эта команда (No OPeration — нет операции) нужна для работы в реальном масштабе времени, чтобы обеспечить кратковременную задержку перед выполнением следующей команды.
