Регистры специальных функций
К адресному пространству памяти данных примыкает адресное пространство регистров специальных функций РСФ или, на английском языке, SFR (Special Function Register).
Регистры с символическими именами IP, IE, TMOD, TCON, SCON и PCON используются для фиксации и программного изменения управляющих бит и бит состояния схемы прерывания, таймера/счетчика, приемопередатчика последовательного порта и для управления энергопотреблением.
Адрес прямо адресуемых битов может быть записан либо в виде выражения (НазваниеРегистра).(Разряд), либо в виде номера бита (Табл. 1.2). Адреса регистров специальных функций приведены в табл. 1.3.
Карта адресуемых битов в блоке регистров SFR
Таблица 1.2
Адрес байта | Адреса битов по разрядам | Имя регистра | |||||||
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | ||
F0H | F7 | F6 | F5 | F4 | F3 | F2 | F1 | F0 | B |
... | … | ... | |||||||
E0H | E7 | E6 | E5 | E4 | E3 | E2 | E1 | E0 | ACC |
... | … | ... | |||||||
D0H | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | PSW |
... | … | ... | |||||||
B8H | - | - | - | BC | BB | BA | B9 | B8 | IP |
... | … | ... | |||||||
B0 | B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 | P3 |
... | … | ... | |||||||
A8H | AF | - | - | AC | AB | AA | A9 | A8 | IE |
... | … | ... | |||||||
A0H | A7 | A6 | A5 | A4 | A3 | A2 | A1 | A0 | P2 |
... | … | ... | |||||||
98H | 9F | 9E | 9D | 9C | 9B | 9A | SCON | ||
... | … | ... | |||||||
90H | P1 | ||||||||
... | … | ... | |||||||
88H | 8F | 8E | 8D | 8C | 8B | 8A | TCON | ||
... | … | ... | |||||||
80H | P0 |
Размещение регистров специальных функций
Таблица 1.3
Адрес | Символ | Наименование |
0E0h | *АСС | Аккумулятор (Accumulator) |
0F0h | *В | Регистр расширитель аккумулятора (Multiplication Register) |
0D0h | *PSW | Слово состояния программы (Program Status Word) |
080Н | *P0 | Порт 0 (SFR P0) |
090h | *Р1 | Порт 1 (SFR P1) |
0A0h | *P2 | Порт 2 (SFR P2) |
0B0h | *P3 | Порт 3 (SFR РЗ) |
081h | SP | Регистр указатель стека (Stack Pointer) |
083h | DPР | Старший байт регистра указателя данных DPTR (Data Pointer High) |
082h | DPL | Младший байт регистра указателя данных DPTR (Data Pointer Low) |
08Ch | TH0 | Старший байт таймера 0 |
08Ah | TL0 | Младший байт таймера 0 |
08Dh | TР1 | Старший байт таймера 1 |
08Bh | TL1 | Младший байт таймера 1 |
089h | TMOD | Регистр режимов таймеров счетчиков (Timer/Counter Mode Control Register) |
088h | *TCON | Регистр управления статуса таймеров (Timer/Counter Control Register) |
0B8h | *IP | Регистр приоритетов (Interrupt Priority Control Register) |
0A8h | *IE | Регистр маски прерывания (Interrupt Enable Register) |
087h | PCON | Регистр управления мощностью (Power Control Register) |
098h | *SCON | Регистр управления приемопередатчиком (Serial Port Control Register) |
099h | SBUF | Буфер приемопередатчика (Serial Data Buffer) |
* Примечание. Регистры, символ которых отмечен знаком (*), допускают адресацию своих отдельных бит при использовании команд из группы команд операций над битами.
Отметим, что регистры занимают только часть 128-байтового адресного пространства. Те ячейки памяти с адресами 80H-0FFH, которые не заняты регистрами, физически отсутствуют, на кристаллах микроконтроллеров семейства 8051 при обращении к ним можно прочитать лишь случайные данные.
Регистры специальных функций управляют работой блоков, входящих в микроконтроллер.
· Регистры-защелки SFR параллельных портов P0...P3 - служат для ввода-вывода информации.
· Две регистровые пары с именами TH0, TL0 и TH1, TL1 представляют собой регистры, двух программно-управляемых 16-битных таймеров-счетчиков (Рис.1).
· Режимы таймеров-счетчиков задаются с использованием регистра TMOD, а управление ими осуществляется с помощью регистра TCON.
· Для управления режимами энергопотребления микро-ЭВМ используется регистр PMOD.
· Регистры IP и IE управляют работой системы прерываний микро-ЭВМ,
· регистры SBUF и SCON — работой приемопередатчика последовательного порта.
· Регистр-указатель стека SP в микро-ЭВМ рассматриваемого семейства — восьми битный. Он может адресовать любую область внутренней памяти данных. У микро-ЭВМ семейства 8051 стек «растет вверх», т.е. перед выполнением команды PUSH или CALL содержимое SP инкрементируется, после чего производится запись информации в стек. Соответственно при извлечении информации из стека регистр SP декрементируется после извлечения информации.
· Регистр-указатель данных DPTR чаще всего используют для фиксации 16-битного адреса в операциях обращения к внешней памяти программ и данных. С точки зрения программиста он может выступать как в виде одного 16-битного регистра, так и в виде двух независимых регистров DPL и DPH
· Аккумулятор (АСС) является источником операнда и местом фиксации результата при выполнении арифметических, логических операций и ряда операций передачи данных. Кроме того, только с использованием аккумулятора могут быть выполнены операции сдвигов, проверка на нуль, формирование флага паритета и т.п. В распоряжении пользователя имеются 8 регистров общего назначения R0–R7 одного из четырёх возможных банков.
· Регистр В используется как источник и как приемник при операциях умножения и деления, обращение к нему, как к регистру SFR, производится аналогично аккумулятору.
· При выполнении ряда команд в арифметико-логическом устройстве (АЛУ) формируются признаки операций — флаги, которые фиксируются в регистре PSW (табл. 1.4).
Регистр флагов (PSW)
Флаг С устанавливается при переносе из разряда D7, т. е. в случае, если результат не помещается в восемь разрядов; флаг АС устанавливается при переносе из разряда D3 в командах сложения и вычитания и служит для реализации десятичной арифметики. Этот признак используется командой DAA.
Перечень флагов, их символические имена
и условия формирования
Таблица 1.4
Символ | Позиция | Имя и назначение | ||||||||||||||||||||
P | PSW.0 | Флаг паритета. Устанавливается и сбрасывается аппаратно в каждом цикле команды и фиксирует нечетное/четное число единичных бит в аккумуляторе | ||||||||||||||||||||
- | PSW.1 | Не используется | ||||||||||||||||||||
OV | PSW.2 | Флаг переполнения. Устанавливается и сбрасывается аппаратно при выполнении арифметических операций | ||||||||||||||||||||
RS0 - RS1 | PSW.3 - PSW.4 | Биты выбора используемого банка регистров. Могут быть изменены программным путем
| ||||||||||||||||||||
F0 | PSW.5 | Флаг пользователя. Может быть установлен, сброшен или проверен программой пользователя | ||||||||||||||||||||
АС | PSW.6 | Флаг вспомогательного переноса. Устанавливается и сбрасывается только аппаратными средствами при выполнении команд сложения и вычитания и сигнализирует о переносе или заеме в бите 3 аккумулятора | ||||||||||||||||||||
C | PSW.7 | Флаг переноса. Устанавливается и сбрасывается как аппаратно, так и программным путем |
Формат слова состояния PSW
Обознач. | Разряд | Наименование и назначение |
P | PSW.0 | Флаг паритета. Устанавливается и сбрасывается аппаратно: P=1, если в аккумуляторе нечетное число единиц; P=0, если в аккумуляторе четное число единиц |
– | PSW.1 | Флаг, определяемый пользователем. Устанавливается, сбрасывается и тестируется программно |
OV | PSW.2 | Флаг переполнения. Устанавливается и сбрасывается аппаратно при выполнении арифметических операций. |
RS0 | PSW.3 | Выбор банка регистров. Устанавливаются и сбрасываются программно: RS1=0, RS0=0: Банк 0 (Адреса 00H ¸ 07H) RS1=0, RS0=1: Банк 1 (Адреса 08H ¸ 0FH) RS1=1, RS0=0: Банк 2 (Адреса 10H ¸ 17H) RS1=1, RS0=1: Банк 3 (Адреса 18H ¸ 1FH) |
RS1 | PSW.4 | |
F0 | PSW.5 | Флаг общего назначения. Устанавливается, сбрасывается и тестируется программно |
AC | PSW.6 | Флаг вспомогательного переноса. Устанавливается и сбрасывается только аппаратно при выполнении команд сложения и вычитания и несет информацию о переносе или заеме в 3-ем разряде |
C | PSW.7 | Флаг переноса. Устанавливается и сбрасывается аппаратно (при выполнении арифметических и логических. операций) или программно. |
Флаг OV устанавливается при переносе из разряда D6, т. е. в случае, если результат не помещается в семь разрядов и восьмой не может быть интерпретирован как знаковый. Этот признак служит для организации обработки чисел со знаком.
Наконец, флаг Р устанавливается и сбрасывается аппаратно. Если число единичных бит в аккумуляторе нечетно, то Р = 1, в противном случае Р = 0.
Наиболее “активным” флагом PSW является флаг переноса, который принимает участие и модифицируется в процессе выполнения множества операций, включая сложение, вычитание и сдвиги. Кроме того, флаг переноса (C) выполняет функции “булева аккумулятора” в командах, манипулирующих с битами. Флаг переполнения (OV) фиксирует арифметическое переполнение при операциях над целыми числами со знаком и делает возможным использование арифметики в дополнительных кодах. ALU не управляет флагами селекции банка регистров (RS0, RS1), их значение полностью определяется прикладной программой и используется для выбора одного из четырёх регистровых банков.
В микропроцессорах, архитектура которых опирается на аккумулятор, большинство команд работают с ним, используя неявную адресацию. В Intel 8051 дело обстоит иначе. Хотя процессор имеет в своей основе аккумулятор, он может выполнять множество команд и без его участия. Например, данные могут быть переданы из любой ячейки RDM в любой регистр, любой регистр может быть загружен непосредственным операндом и т.д. Многие логические операции могут быть выполнены без участия аккумулятора. Кроме того, переменные могут быть инкрементированы, декрементированы и проверены без использования аккумулятора. Флаги и управляющие биты могут быть проверены и изменены аналогично.