Мегаобучалка Главная | О нас | Обратная связь


Команды вызова подпрограмм



2019-10-11 414 Обсуждений (0)
Команды вызова подпрограмм 0.00 из 5.00 0 оценок




С командами вызова подпрограмм в микроконтроллерах AVR семейства Classiс дело обстоит так же, как и с командами безусловного перехода. Для вызова подпрограмм имеется две команды: команда относительного вызова (RCALL) и команда косвенного вызова (ICALL).

 

3.2.7 Относительный вызов подпрограммы – команда RCALL

Если не принимать во внимание некоторые отличия, описанные ниже, эта команда работает так же, как и команда относительного безусловного перехода RJMP.

Команда RCALL сохраняет в стеке значение счетчика команд. Затем содержимое счетчика команд увеличивается или уменьшается на некоторое значение, являющееся операндом команды (рисунок 3.2). Поскольку операнд представляет собой 12-разрядное число, максимальная величина перехода составляет от -2047 до +2048 слов (±4 Кбайт).

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

Команда относительного вызова подпрограмм выполняется за 3 машинных цикла, два из которых затрачиваются на сохранение в стеке двух байт счетчика команд.

 

Рисунок 3.2 – Относительная адресация памяти программ

 

3.2.8 Косвенный вызов подпрограммы – команда ICALL

Если не принимать во внимание некоторые отличил, описанные ниже, эта команда работает так же, как и команда косвенного безусловного перехода IJMP.

Команда ICALL сохраняет в стеке значение счетчика команд. Затем в счетчик команд загружается содержимое индексного регистра. Поскольку индексный регистр 16-разрядный, максимально возможная величина перехода составляет 64 Кслов (128 Кбайт). Поэтому данная команда не имеет ограничений по области действия, т.к. наибольший объем памяти программ микроконтроллеров семейства – всего 8 Кбайт. Как и команда RCALL, команда косвенного вызова подпрограмм выполняется за 3 машинных цикла.

 

Команды возврата из подпрограмм

В конце каждой подпрограммы обязательно должна находиться команда возврата из нее. В системе команд микроконтроллеров семейства имеются две таких команды. Для возврата из обычной подпрограммы, вызываемой командами RCALL и ICALL, используется команда RET. Для возврата из подпрограммы обработки прерывания используется команда RETI.

Обе команды восстанавливают из стека содержимое счетчика команд, сохраненное там перед переходом к подпрограмме. Команда возврата из подпрограммы RETI дополнительно устанавливает в "1" флаг общего разрешения прерываний I регистра SREG, сбрасываемый аппаратно при возникновении прерывания.

На выполнение каждой из команд возврата из подпрограммы требуется 4 машинных цикла.

Программы исследования ветвящихся участков программ

;************************************************************

;**** Исследование ветвящихся участков программ

.include "2313 def . inc "

rjmp RESET;

RESET:

ldi r 31, low ( ramend )          ; формирование стека

out SPL , r 31                    ; в верхней части ОЗУ

 

;************************************************************

;**** Организация циклов при помощи команд условного перехода

;**** и относительного безусловного перехода

 

ldi r 16, 0 x 05        ; занесение кода $05 в регистр r 16

loop 1:

dec r 16              ;уменьшение содержимого r 16 íà1

breq equal              ;если равно нулю, то переход на "equal"

rjmp loop 1              ;иначе – на начало цикла "loop 1"

equal :  

nop                         ;пустая операция

 

loop 2:

inc r 16                    ;увеличение  содержимого r 16 на1

cpi r 16,$05         ;сравнение r 16 с числом $05

brne loop 2         ;если не равно нулю, то переход на " loop 2"

rjmp ok                   ;иначе – выход из цикла " ok "

ok :

nop                     ;пустая операция

 

;************************************************************

;**** Организация ветвления при помощи команды  косвенного

;**** безусловного перехода ijmp через регистр  z

 

.EQU loop3h = 0x01

.EQU loop3l = 0xff

ldi zl , loop 3 l ; занесение кода перехода в регистр zl (младш. часть кода)

ldi zh , loop 3 h ; занесение кода перехода в регистр zl (ст. ÷ часть кода)

nop

 

nop

. ORG 0 x 1 ff

nop

ijmp loop3

.EXIT

Исследование портов ввода-вывода

 

Общие сведения

Как и любые другие микроконтроллеры, микроконтроллеры AVR семейства Classic имеют порты ввода/вывода. Каждый порт состоит из определенного числа выводов, через которые микроконтроллер может принимать или передавать цифровые сигналы.

Количество доступных портов, или, если точнее, количество контактов ввода/вывода, является одним из основных параметров, влияющих на выбор конкретной модели микроконтроллера.

- AT90S1200 имеет два порта ввода/вывода: В (8-разрядный) и D (7-разрядный). Общее количество контактов ввода/вывода равно 15;

- AT90S2313 также имеет два порта ввода/вывода: В (8-разрядныЙ) и D (7-разряд-ный). Общее количество контактов ввода/вывода равно 15;

- AT90S/LS2323 имеет один 3-разрядный порт ввода/вывода В;

- AT90S/LS2343 имеет один 5-разрядный порт ввода/вывода В;

- AT90S/LS2333, AT90S/LS4433 имеют по три порта ввода/вывода: В (6-разряд-ный), С (6-разрядный) и D (8-разрядный). Общее количество контактов ввода/вывода равно 20;

- AT90S/LS4434, AT90S/LS8535 имеют по четыре 8-разрядных порт ввода/вывода А, В, С и D. Общее количество контактов ввода/вывод равно 32;

- AT90S4414, AT90S8515 также имеют по четыре 8-разрядных портов ввода/вывода А, В, С и D. Общее количество контактов ввода/выводе в этих моделях равно 32;

- АТ90С8534 имеет один 7-разрядный порт А и два входа внешних прерываний. В данном микроконтроллере присутствует также и 6-разрядный аналоговый входной порт. Таким образом, общее количество контактов ввода/вывода в этой модели равно 15;

Во всех микроконтроллерах семейства, за исключением АТ90С8534, большинство контактов ввода/вывода имеет дополнительные функции, поскольку эти выводы также используются периферийными устройствами микроконтроллера.

Конфигурирование каждой лини порта (задание направления передачи данных) может быть произведено программно в любой момент времени. Входные буферы портов построены по схеме триггера Шмитта. Для линий, сконфигурированных как входные, имеется возможность подключения внутреннего подтягивающего резистора сопротивлением 35...120 кОм между входом и проводом питания Uсс. Кроме того, если вывод (вход) с подключенным внутренним подтягивающим резистором подключить к общему проводу, он может служить источником тока.

Максимальная нагрузочная способность выходных буферов портов ввода/вывода при логическом "0" на выходе составляет 20 мА. Благодаря этому микроконтроллер может непосредственно управлять светодиодными индикаторами, биполярными и полевыми транзисторами, а также непосредственно быть подключенным ко многим типам датчиков.

Большинство выводов портов поддерживают альтернативные функции встроенных периферийных устройств микроконтроллера. Все порты являются двунаправленными портами ввода-вывода с опциональными подтягивающими резисторами.

 



2019-10-11 414 Обсуждений (0)
Команды вызова подпрограмм 0.00 из 5.00 0 оценок









Обсуждение в статье: Команды вызова подпрограмм

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас...
Как выбрать специалиста по управлению гостиницей: Понятно, что управление гостиницей невозможно без специальных знаний. Соответственно, важна квалификация...
Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (414)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.009 сек.)