Память программ. Память программ предназначена для хранения программ и имеет отдельное от памяти данных адресное пространство объемом до 64 Кбайт
Память программ предназначена для хранения программ и имеет отдельное от памяти данных адресное пространство объемом до 64 Кбайт, причем часть памяти программ с адресами 0000Н-0FFFH расположена на кристалле МК51 (рис.21).
Рис.21. Адресное пространство памяти программ
Если на вывод МК51 ЕА подано напряжение питания Ucc, то обращение к внешней памяти программ происходит автоматически при выработке счетчиком команд адреса, превышающего 0FFFH. Если адрес находится в пределах 0000Н-0FFFH, обращение происходит к памяти программ, расположенной на кристалле внутренней памяти программ (рис.21, б). Если на вывод МК51 ЕА подан "0", внутренняя память программ отключается и, начиная с адреса 0000Н, все обращения выполняются к внешней памяти программ (рис.21, а). По этой причине внутренняя и внешняя память программ представляют собой единое линейное пространство. Память программ, расположенная на кристалле, состоит из 12-разрядного дешифратора и ПЗУ емкостью 4Кбайт (рис.22).
Рис.22. Устройство памяти программ
После установки адреса по сигналу УУС производится выборка байта данных из ПЗУ. Данные из памяти программ передаются в устройство управления для расшифровки и организации выполнения текущей операции. При работе с памятью программ необходимо помнить, что в ее начальной части находятся специальные адреса или вектора прерывания. За каждым источником прерывания закреплен отдельный адрес, который загружается в программный счетчик PC и начи- нается выполнение подпрограммы обслуживания данного прерывания. Микроконтроллеры базовой конфигурации имеют старто-
вый адрес и пять векторов прерывания: RESET 0000Н - стартовый адрес при сбросе микроконтроллера; EXTI0 0003Н - внешнее прерывание 0; TIMER0 000BН - прерывание таймера/счетчика 0; EXTI1 0013Н - внешнее прерывание 1; TIMER1 001BН - прерывание таймера/счетчика 1; SINT 0023Н - прерывание последовательного порта. Между векторами находится промежуток, равный 8 адресам, в которые может быть записана подпрограмма обслуживания прерывания, если она достаточно короткая. В противном случае по адресу вектора прерывания записывается команда перехода на адрес начала подпрограммы. При использовании прерываний рекомендуется обходить адреса векторов и начинать основную программу примерно с адреса 0030Н: 0000Н LJMP 0030H. На рис. 23 показана функциональная схема включения МК51 с внешним ППЗУ программ. Подключение к внешним шинам адреса и данным происходит аналогично подключению внешнего ОЗУ, за исключением сигнала разрешения доступа к микросхеме ППЗУ. В данном случае используется сигнал , низким уровнем которого разрешается чтение данных и памяти программ (рис. 24).
Рис. 23. Схема подключения внешней микросхемы памяти программ
Рис.24. Временная диаграмма чтения данных из памяти программ
Для доступа к памяти программ имеется команда MOVC A,@A+DPTR. С ее помощью можно прочитать данные из памяти программ в аккумулятор с использованием косвенного адреса. Обычно она используется для чтения каких-либо констант программы.
|