Организация внутренней памяти данных.


Архитектурные особенности МК51

МК51 позволяет управлять пятью (частично пересекающимися) адресными пространствами памяти, четыре из которых являюся областями данных:

RSEG - пространство регистров (4*8 байт);

DSEG - пространство внутренней памяти данных (256 байт);

BSEG - битовое пространство данных (256 бит);

XSEG - пространство внешней памяти данных (до 64К байт);

CSEG - пространство программного кода (до 64К байт).

Пространства RSEG и BSEG частично пересекаются, физически совмещаются с DSEG и образуют единую внутреннюю среду для хранения данных. Это позволяет одни и те же данные рассматривать с разных позиций (ячейка памяти, регистр, битовое поле, порт ввода/вывода и т.п.) и организовывать наиболее удобный для данного случая доступ к ним.

Характерно, что все порты ввода/вывода, системные регистры, таймеры так же отображены на пространство DSEG.

Пространство регистров представлено четырьмя банками регистров по 8 в каждом, а так же 16-разрядными программным счетчиком PC и регистром косвенного адреса DPTR, 8-разрядными аккумуляторами A и B, указателем стека SP и регистром PSW.

Все регистры, кроме PC, отображаются на DSEG.

PSW[7] - CY - перенос из старшего (7) разряда АЛБ;

PSW[6] - AC - перенос из третьего разряда АЛБ;

PSW[5] - F0 - флаг пользователя.

Кроме того, формат PSW включает двухбитовое поле PSW[4:3] - RS номера банка регистров и флаги арифметического переполнения OV (PSW[2]) и четности P (PSW[0]).

Флаги CY, AC и OV отражают признаки результата последней арифметической операции, а P - четность содержимого аккумулятора A. Расширение аккумулятора B используется в командах умножения и деления, а в остальных операциях - как обычная ячейка памяти. Программный счетчик адресует пространство памяти программ CSEG объемом до 64K байт, причем переход из области внутренней памяти программ к внешней осуществляется автоматически.

Указатель данных DPTR используется для обращения к XSEG и при пересылке констант из CSEG в A. Кроме того, содержимое DPTR используется а качестве смещения в команде перехода.

Указатель стека SP образует системный стек глубиной до 256 байт. SP хранит адрес последнего занесенного байта и растет при записи в сторону больших адресов.

Регистры R0, R1 каждого банка используются в качестве указателей данных. При сбросе машины в A, B, PC и DPTR загружаюся 0h, а в SP - 07h.

 

Пространство DSEG включает в себя 256 ячеек памяти, часть из которых является одновременно элементами других пространств. Так, первые 32 байта ОЗУ занимают 4 банка. Служебные регистры, порты ввода/вывода, таймеры, аккумуляторы и др. так же совмещены с ячейками памяти и полями битового сегмента. Это дает возможность обращения к одному физическому объекту разными способами. Так, к ячейке DSEG[E0] можно обратиться по прямому и косвенному адресу, обратиться как к аккумулятору A и как к полю BSEG[E0..E7] (к каждому биту в отдельности).

 

Рис. 14.4. Пространство внутренней памяти данных DSEG

 

Память программ адресуется PC[15:0] и может составлять до 64К байт, причем младшие 4 К могут располагаться непосредственно на кристалле, а остальная память внешнее ЗУ. С точки зрения программиста внешняя и внутренняя память программ представляют единое адресное пространство. Имеются "особые точки"

CSEG:

RESET 0000h - стартовый адрес;

EXTI0 0003h - внешнее прерывание 0;

TIMER0 000Bh - прерывание от таймера/счетчика T0;

EXTI1 0013h - внешнее прерывание 1;

TIMER1 001Bh - прерывание от таймера/счетчика T1;

SINT 0023h - прерывание последовательного порта;