Команды вызова подпрограмм
С командами вызова подпрограмм в микроконтроллерах 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 мА. Благодаря этому микроконтроллер может непосредственно управлять светодиодными индикаторами, биполярными и полевыми транзисторами, а также непосредственно быть подключенным ко многим типам датчиков. Большинство выводов портов поддерживают альтернативные функции встроенных периферийных устройств микроконтроллера. Все порты являются двунаправленными портами ввода-вывода с опциональными подтягивающими резисторами.
Популярное: Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас... Как выбрать специалиста по управлению гостиницей: Понятно, что управление гостиницей невозможно без специальных знаний. Соответственно, важна квалификация... Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (414)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |