РЕГИСТР УПРАВЛЕНИЯ МОЩНОСТЬЮ

Обозначение Разряд Наименование и назначение
IDL PCON.0 Разряд управления режимом холостого хода.
PD PCON.1 Разряд управления режимом пониженного энергопотребления.
GF0 PCON.2 Флаги общего назначения
GF1 PCON.3  
PCON.4  
PCON.5 Не используются
PCON.6  
SMOD PCON.7 Разряд управления скоростью передачи. При SMOD = 1 скорость передачи в 2 раза больше, чем при SMOD = 0

Примечания.1. При одновременной записи 1 в разряды PD и IDL разряд PD имеет более высокий приоритет.

2. Сброс регистра управления мощностью осуществляется путем загрузки в него кода 0XXX0000B.

 

 

Скорость обмена в режиме 2 равна 1/32 или 1/64 частоты тактового генератора МК в зависимости от значения управляющего бита SMOD регистра управления мощностью PCON:

BR2 = (2SMOD / 64) fosc , (2.3)

где: BR2 – скорость обмена в режиме 2, бод;

SMOD – значение бита SMOD регистра PCON;

fosc – частота тактового генератора МК, Гц.

2.12.7. Режим 3– асинхронный режим с программируемой скоростью обмена. Этот режим аналогичен режиму 2 во всех отношениях, за исключением скорости приема/передачи, которая определяется формулой (2.2).

2.12.8. При работе последовательного порта в режимах 1 и 3 прерывание от таймера 1 должно быть заблокировано. Таймер 1 может работать как таймер или как счетчик событий в любом из трех режимов работы таймера 1, т.е. в режиме 0, 1 или 2
(см. раздел 2.11.) Наиболее удобно использовать режим 2 – режим таймера с автоперезагрузкой. Для этого в регистр управления режимом таймера TMOD (см.
табл. 2.7) нужно программно записать код 0010ХХХХВ, где Х – любая двоичная цифра. В этом случае скорость обмена определяется следующим выражением

BR1 = BR3 = 2SMOD fosc / {384 [256 – (TH1)]}, (2.4)

где: BR1 – скорость обмена в режиме 1, бод;

BR3 – скорость обмена в режиме 3, бод;

SMOD – значение бита SMOD регистра PCON;

fosc – частота тактового генератора МК, Гц;

(TH1) – содержимое регистра ТН1.

Программирование таймера 1 для обеспечения работы последовательного порта в режимах 1 и 3 на некоторых типовых скоростях обмена может быть выполнено с помощью табл. 2.11.

 

Таблица 2.11

ПРОГРАММИРОВАНИЕ ТАЙМЕРА 1
ДЛЯ ОБЕСПЕЧЕНИЯ РАБОТЫ ПОСЛЕДОВАТЕЛЬНОГО ПОРТА
В РЕЖИМАХ 1 И 3

Baud Rate, бод fosc, Мгц SMOD C/T’ M1 M0 TH1
0FFH
11,059 0FFH
11,059 0FFH
11,059 0FEH
11,059 0FDH
11,059 0FDH
11,059 0FAH
11,059 0FAH
11,059 0F4H
11,059 0E8H

Программный Счетчик

 

2.13.1. Одним из наиболее важных регистров процессора является программный счетчик (PCProgram 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).

 

Подпрограммы

 

2.15.1. Подпрограмма (subroutine) – программа, являющаяся частью другой программы и удовлетворяющая требованиям, которые язык программирования предъявляет к структуре программы [ 3 ].

Подпрограммы используются для уменьшения объема программы, а также с целью снижения трудоемкости и повышения качества программирования (снижения вероятности ошибок в программе). Наиболее часто к подпрограммам обращаются в том случае, когда в программе многократно повторяются одинаковые фрагменты.

2.15.2. В системе команд МК семейства MCS-51 (см. табл. 2.4) для вызова подпрограмм есть специальные команды LCALL (вызов подпрограммы в пределах всего адресного пространства программной памяти) и ACALL (вызов подпрограммы в пределах страницы размером 2К байт). По команде вызова подпрограммы процессором автоматически выполняются следующие операции:

1) содержимое программного счетчика PC увеличивается на 3,

2) инкрементируется содержимое регистра-указателя стека SP,

3) младший байт программного счетчика загружается в стек,

4) инкрементируется содержимое регистра-указателя стека,

5) старший байт программного счетчика загружается в стек,

6) в программный счетчик загружается 16-битный (LCALL) или 11-битный (ACALL) начальный адрес подпрограммы (адрес первой команды подпрограммы).

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

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

2.15.5. Если в подпрограмме задействованы какие-либо регистры, используемые главной программой, в начале подпрограммы содержимое этих регистров должно быть сохранено (обычно для этой цели используется стек), а перед выходом из подпрограммы содержимое этих регистров должно быть восстановлено (извлечение из стека осуществляется в обратном порядке).

2.15.6. Для передачи аргументов из главной программы в подпрограмму и передачи результатов из подпрограммы в главную программу можно использовать:

1) память данных,

2) регистры общего назначения,

3) флаги общего назначения,

4) стек.

 

Система прерываний

 

2.16.1.Прерывание (interrupt) – это реакция вычислительной системы на внутреннее или внешнее событие, возникновение которого приводит к приостановке выполнения текущей программы и передаче управления подпрограмме обслуживания источника прерывания, по завершении которой осуществляется возврат к прерванной программе.

В общем случае прерывание может быть инициировано внешним по отношению к процессору устройством (внешнее прерывание – external interrupt) или какой-либо внутренней причиной, например, ошибкой в программе (внутреннее прерывание – internal interrupt). Различают также аппаратные прерывания (hardware interrupt), вызванные физическими устройствами, и программные прерывания (software interrupt), вызванные специальными машинными командами.

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

2.16.2. Система прерываний МК 80С51 обслуживает только аппаратные прерывания, которые могут быть инициированы внешними по отношению к микроконтроллеру устройствами (внешние прерывания) или встроенными периферийными устройствами (внутренние прерывания). Сигналы запросов внешних прерываний поступают на входы INT0’ и INT1’ микроконтроллера, запросы внутренних прерываний формируются таймером 0, таймером 1, приемником или передатчиком последовательного порта.

Аппаратная реализация рассмотренных выше функций системы прерываний в МК 80С51 осуществляется встроенным периферийным устройством, которое называется контроллером прерываний (ICinterrupt controller).

Для временного хранения адреса возврата в прерванную программу используется системный стек.

Начальные участки подпрограмм обслуживания прерываний, называемые векторами прерываний, размещаются в специальной области программной памяти, начиная с адреса 0003Н. Под каждый вектор прерывания отводится 8 байт памяти. Адрес первого (младшего) байта, называемый адресом вектора прерывания, формируется контроллером прерываний при предоставлении обслуживании соответствующему устройству. Адреса векторов прерываний МК 80С51 приведены в табл. 2.12.

Таблица 2.12