Читаем PIC-микроконтроллеры. Все, что вам необходимо знать полностью

За исключением операции записи адреса возврата (стадии 1 и 2), команда call функционирует точно также, как и команда goto. Соответственно, она тоже выполняется за два машинных цикла в связи с необходимостью сброса стека для удаления команды, расположенной вслед за командой call и уже загруженной на вершину конвейера. Схожи эти команды и тем, что абсолютный 11-битный адрес в коде команды call расширяется в 13-битный адрес памяти программ с помощью 3-го и 4-го битов регистра PCLATH, как показано на Рис. 5.17 (стр. 153). Дальние вызовы подпрограмм, расположенных в диапазоне адресов h’07FF’…h’1FFF’, требуются только в тех микроконтроллерах с 14-битным ядром, размер памяти программ которых составляет более 2048 слов, например в PIC16F877.

Командой, завершающей подпрограмму, должна быть команда return. Эта команда извлекает адрес возврата из стека и помещает его в счетчик команд, как показано на Рис. 6.3, в. Исполнение команды return происходит следующим образом:

1. Декрементируется указатель стека.

2. 13-битный адрес, адресуемый указателем стека, копируется из стека в счетчик команд.

Таким образом, независимо от того, откуда была вызвана подпрограмма, сразу же после ее завершения выполнение вернется к команде, следующей за командой call.

Команда retlw[93] похожа на обычную команду return, за исключением того, что помещает заданное число в рабочий регистр. Так, чтобы после возврата из подпрограммы в W оказалось число h’FF’ (-1), скажем, для индикации ошибки, можно использовать команду retlw -1. Обе команды возврата сбрасывают конвейер и соответственно выполняются за два машинных цикла.

Прелесть стекового механизма в том, что он поддерживает вложенные подпрограммы. Рассмотрим ситуацию, показанную на Рис. 6.4, где основная программа вызывает подпрограмму первого уровня SR1, которая, в свою очередь, вызывает подпрограмму второго уровня SR2. Чтобы в конечном счете вернуться обратно в основную программу, последовательность действий при возврате должна в точности соответствовать последовательности действий при входе. Это обеспечивается LIFO-структурой стека, который автоматически поддерживает произвольные вложенные последовательности, причем глубина вложенности ограничена только размером стека. То есть в микроконтроллерах среднего семейства число уровней вложенности равно восьми. Стек может даже обрабатывать ситуацию, когда подпрограмма вызывает саму себя! Такая подпрограмма называется рекурсивной. Как мы увидим в главе 7, стековый механизм также используется и для обработки прерываний. Поэтому в системах, использующих как подпрограммы, так и прерывания, глубина вложенности будет немного меньше. Этот способ настолько удобен, что практически все микропроцессоры и микроконтроллеры осуществляют поддержку подпрограмм подобным образом.

Рис. 6.4.Вложенные подпрограммы

Поскольку стек совместно со своим указателем является частью «железа» микроконтроллера и не требует инициализации, программист должен учитывать только следующие моменты:

• Вызов подпрограмм должен осуществляться с помощью команды call.

• Точка входа в подпрограмму должна быть помечена (эта метка станет именем подпрограммы).

• Последней командой в подпрограмме должна быть команда return или retlw, причем последняя используется для загрузки в рабочий регистр заданной константы при возврате из подпрограммы (см. Программу 6.6).

В качестве упражнения давайте напишем подпрограмму формирования задержки длительностью 1 мс, которая указывалась на Рис. 6.2. Программное формирование задержки заключается в простом «ничегонеделании» в течение требуемого времени. Обычно это реализуется с помощью цикла, в котором заданная константа декрементируется до нуля, как показано на Рис. 6.5. Выбирая соответствующее значение константы, можно сформировать задержку требуемой длительности. Понятно, что эта задержка будет зависеть от частоты тактового сигнала микроконтроллера. В примерах данной главы предполагается, что тактовая частота равна 4 МГц, что соответствует длительности машинного цикла 1 мкс (см. также Программу 12.8 на стр. 401).

Рис. 6.5.Формирование задержки при помощи цикла

Рассмотрим подпрограмму, блок-схема которой приведена на Рис. 6.5. В данной подпрограмме в рабочий регистр помещается константа N, и это число инкрементируется до достижения нулевого значения в цикле, тело которого состоит из трех команд. После завершения цикла осуществляется выход из подпрограммы с использованием команды return.

Программа 6.1. Подпрограмма формирования 1-мс задержки

Перейти на страницу:

Все книги серии Программируемые системы

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

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

Сид Катцен

Радиоэлектроника

Похожие книги

Электроника для начинающих (2-е издание)
Электроника для начинающих (2-е издание)

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

Чарльз Платт

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

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

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

Радиоэлектроника / Технические науки
Искусство схемотехники. Том 3 (Изд.4-е)
Искусство схемотехники. Том 3 (Изд.4-е)

Широко известная читателю по предыдущим изданиям монография известных американских специалистов посвящена быстро развивающимся областям электроники. В ней приведены наиболее интересные технические решения, а также анализируются ошибки разработчиков аппаратуры: внимание читателя сосредотачивается на тонких аспектах проектирования и применения электронных схем. На русском языке издается в трех томах. Том 3 содержит сведения о микропроцессорах, радиотехнических схемах, методах измерения и обработки сигналов, принципах конструирования аппаратуры и проектирования маломощных устройств, а также обширные приложения. Для специалистов в области электроники, автоматики, вычислительной техники, а также студентов соответствующих специальностей вузов и техникумов.

Пауль Хоровиц , Уинфилд Хилл

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