Организация памяти в микроконтроллерах
Вся серия MCS-51 имеет гарвардскую архитектуру - раздельное адресное пространство программ и данных. Эта архитектура по сравнению с фон-неймановской обладает более высокой производительностью и позволяет создавать более эффективные по объему памяти программы. Программная память (CSEG) доступна только для чтения, ее организация показана на рис. 12.2. Память данных доступна для чтения и записи, ее организация показана на рис.12.3.
Пространство памяти программ CSEG адресуется 16-разрядным счетчиком команд PC и, следовательно, может иметь объем до 64Кбайт. Часть этой памяти (4, 8, 16, 32К в зависимости от типа микросхемы) может быть расположена непосредственно на кристалле в виде масочного ПЗУ (ROM), либо репрограммируемого ПЗУ (EPROM). Она образует внутреннюю память программ. Оставшаяся часть, реализуемая внешними средствами (установкой внешнего ПЗУ), называется внешней памятью программ. Для программиста как внутренняя, так и внешняя память представляет собой единое пространство CSEG с равными правами доступа. При считывании команд из внешней программной памяти формируется инверсный сигнал «строб чтения внешнего ПЗУ» PSEN* (Program Store Enable) для всех адресов, кроме области встроенного ПЗУ. (Символом «*» будем обозначать инверсное значение сигнала).
Младшие 4К байт (8, 16, 32К - для различных модификаций) памяти программ размещаются на кристалле МК или находятся во внешнем ПЗУ, что определяется переключением вывода «внешний доступ» EA* (External Access) соответственно, либо к Vcc(напряжение питания) или к Vss(земле). Например, в МК с 4К ПЗУ при подключении EA* к Vcc адреса с 0000h по 0FFFh располагаются во внутреннем ПЗУ, а адреса с 1000h по FFFFh - во внешнем ПЗУ. Если вывод EA* подключен к Vss, то вся программа располагается во внешнем ПЗУ. Аппаратная реализация подключения внешней программной памяти показана на рис.12.4.
Некоторые ячейки CSEG имеют особое назначение (как правило содержат адреса переходов по прерываниям и точку входа при инициализации системы), как показано в табл.12.1:
Таблица 12.1
Таблица векторов прерываний микроконтроллера
Источник прерывания | Вектор прерывания | Назначение |
RESET | 0000H | Стартовый адрес при сбросе системы |
EINT 0 | 0003H | Внешнее прерывание 0 |
TIMER0 | 000BH | Прерывание таймера/счетчика 0 |
EINT 1 | 0013H | Внешнее прерывание 1 |
TIMER1 | 001BH | Прерывание таймера/счетчика 1 |
SINT | 0023H | Прерывание последовательного порта |
В пространстве CSEG определены два основных способа передачи управления:
Абсолютный (с применением 16-битного адреса):
LCALL addr16 ;+(SP)PC, PC0-15addr16
LJMP adr16 ; PC0-15addr16.
Относительный (при помощи 8-разрядного смещения rel со знаком):
SJMP rel8 ; PCPC+rel8.
Наличие знака при rel позволяет осуществить переход в сторону как старших так и младших адресов.
Реализован вариант передачи управления внутри 2К-байтной страницы (адрес содержит 11 бит):
ACALL addr11 ;+(SP) PC, PC0-10addr11
AJMP addr11 ; PC0-10addr11.
Кроме того предусмотрен переходпо смещению относительно базы DPTR
JMP@A+DPTR ; PCDPTR+A.
Специальная команда пересылки позволяет читать в A содержимое программной памяти (например для извлечения из памяти каких-либо констант):
MOVC A,@A+DPTR ;ACSEG(A+DPTR)
MOVC A,@A+PC ;ACSEG(A+PC).
Память данных, как указано выше, доступна для чтения и записи, и ее организация показана на рис.12.3. Возможно использование как внутренней (DSEG), так и внешней памяти (XSEG) данных.
На рис. 12.5. показано подключение внешней памяти данных, для управления которой процессор генерирует сигналы RD* и WR*. Возможна адресация до 64К внешней памяти.
Адрес может иметь размер один или два байта. Однобайтовая адресация часто используется при страничной организации ОЗУ. При использовании двухбайтовой адресации старший байт адреса выводится через порт 2.
Внутренняя память данных (DSEG) может быть (как показано на рис.12.6) разделена на три условных блока-«нижний» (lower), «верхний» (upper) и блок Регистров Специальных Функций (SFR).
Внутренняя память данных всегда адресуется байтом, что определяет 256 байт ее адресного пространства. Блок верхних 128 байт и блок SFR занимают одно и то же адресное пространство - от 80h до FFh, но разделены физически. Прямая адресация осуществляет доступ к блоку SFR, а косвенная - к блоку верхних 128 байт.
Верхняя 128-байтная половина ОЗУ в микросхеме 8051 отсутствует, но имеется в ряде МК других типов (8032Х, 8052Х, 8752Х и др.)
FFh. . .80h | Область внутреннего ОЗУ (Upper 128) доступна в режиме косвенной адресации (на МК 8051 отсутствует) | Область регистров специальных функций (SFR) доступна только в режиме прямой адресации |
7Fh. . .00h | Область внутреннего ОЗУ (Lower 128)доступна в режимах косвенной и прямой адресации (присутствует во всех МК MCS-51) |
Рис. 12.6. Структура внутренней память данных
Блок нижних 128 байт присутствует на всех кристаллах MCS-51 и может адресоваться как прямо, так и косвенно.
С другой стороны, для хранения булевых данных в архитектуре MCS-51 предусмотрено одноразрядное линейно упорядоченное пространство BSEG объемом 256 байт, которое физически совмещено с байтовым пространством данных DSEG. При этом одна часть пространства BSEG попадает в область Lower 128 DSEG, а другая часть BSEG - в область SFR DSEG.
На рис. 12.7. показано использование ячеек памяти блока нижних 128 байт.
A | B | C | D | E | F | |||||||||||
R0 RB0 | R1 RB0 | R2 RB0 | R3 RB0 | R4 RB0 | R5 RB0 | R6 RB0 | R7 RB0 | R0 RB1 | R1 RB1 | R2 RB1 | R3 RB1 | R4 RB1 | R5 RB1 | R6 RB1 | R7 RB1 | |
R0 RB2 | R1 RB2 | R2 RB2 | R3 RB2 | R4 RB2 | R5 RB2 | R6 RB2 | R7 RB2 | R0 RB3 | R1 RB3 | R2 RB3 | R3 RB3 | R4 RB3 | R5 RB3 | R6 RB3 | R7 RB3 | |
00- -07 | 08- -0F | 10- -17 | 18- -1F | 20- -27 | 28- -2F | 30- -37 | 38- -3F | 40- -47 | 48- -4F | 50- -57 | 58- -5F | 60- -67 | 68- -6F | 70- -77 | 78- -7F | |
Рис.12.7. Блок нижних 128 байт внутреннего ОЗУ
Первые 32 байта блока сгруппированы в 4 банка (RB0-RB3) по 8 восьмиразрядных регистров. Инструкции программы могут оперировать с ними как с регистрами общего назначения R0-R7. Банки переключаются программно разрядами RS регистра Слова Состояния Программы (PSW). Регистровые банки позволяют более эффективно использовать память программ, так как регистровые инструкции короче, чем прямая адресация. Регистры R0 и R1 каждого банка реализуют также функции 8-разрядных указателей данных.
Следующие за регистровыми банками 16 байт образуют блок побитно - адресуемого пространства (BSEG). Набор инструкций семейства MCS-51 содержит широкий набор операций над битами, а 128 бит (16 байт * 8) в этом блоке могут быть прямо адресованы. Битовые адреса имеют значения от 00h до 7Fh.
Размещение регистров специальных функций SFR изображено в табл.12.2. Эти регистры включают в себя регистры портов, таймеры, средства управления периферией, доступные при прямой адресации.
Таблица12.2
Регистры специальных функции (SFR) при байтной адресации
Мнемоника | Назначение | Адрес |
B* | Регистр B | F0h |
ACC* | Аккумулятор | E0h |
PSW* | Слово состояния программы | D0h |
IP* | Регистр приоритетов прерываний | B8h |
P3* | Порт 3 | B0h |
IE* | Регистр разрешения прерываний | A8h |
P2* | Порт 2 | A0h |
SBUF | Буфер последовательного порта | 99h |
SCON* | Управление последовательным портом | 98h |
P1* | Порт 1 | 90h |
TH1 | Таймер. Счетчик 1. Старший байт | 8Dh |
TH0 | Таймер. Счетчик 0. Старший байт | 8Ch |
TL1 | Таймер. Счетчик 1. Младший байт | 8Bh |
TL0 | Таймер. Счетчик 0. Младший байт | 8Ah |
TMOD | Регистр режима таймера/счетчика | 89h |
TCON* | Регистр управления таймера/счетчика | 88h |
PCON | Регистр управления энергопотреблением | 87h |
DPTR DPH DPL | Регистр указателя данных Старший байт Младший байт | 83h 82h |
SP | Указатель стека | 81h |
P0* | Порт 0 | 80h |
(Символ «*» обозначает возможность побитной адресации регистров).
Для 16 адресов в пространстве SFR имеется возможность как байтовой, так и битовой адресации (рис.2.9). Побитно - адресуемыми регистрами являются регистры, чей шестнадцатиричный адрес заканчивается на 0 или 8. Битовые адреса в этой области (BSED) располагаются со значения 80h по FFh. Все семейство MCS-51 имеет базовый набор SFR, как микросхеме 8051по тем же адресам. Однако в кристаллах, представляющих собой дальнейшее развитие 8051, имеются и некоторые дополнительные регистры (АЦП, сторожевого таймера и т.д.), отсутствующие в базовом варианте.
Основным арифметическим регистром является аккумулятор A. Команды, предназначенные для побитной работы с аккумулятором, применяют мнемонику «ACC». Например:
MOV ACC.0,C ;пересылка в младший бит аккумулятора флага переноса.
Регистр B служит расширением аккумулятора A и необходим для операций умножения и деления, при этом он является как источником, так и приемником операндов. В остальных операциях функция регистра B определяется пользователем.
Регистр слова состояния программы (PSW) содержит статусные биты, отражающие текущее состояние процессора: признаки переноса, переполнения, четности и др.
Указатель стека SP используется для указания на вершину стека в операциях записи в стек и чтения из него (неявно используется командами PUSH, POP,CALL, RET, RETI). По аппаратному сбросу ЦП устанавливается в значение 07h (область стека начинается с адреса внутренней памяти данных 08h) и инкрементируется при каждой записи в стек. Глубина стека возможна до 256 байт.
Указатель данных DPTR состоит из двух байт: старшего - DPH и младшего - DPL. Обращение - только байтное, отдельно к старшему и младшему байтам. Используется как 16-ти или 8-битовый указатель адреса при пересылке констант из памяти программ (CSEG) и при доступе к переменным из внешней памяти данных (XSEG), а также для организации передачи управления.
При сбросе МК все регистры устанавливаются в исходное состояние. Программный счетчик PC принимает значение 0000H, аккумулятор A-00H, B-00H, PSW-00H, SP-07H, DPTR-0000H.
Дата добавления: 2021-12-14; просмотров: 473;