Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь 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; просмотров: 238; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.214 (0.009 с.) |