Программный Счетчик
2.13.1. Одним из наиболее важных регистров процессора является программный счетчик (PC – Program Counter), который следит за ходом выполнения программы процессором и содержит адрес команды, расположенной в программной памяти вслед за выполняемой командой [ 1 ].
2.13.2. Блок-схема алгоритма реализации программы процессором МК приведена на рис. 2.13. При аппаратном сбросе МК происходит обнуление программного счетчика, вследствие чего первой командой, выполняемой процессором, будет команда, код которой хранится в программной памяти по адресу 0000H. После выборки каждого байта команды из программной памяти МК процессор автоматически инкрементирует программный счетчик (см. п. 2.9.4). Таким образом, в тот момент, когда процессор начинает выполнение команды, в программном счетчике уже находится адрес команды, которая будет выполняться следующей, если текущая команда не изменит ход выполнения программы или не произойдет прерывание программы.
2.13.3. Для того, чтобы изменить ход выполнения программы, используются команды передачи управления (см. табл. 2.4), которые можно разделить на три подгруппы: условные команды, безусловные команды и команды обслуживания подпрограмм.
Команды безусловной передачи управления (LJMP, AJMP и SJMP) приводят к загрузке в программный счетчик нового содержимого, вследствие чего происходит ветвление программы. При программировании на языке ассемблера А8051 (см. подраздел 3.2) допускается использование обобщенного имени команды безусловной передачи управления JMP. В процессе трансляции программы (см. подраздел 3.3) команда JMP в зависимости от длины перехода в программе заменяется командой LJMP, AJMP или SJMP.
В командах условной передачи управления сначала проверяется истинность какого-либо условия, а затем, если условие выполняется, происходит загрузка нового содержимого в программный счетчик, а если нет – выполняется следующая команда. Проверке условия может предшествовать выполнение арифметической операции, например, уменьшение на 1 содержимого регистра (команда DJNZ).
Рис. 2.13. Алгоритм реализации программы процессором МК
2.13.4. Поскольку область программной памяти, начиная с адреса 03Н, зарезервирована для векторов прерываний (см. подраздел 2.16), по адресу 00Н в программной памяти обычно располагается команда безусловного перехода на начало программы.
Стек
2.14.1. Стек(stack) – последовательная динамическая структура данных, организованная по принципу LIFO(last-in, first-out) – “последним пришел, первым вышел”. При записи данных в стек каждый новый элемент данных помещается на вершину стека. Элемент, записанный в стек последним, будет первым считан с вершины стека. На дне стека находится элемент, записанный в стек первым.
2.14.2. В микропроцессорных системах под стек отводится часть оперативной памяти. Данные, записанные в стек, доступны для выборки произвольным путем, т.е. по адресу. Для того, чтобы область памяти стала стеком, в системе должен быть указатель вершины стека (регистр-указатель стека), в котором содержится адрес последнего записанного в стек элемента. При обращении к стеку используют регистровую адресацию через регистр-указатель стека. Таким образом, регистр-указатель стека освобождает программиста от необходимости следить за тем, по какому абсолютному адресу записываются в память или выбираются из памяти данные. В качестве регистра-указателя системного стека (т.е. стека, к которому автоматически обращается центральный процессор микропроцессорной системы при выполнении ряда команд) обычно используется один из регистров общего назначения. Выбор конкретного регистра определяется архитектурой системы. В качестве регистра-указателя пользовательского стека, который организуется программистом для временного хранения данных своей программы, может быть использован любой регистр общего назначения по усмотрению самого программиста. Организация пользовательского стека не является обязательной, поскольку для своих целей программист может использовать системный стек.
2.14.3. В МК 80С51 системный стек размещается во внутренней памяти данных, а в качестве регистра-указателя стека используется регистр специальных функций SP(Stack Pointer). При аппаратном сбросе МК (по сигналу RST) в регистр SP автоматически заносится значение 07H. По мере поступления новых данных стек распространяется в сторону увеличения адресов.
Для обращения к системному стеку в системе команд МК есть две специальные команды: PUSH (загрузка в стек) и POP (извлечение из стека).
При выполнении команды PUSH addr сначала автоматически увеличивается на единицу содержимое регистра SP, а затем производится пересылка байта, расположенного во внутренней памяти данных или в регистре специальных функций по адресу addr, в ячейку памяти с адресом (SP). По команде POP addr операции выполняются в обратном порядке: сначала производится пересылка байта из ячейки внутренней памяти данных с адресом (SP) по адресу addr, а затем уменьшение на единицу содержимого SP.
Системный стек автоматически используется процессором микроконтроллера при обращении к подпрограммам (см. подраздел 2.15) и обслуживании прерываний (см. подраздел 2.16).
Источник
15. Программный счётчик. Его назначение, основные характеристики, особенности использования.
Программный счётчик (РС – Program Counter) используется для указания следующей команды выполняемой программы. Это счётчик с параллельным вводом и параллельным выводом. В процессорах с принстонской архитектурой содержимое РС поступает по шине данных в схему управления памятью, указывая адрес считываемой команды. Программные счётчики часто входят в состав схемы управления памятью – это позволяет избежать передачи адреса по внутренней шине данных.
Основные характерные особенности программного счётчика следующие:
– параллельная загрузка нового содержимого с шины данных;
– возможность возврата к адресу первой команды программы (возможность сброса);
– реализация счёта на увеличение (инкремента) для адресации следующей команды.
Сигналы, обеспечивающие выполнение этих операций счётчиком, формируются дешифратором команд, управляющим последовательностью действий МП-компонента.
Параллельная загрузка используется для записи в программный счётчик адреса перехода при выполнении команды безусловного перехода («jump») или вызова подпрограммы («call»).
Начальное содержимое программного счётчика после запуска МП-устройства может иметь любое значение. Часто используется значение начального адреса 0000016, но ряд устройств начинают выполнение программы с других адресов. Аналогичная ситуация возникает с адресами прерываний (векторами прерываний). Обслуживание прерывания начинается с адреса (вектора прерывания), отличного от адреса, загружаемого при начальном запуске устройства. Но для реализации прерывания или запуска устройства используются обычно одни и те же аппаратные средства.
Если выполняется вызов подпрограммы или обрабатывается прерывание, то адрес возврата (следующей команды) может быть сохранён в стеке без выполнения дополнительных тактов для инкремента содержимого программного счётчика.
В устройствах с принстонской архитектурой необходимо следить, чтобы РС не вышел за пределы памяти программ (иначе начнётся выборка данных вместо команд и попытка выполнить выбранные коды данных, что ведёт к непредсказуемому результату). Также если программный счётчик достигнет конца адресуемой памяти, то некоторые устройства осуществляют циклический переход к команде, размещённой по адресу 0000016. В других устройствах дешифратор команд продолжает наращивать программный счётчик, что приводит к выполнению неопределённых команд.
16) Арифметико-логическое устройство (АЛУ). Его назначение, схема работы, особенности использования.
АЛУ процессора используется для выполнения всех математических операций в программе (сложение, вычитание, логическое И, логическое ИЛИ, сдвиг содержимого регистров и установку содержимого регистра состояния в соответствии с полученными результатами. АЛУ не используется при чтении или записи данных или команд – оно служит только для обработки данных. АЛУ можно представить как аппаратный блок, который обрабатывает два слова данных (операнды) и сохраняет полученный результат.
От конкретного типа микропроцессора зависит, как вводятся операнды в АЛУ и куда поступает результат: это одно из основных различий между различными типами процессоров и их системами команд. Некоторые процессоры выбирают один операнд из регистра-аккумулятора и сохраняют результат также в аккумуляторе. Другие процессоры позволяют использовать различные источники операндов и места размещения результатов.
АЛУ обычно работают только с положительными числами. Но при выполнении вычитания получаются отрицательные числа, если вычитаемое больше уменьшаемого. Для представления отрицательных чисел используется дополнительный код.
Обычно различные представители одного семейства микроконтроллеров имеют одинаковые АЛУ. В некоторых семействах АЛУ реализуют определённые операции, которые не выполняются МК других семейств (например, умножение). Дополнительные функции различных МК одного семейства реализуются путём включения в их структуру дополнительных аппаратных средств, но при этом структура и функции АЛУ сохраняются, так как вводимые в МК дополнительные устройства используют свои регистры, не связанные с регистром состояния и аккумулятором (например, семейство 8-разрядных МК 68НС05 ф. Motorola).
17)Сторожевой таймер. Его назначение, особенности использования. Сторожевые таймеры предназначены для вывода микро-контроллерных устройств из непредсказуемых ситуаций, который часто возникаютиз-за обращения по неправильному адресу, что в свою очередь, обычно является следствием воздействия помех от промышленного оборудования. Сторожевой таймер
вызывает сброс МК, если его содержимое не обновляется в течение определённого промежутка времени (обычно от десятков миллисекунд до нескольких секунд). То есть, если изменение содержимого программного счётчика не соответствует заданной программе, то не будет выполнена команда модификации сторожевого таймера. В этом случае сторожевой таймер производит сброс МК, устанавливая его в исходное состояние.
Сторожевой таймер не рекомендуется использовать для маскирования неправильной работы программ: уменьшая вероятность программных ошибок, он не обеспечит исключение всех возможных причин их возникновения. Необходимо тщательно тестировать программное обеспечение в различных ситуациях.
18)Особенности использования подпрограмм и функций при программировании МК.
Подпрограммы и функции также имеют аппаратную поддержку, обеспечивающую вызов подпрограмм и передачу параметров, необходимых для её выполнения.
При вызове подпрограммы требуется сохранить содержимое программного счётчика для того, чтобы команда возврата могла вернуть управление исходной программе. Это может быть выполнено различными способами.
а) Автоматически, как часть команды САLL (вызов), путём сохранения адреса возврата в стеке. При возврате к исходной программе адрес извлекается из стека и загружается в программный счётчик.
б) В архитектурах, не имеющих стека или других регистров для сохранения содержимого программного счётчика, при выполнении команды GOTO (переход к . ) – переход к подпрограмме – адрес возврата сохраняется в регистре, причём ответственность за сохранение адреса возврата возлагается на программиста. Для этого только имитируется команда CALL, т. е. адрес возврата сохраняется в каком-либо регистре (если подпрограмма не вызывает другие подпрограммы. Иначе это ведёт к усложнению работы программиста). При возврате из подпрограммы содержимое этого регистра загружается в программный счётчик
в) В устройствах, где адрес возврата вообще нигде не сохраняется при выполнении команды GOTO, – для имитации вызова подпрограммы адрес возврата необходимо сохранить в виде переменной.
Функции – это сложные подпрограммы, при выполнении которых определённые параметры передаются из исходной программы в подпрограмму, а после завершения работы подпрограммы определённые параметры передаются обратно. Передача параметров в функцию может осуществляться различными способами.
а) Поместить параметры в стек перед вызовом функции. В подпрограмме индексный регистр загружается значением указателя стека – и таким образом получают доступ к параметрам. Преимущество: для передачи параметров используется специально выделенный фрагмент памяти. Переменные, определённые внутри функции, обычно называют локальными или автоматическими, так как они используются только данной функцией, и память для их размещения выделяется автоматически.
б) За счёт использования индексного регистра для эмуляции стека. Аналогичный метод вызова функций используется в процессорах, не имеющих стека. Адрес возврата можно сохранить в эмулированном счётчике.
в) Для передачи параметров, их можно сохранить в регистрах процессора или в памяти данных в качестве специальных переменных. Но передача параметров через регистры процессора сокращает число регистров, доступных для выполнения функции, а сохранение параметров в виде специальных переменных также уменьшает объём памяти, доступной для использования программой.
Возврат параметров выполняется любым из описанных выше способов. Но обычно значения возвращаемых параметров загружаются в регистры процессора. Это наиболее быстрый и эффективный метод передачи данных.
Источник
Счетчики
Назначение счетчиков.
Сметчиком называют последовательностное устройство, предназначенное для счета числа поступающих на его вход импульсов и фиксации этого числа на N выходах в виде ДГ-разрядного двоичного кода. Основой для построения счетчиков служат триггеры. Состояние, в которое переходит счетчик после ?-го входного импульса, определяется сигналами 0^
на выходах триггеров. Счетчики работают но циклическому принципу. Максимальное число К входных импульсов, после которого счетчик возвращается в исходное состояние, называется коэффициентом пересчета или модулем счета.
Классификация счетчиков.
По коэффициенту пересчета различают:
• двоичные счетчики, в которых коэффициент пересчета К = 2 ы (М= 1, 2, 3. ). Число разрядов N двоичных счетчиков равно числу триггеров;
• счетчики с произвольным коэффициентом пересчета К, среди которых выделяют десятичные счетчики с К = 10 Л (Ь = 1, 2, 3. ).
По последовательности счета входных импульсов счетчики разделяют на три группы:
- • суммирующие счетчики, в которых с приходом каждого входного импульса в пределах счетного цикла к содержимому счетчика прибавляется единица (прямая последовательность счета);
- • вычитающие счетчики, в которых с приходом каждого входного импульса в пределах счетного цикла содержимое счетчика уменьшается на единицу (обратная последовательность счета);
- • реверсивные счетчики, в которых реализуются прямая и обратная последовательности счета.
По способу организации переноса сигнала между отдельными триггерами выделяют:
- • счетчики с последовательным переносом, или асинхронные счетчики, в которых входной импульс поступает лишь на первый триггер, а каждый последующий триггер переключается выходным сигналом предыдущего, т.е. входной импульс последовательно переносится на выход счетчика;
- • счетчики с параллельным переносом, или синхронные счетчики, в которых входные импульсы поступают на все триггеры счетчика одновременно.
Рассмотрим принципы построения суммирующих и вычитающих асинхронных счетчиков на примере 4-разрядных устройств.
Источник