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

Если требуется, чтобы подпрограмма обработала такого же вида данные, но расположенные во внешней памяти данных или в памяти программ, то начальный адрес этих данных можно передать через двухбайтовый параметр-указатель. В качестве такого указателя обычно используется регистр-указатель данных DPTR. Пример передачи в подпрограмму адреса начального элемента строки в качестве параметра, написанный на языке программирования ASM-51, приведен в листинге 8.14. Строка расположена в памяти программ. Ее размещение в памяти программ показано в последней строке этого же листинга.

Если в подпрограмму нужно передать в качестве параметра двухбайтовое число, то для этого используется пара регистров (обычно это регистры R6 — старший байт и R7 — младший байт). Пример вызова подпрограммы с передачей в нее двухбайтового параметра, написанный на языке программирования ASM-51 приведен в листинге 8.15.

Если в подпрограмму нужно передать четырехбайтовое значение (параметр типа long, unsigned long или float), то обычно используются регистры R4—R7 (регистр R4 — старший байт). Пример вызова подпрограммы с передачей в нее четырехбайтового параметра, написанный на языке программирования ASM-51, приведен в листинге 8.16.

В примере показана передача в подпрограмму константы, но точно также можно передавать и переменную, расположенную во внутренней или внешней памяти данных. Для этого достаточно просто скопировать переменную в регистры R4—R7.

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

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

Y=sin(x);   //Вызов подпрограммы-функции

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

mov А, х    ;Передать в подпрограмму вычисления синуса параметр х

call sin       ;Вызвать подпрограмму вычисления синуса

mov Y,A     ;Запомнить значение, которое вернула подпрограмма в Y

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

Элементарные операции на языке программирования ассемблер чаще всего вычисляются табличным способом, подобным тому, как проводилась перекодировка чисел, приведенная в примере листинга 8.5. Сами значения функций при этом рассчитываются заранее с использованием компьютера и вводятся во внутреннюю память микроконтроллера при помощи директивы db.

Подпрограмма-функция может возвращать и многобайтовые переменные. Для этого можно использовать два или четыре регистра. Обычно используются регистровая пара R6, R7 или регистры R4—R7. Можно также рассчитать и записать во внутренней памяти полученную в результате вычислений в подпрограмме переменную-массив или структуру и передать в вызывающую программу адрес этой переменной при помощи регистра-указателя R0 или R1.

Кроме подпрограмм-процедур и подпрограмм-функций существует особый класс подпрограмм. Это подпрограммы обработки аппаратных прерываний.

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

Подпрограммы обработки прерываний вызываются аппаратурой в произвольный момент времени и не могут иметь параметров. Подпрограммы обработки прерываний не могут быть подпрограммами-функциями. При переходе на подпрограмму обслуживания прерывания автоматически запрещается возникновение последующих прерываний, поэтому при возвращении из подпрограммы обработки прерывания должны быть разрешены прерывания. Команда возвращения из подпрограммы ret не снимает запрет на обработку прерываний, поэтому возврат из подпрограммы обработки прерывания может быть осуществлен только специальной командой возврата из подпрограммы обслуживания прерывания reti. Пример подпрограммы обработки прерывания на языке программирования ASM-51 приведен в листинге 8.17.

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

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

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

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

Чарльз Платт

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

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

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

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

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

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

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