Микропроцессоры и микроконтроллеры

 
 
 
«Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете.»
Martin Golding
Русский | Українська


Микропроцессоры и микроконтроллеры :: Принципы программирования MSC-51 :: Резидентная память данных

Резидентная память данных

РПД является наиболее гибким адресным пространством, которое позволяет реализовать режимы прямой, регистровой, косвенной и битовой адресации. РПД состоит из таких областей:

1) ОЗУ объемом 128 байтов - адреса 00...7FH (0..127);

2) блок РСФ - содержит 20 однобайтовых регистров, размещенных по адресам, кратным 8, в диапазоне 80...FFH (128-255). Другие адреса из этой области недоступные и являются ошибочными.

Внутреннее ОЗУ предполагает прямую и косвенную адресацию, а банки рабочих регистров, которые входят в него, - также и регистровую адресацию.

Расположение разных областей в РПД показано на рис.11.2.

Рис. 11.2. Структура адресации РПД

Внутреннее ОЗУ (адреса 00...7FH) состоит из таких областей:

1. Четыре банка рабочих регистров по восемь байтов в каждом. В процессе работы МК51 один из банков регистров считается активным. Выбор активного банка осуществляется программным путем с помощью установления двух битов в регистре флагов. При этом регистры активного банка становятся доступными через регистровую адресацию с символическими именами R0...R7. С этими именами работают специальные короткие команды, которые используют данный тип адресации. Другие (неактивные) банки адресуются как обычные ячейки ОЗУ. Таким образом в МК51 реализован "плавающий" блок РОН. В регистры R0 и R1 могут использоваться для косвенной адресации любой из 128 ячеек внутреннего ОЗУ.

2. Блок ячеек ОЗУ с побитовой адресацией. Эти 16 байтов по адресам 20Н...2FH предполагают также прямую адресацию отдельных битов с адресами 00Н...7FH, то есть всего 128 битов. Для работы с битами существуют специальные команды, поэтому перепутывания адресов не возникает. Карта битов внутреннего ОЗУ, которые адресуются в отдельности, показана на рис.2.6 в пособии.

3. Блок ячеек ОЗУ без особенностей.

Все три области предполагают прямую и косвенную адресацию байтов через регистры R0 и R1 активного банка.

Организация стека

Стек в МК51 может занимать любые последовательно расположенные байты в ОЗУ РПД. Назначение стека такое же, как и в других МП.

Для адресации ячеек, которые составляют стек, используется восьмиразрядный регистр SP. Теоретическая глубина стека - 127 байтов, поскольку в диапазоне 80...FFH размещаются РСФ и недоступные адреса. Стек обычно размещают в области ОЗУ, начиная с адреса 40Н и выше. При включении питания или подачи сигнала Reset в (SP) автоматически загружается код 07H.

Особенность состоит в том, что в МК51 стек растет в сторону увеличения адресов, то есть при выполнении команд PUSH и CALL содержимое SP увеличивается, а при РОР и RET - уменьшается. Путем записи в SP значения от 0 до 127 можно разместить стек в любой области в границах ОЗУ РПД.

Блок регистров специальных функций (РСФ)

РСФ также относятся к РПД и расположены по адресам, кратным 8, в диапазоне адресов 80Н...FFH. Одиннадцать из 20 регистров специальных функций имеют битовую адресацию (табл.2.2, рис.2.7 в пособии).

В микроконтроллере реализованы следующие РСФ:

- арифметические: аккумулятор АСС (или A), регистр умножения В, слово

состояния программы PSW;

- указательные: SP и DPTR, который состоит из пары DPH, DPL;

- регистры-фиксаторы портов ввода-вывода Р0, Р1, Р2, Р3;

- регистры управления системой прерываний IP, IE;

- регистры управления и настройки таймеров-счетчиков TCON, TMOD,

- счетные регистры таймеров TH0, TL0, TH1, TL1;

- регистры управления последовательным портом SBUF, SCON;

- регистр управления мощностью PCON.

К регистрам СФ можно обращаться как к обычным ячейкам ОЗУ с битовой адресацией, и в то же время они обеспечивают работу многих узлов МК, устанавливают режимы их работы. Так, программирование различных периферийных устройств МК51 на определенные режимы работы реализуется как запись в соответствующие ячейки памяти РПД нужных кодов или путем установления соответствующих битов с прямой адресацией. Кроме того, биты регистров СФ имеют символические имена, что существенно облегчает программирование на Ассемблере.

Полный перечень всех РСФ представлен в табл. 2.2 в пособии.

Аккумулятор и слово состояния программы (PSW)

МК51 имеет аккумуляторно-ориентированную структуру. Но существует ряд операций (пересылка, INC, DEC, некоторые проверки), которые выполняются без аккумулятора. Аккумулятор - это регистр с побитовой адресацией, который существенным образом облегчает анализ данных с битовой структурой информации. Аккумулятор предполагает два способа адресации:

- регистровую, если ссылка на него помещается в коде операции (как «А»);

- прямую, путем указания прямого адреса (0Е0h) или символического имени "АСС" в адресной части команды.

Регистр PSW выполняет функцию регистра признаков, которые формируются по результатам действий в АЛУ, а также служит для управления выбором активного банка регистров. PSW - регистр с битовой адресацией, что облегчает анализ признаков и их установку. Отдельные биты PSW имеют символические имена, но к ним можно обратиться и через имя регистра с указанием номера бита: PSW.7, PSW.5. Структура регистра PSW показана на рис.2.8 в пособии, а табл.11.2 содержит краткие сведения о назначении отдельных разрядов данного регистра.

Т а б л и ц а 11.2

Формат регистра PSW - слова состояния программы

Название бита

Позиция

Назначение

С

AC

F0

RS1

RS0

OV

--

P

PSW.7

PSW.6

PSW.5

PSW.4

PSW.3

PSW.2

PSW.1

PSW.0

Флаг переноса. Устанавливается и сбрасывается аппаратно при выполнении арифметических, логических и битовых операций, а также программно.

Флаг вспомогательного переноса. Устанавливается и сбрасывается только аппаратно при выполнении команд суммирования и вычитания в случае возникновения переноса или заема в бите 3 аккумулятора.

Свободный флаг. Может быть изменен программно и используется по назначению, установленному программистом.

Выбор банка регистров. Биты устанавливаются и сбрасываются программно для выбора активного (рабочего) банка регистров:

RS1

RS0

Активный банк

Адреса РПД

0

0

1

1

0

1

0

1

0

1

2

3

00Н-07Н

08Н-0FH

10H-17H

18H-1FH

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

Не используется.

Флаг паритета. Устанавливается и сбрасывается аппаратно в каждом цикле команды, фиксирует факт нечетного количества "1" в аккумуляторе.

Указательный регистр DPTR

DPTR - двухбайтный регистр-указатель данных – является базовым регистром для косвенной адресации с обращением к внешней памяти. Поскольку в МК51 отсутствуют средства прямой адресации внешней памяти, DPTR - это единое средство доступа к ячейкам ВП. DPTR может функционировать как два независимых регистра: DPH и DPL.