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

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

Чарльз Платт

Радиоэлектроника / Технические науки
PIC-микроконтроллеры. Все, что вам необходимо знать
PIC-микроконтроллеры. Все, что вам необходимо знать

Данная книга представляет собой исчерпывающее руководство по микроконтроллерам семейства PIC компании Microchip, являющегося промышленным стандартом в области встраиваемых цифровых устройств. В книге подробно описывается архитектура и система команд 8-битных микроконтроллеров PIC, на конкретных примерах изучается работа их периферийных модулей.В первой части излагаются основы цифровой схемотехники, математической логики и архитектуры вычислительных систем. Вторая часть посвящена различным аспектам программирования PIC-микроконтроллеров среднего уровня: описывается набор команд, рассматривается написание программ на ассемблере и языке высокого уровня (Си), а также поддержка подпрограмм и прерываний. В третьей части изучаются аппаратные аспекты взаимодействия микроконтроллера с окружающим миром и обработки прерываний. Рассматриваются такие вопросы, как параллельный и последовательный ввод/вывод данных, временные соотношения, обработка аналоговых сигналов и использование EEPROM. В заключение приводится пример разработки реального устройства. На этом примере также демонстрируются простейшие методики отладки и тестирования, применяемые при разработке реальных устройств.Книга рассчитана на самый широкий круг читателей — от любителей до инженеров, при этом для понимания содержащегося в ней материала вовсе не требуется каких-то специальных знаний в области программирования, электроники или цифровой схемотехники. Эта книга будет также полезна студентам, обучающимся по специальностям «Радиоэлектроника» и «Вычислительная техника», которые смогут использовать ее в качестве учебного пособия при прослушивании соответствующих курсов или выполнении курсовых проектов.

Сид Катцен

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

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

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

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