Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Передача переменных-параметров в подпрограммуСодержание книги
Поиск на нашем сайте
В приведенном на листинге 23.11 примере байт передается в подпрограмму через глобальную переменную G_Per. Однако программа будет эффективнее при использовании подпрограммы с параметрами. Мы уже знаем, что параметр подпрограммы— это локальная переменная, а при использовании локальных переменных могут значительно снизиться требования к памяти данных, так как локальные переменные разных подпрограмм располагаются в одних и тех же ячейках памяти микроконтроллера. Для размещения локальных переменных лучше всего использовать внутренние регистры процессора, так как кроме экономии памяти данных, использование регистровых переменных приводит к сокращению длины машинных команд, а значит и длины всей программы в целом. Кроме того, использование подпрограмм с параметрами позволяет вызывать подпрограмму саму из себя, например, при реализации рекурсивных алгоритмов. На языке ASM51 для передачи параметра размерностью один байт обычно используется аккумулятор как показано в примере программы, приведенном в листинге 23.12. Листинг 23.12. Пример подпрограммы-процедуры с передачей параметра через аккумулятор ... MOV A,#56;Передать число 56 через CALL PeredatByte;последовательный порт ... MOV A,#37;Передать число 37 через CALL PeredatByte;последовательный порт ...
;******************************************** ;Подпрограмма передачи байта ;через последовательный порт ;******************************************** PeredatByte: JB TI, $;Если предыдущий байт передан MOV SBUF, A;то передать очередной байт RET Часто пример использования подпрограммы с параметрами более понятно выглядит на языке высокого уровня. Вызов подпрограммы с одним параметром, приведенный в листинге 23.12, на языке программирования C выглядел бы следующим образом: PeredatByte(56); //Передать число 56 PeredatByte(37); //Передать число 37 Часто в подпрограмме требуется обрабатывать большие объемы данных, такие как массивы или структуры. При обращении к массивам или структурам, расположенным во внутренней памяти данных в качестве указателя адреса обычно используются регистры R0 или R1. Пример передачи в подпрограмму массива в качестве параметра, написанный на языке программирования ASM-51 приведен в листинге 23.13. Листинг 23.13. Пример подпрограммы-процедуры с передачей адреса массива через регистр R0 ... MOV R0,#Massiv;Задать адрес обрабатываемого массива CALL ObrabotatMassiv;Вызвать подпрограмму обработки массива ... Если требуется, чтобы подпрограмма обработала такого же вида данные, но расположенные во внешней памяти данных или в памяти программ, то начальный адрес этих данных можно передать через двухбайтовый параметр-указатель. В качестве такого указателя обычно используется регистр-указатель данных DPTR. Пример передачи в подпрограмму адреса начального элемента строки в качестве параметра, написанный на языке программирования ASM-51 приведен в листинге 23.14. Строка расположена в памяти программ. Ее размещение в памяти программ показано в последней строке этого же листинга. Листинг 23.14. Пример вызова подпрограммы-процедуры с передачей адреса строки через регистр DPTR ... MOV DPTR,#Stroka;Задать адрес первого байта строки CALL PeredatStroky;Вызвать подпрограмму передачи строки ... Stroka: db ‘Напечатать строку’ Если в подпрограмму нужно передать в качестве параметра двухбайтовое число, то для этого используется пара регистров (обычно это регистры R6 – старший байт и R7 – младший байт). Пример вызова подпрограммы с передачей в нее двухбайтового параметра, написанный на языке программирования ASM-51 приведен в листинге 23.15. Листинг 23.15. Пример вызова подпрограммы-процедуры с передачей в нее двухбайтного числа (параметра) через регистры R7 и R6 ... ;Пример передачи в подпрограмму двухбайтового числа MOV R7,#56;Передать младший байт MOV R6,#0;Передать старший байт CALL Podprogr;Вызвать подпрограмму ... Если в подпрограмму нужно передать четырехбайтовое значение (параметр типа long, unsigned long или float), то обычно используются регистры R4–R7 (регистр R4 – старший байт). Пример вызова подпрограммы с передачей в нее четырехбайтового параметра, написанный на языке программирования ASM-51 приведен в листинге 23.16. Листинг 23.16. Пример вызова подпрограммы-процедуры с передачей в нее четырехбайтного числа (параметра) через регистры R4–R6 ... ;Пример передачи в подпрограмму четырехбайтового числа MOV R7,#56;Передать младший байт MOV R6,#0 MOV R5,#0 MOV R4,#0;Передать старший байт CALL Podprogr;Вызвать подпрограмму ... В примере показана передача в подпрограмму константы, но точно также можно передавать и переменную, расположенную во внутренней или внешней памяти данных. Для этого достаточно просто скопировать переменную в регистры R4–R7.
|
||||
Последнее изменение этой страницы: 2017-02-07; просмотров: 196; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.137.177.204 (0.005 с.) |