Читаем Занимательно о микроконтроллерах полностью

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

Команда pageiength (n) определяет максимальное число строк на странице файла листинга. Это число включает заголовок страницы. Количество строк в странице может изменяться в пределах от 10 до 65535.

Команда pagewidth (n) определяет максимальное число символов в строке листинга. Количество символов в строке листинга может изменяться от 72 до 132.

Реализация подпрограмм на языке ASM-51

Подпрограммы на языке программирования ASM-51 выносятся отдельно от основного текста программы. Обычно при программировании на языке ассемблера подпрограммы размещают после основного текста программы для того, чтобы случайно не передать управление подпрограмме не командой ее вызова, а последовательным выполнением операторов основной программы. Такая ситуация может произойти из-за того, что ассемблер назначает адреса машинным командам в порядке их написания. Если в начале поместить исходный текст подпрограммы, то именно она будет размещена по нулевому адресу памяти программ и после сброса будет выполнена раньше, чем основная программа. При завершении подпрограммы команда ret передаст управление по неопределенному адресу памяти программ, что может привести к непредсказуемым последствиям. Если в начале поместить текст основной программы, то после сброса начнется ее выполнение. После инициализаций (включая установку начального значения указателя стека) основная программа всегда содержит бесконечный цикл. Это означает, что попасть в подпрограмму в результате последовательного выполнения операторов невозможно. Управление в нее может быть передано только с помощью команды вызова подпрограммы lcall.

Исходный текст подпрограммы начинается с метки, которая одновременно является именем подпрограммы. Именно это имя указывается в качестве операнда в команде вызова подпрограммы lcall. Возвращение из подпрограммы к команде, следующей за вызовом подпрограммы, осуществляется оператором ret. Все команды, которые должны быть выполнены в подпрограмме, располагаются между меткой, обозначающей имя подпрограммы, и оператором возврата из подпрограммы.

В главе 7 говорилось, что подпрограммы бывают двух видов: подпрограммы-функции и подпрограммы-процедуры. На языке программирования ассемблер проще реализуются подпрограммы-процедуры, поэтому сначала рассмотрим их.

Реализация подпрограмм-процедур на языке ASM-51

Подпрограмма-процедура вызывается командами процессора lcall и асаll. В языке программирования ASM-51 допустимо использование директивы call. Выполняя ее, компилятор автоматически подбирает наиболее подходящую к данному случаю по размеру команду. В листинге 8.11 приведен пример использования подпрограммы-процедуры для управления последовательным портом.

Передача переменных-параметров в подпрограмму

В приведенном на листинге 8.11 примере байт передается в подпрограмму через глобальную переменную G_Per. Однако программа будет эффективнее при использовании подпрограммы с параметрами. Мы уже знаем, что параметр подпрограммы — это локальная переменная, а при использовании локальных переменных могут значительно снизиться требования к памяти данных, т. к. локальные переменные разных подпрограмм располагаются в одних и тех же ячейках памяти микроконтроллера. Для размещения локальных переменных лучше всего использовать внутренние регистры процессора, т. к. кроме экономии памяти данных, использование регистровых переменных приводит к сокращению длины машинных команд, а значит и длины всей программы в целом. Кроме того, использование подпрограмм с параметрами позволяет вызывать подпрограмму саму из себя, например, при реализации рекурсивных алгоритмов. На языке ASM51 для передачи параметра размерностью один байт обычно используется аккумулятор, как показано в примере программы, приведенном в листинге 8.12.

Часто пример использования подпрограммы с параметрами более понятно выглядит на языке высокого уровня. Вызов подпрограммы с одним параметром, приведенный в листинге 8.12, на языке программирования С выглядел бы следующим образом:

PeredatByte(56);    //Передать число 56

PeredatByte(37);    //Передать число 37

Часто в подпрограмме требуется обрабатывать большие объемы данных, такие как массивы или структуры. При обращении к массивам или структурам, расположенным во внутренней памяти данных в качестве указателя адреса обычно используются регистры R0 или R1. Пример передачи в подпрограмму массива в качестве параметра, написанный на языке программирования ASM-51, приведен в листинге 8.13.

Перейти на страницу:

Похожие книги

Электроника для начинающих (2-е издание)
Электроника для начинающих (2-е издание)

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

Чарльз Платт

Радиоэлектроника / Технические науки
Электроника для начинающих
Электроника для начинающих

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

Паоло Аливерти , Чарльз Платт

Радиоэлектроника / Технические науки
Искусство схемотехники. Том 3 (Изд.4-е)
Искусство схемотехники. Том 3 (Изд.4-е)

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

Пауль Хоровиц , Уинфилд Хилл

Техника / Радиоэлектроника