Счетчик команд и выполнение программы
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

Счетчик команд

Счетчик команд представляет собой регистр, в котором содержится адрес следующей исполняемой команды. Напрямую из программы он недоступен. Размер счетчика команд зависит от объема имеющейся памяти программ и составляет 12 разрядов.

При нормальном выполнении программы содержимое счетчика команд автоматически увеличивается на 1 или на 2 (в зависимости от выполняемой команды) в каждом машинном цикле. Этот порядок нарушается при вы­полнении команд перехода, вызова и возврата из подпрограмм, а также при возникновении прерываний.

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

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

Как и во всех микроконтроллерах AVR, в микроконтроллерах семейства Mega используется конвейерная обработка команд.

Абсолютный вызов подпрограммы — команда CALL

 

При выполнении команды после сохранения в стеке текущего значения счетчика команд в последний загружается число, являющееся операндом команды. С помощью этой команды можно осуществлять вызов в пределах всего адресного пространства имеющихся на сегодняшний день микроконтроллеров AVR.

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

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

Команда ICALL сначала сохраняет в стеке значение счетчика команд. Затем в счетчик команд загружается содержимое индексного регистра. Максимально возможная величина перехода составляет 64К слов (128 Кбайт), поэтому данная команда также не имеет ограничений по области действия.

Как и команда RCALL, команда косвенного вызова подпрограмм вы­полняется за 3 машинных цикла.

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

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

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

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

 

Стек

 

Во всех микроконтроллерах семейства стек реализован программно. Он размещается в памяти данных, и его глубина определяется только размером свободной области памяти программ. В качестве указателя стека во всех моделях используется пара регистров ввода/вывода SPH:SPL, расположенных по адресам $ЗЕ ($5Е) и $3D ($5D) соответственно. Так как после подачи напряжения питания (или после сброса) в регистрах содержится нулевое значение, в самом начале программы указатель стека необходимо проинициализировать, записав в него значение верхнего адреса памяти данных.

При вызове подпрограмм адрес команды, расположенной за командой вызова, сохраняется в стеке. Значение указателя стека при этом уменьшается на 2, т. к. для хранения счетчика команд требуется 2 байта. При возврате из подпрограммы этот адрес извлекается из стека и загружается в счетчик команд. Значение указателя стека соответственно увеличивается на 2. То же происходит и во время прерывания. При генерации прерывания адрес следующей команды сохраняется в стеке, а при возврате из подпрограммы обработки прерывания он восстанавливается из стека.

Во всех моделях микроконтроллеров семейства стек доступен программно. Для работы со стеком в наборе команд имеется две команды: команда занесения в стек (PUSH) и команда извлечения из стека (POP).



Порты ввода/вывода

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

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

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

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

Отличительной особенностью портов микроконтроллеров семейства Mega (как и всех микроконтроллеров AYR) при использовании их в качестве цифровых портов ввода/вывода общего назначения является реализация истинной функциональности вида «чтение/модификация/запись». Благо­даря этому можно выполнять операции над любым выводом (с помощью команд SBI и CBI), не влияя на другие выводы порта. Это относится к изме­нению режима работы контакта ввода/вывода, к изменению состояния вы­ходного буфера (для выходов) и к изменению состояния внутреннего подтя­гивающего резистора (для входов).

 

Дата: 2019-07-24, просмотров: 195.