ПАМЯТЬ МИКРОКОНТРОЛЛЕРА
Память программ. Память программ и память данных в МК 1816 физически и логически разделены. Память программ реализована в резидентном СППЗУ емкостью 1iК Максимальное адресное пространство, отводимое для программ, составляет 4 Кбайт. Счетчик команд содержит 12 разрядов, но инкрементируются в процессе счета только младшие 11 разрядов. Поэтому счетчик команд из предельного состояния 7РЕН (если только по этому адресу не расположена команда передачи управления) перейдет в состояние ОООН. Состояние старшего разряда счетчика команд может быть изменено специальными командами ($Е1 МВО, 8ЕЕ МВ 1). Подобный режим работы СК позволяет создать два блока памяти емкостью по 2 Кбайт каждый Карта адресов памяти программ показана на рис. 4.3.
В резидентной памяти программ имеются три специализированных адреса: адрес 0, к которому передается управление сразу после окончания сигнала системного сброса СБРОС; по этому адресу должна находиться команда бе-
зусловного перехода к началу программы; адрес 3, по которому расположен вектор прерывания от внешнего источника; адрес 7, по которому расположен вектор прерывания / от таймера или начальная команда подпрограммы обслуживания прерывания по признаку переполнения таймера/счетчика событий.
Память программ разделяется не только на блоки объемом 2 Кбайт, но и на страницы по 256 байт в каждой. В командах условного перехода задается 8-битный адрес пере дачи управления в пределах текущей страницы. В случае, когда в программе необходимо иметь много переходов по условию, то, если учитывать небольшой размер страницы, возникает проблема размещения подпрограмм в границах страницы и на нескольких страницах. Команда вызова подпрограмм модифицирует 11 разрядов счетчика команд, обеспечивая тем самым межстраничные переходы в пределах выбранного блока памяти программ.
Так как СППЗУ используется не только для хранения командно и констант, то в МК 1816 применяются два способа адресации постоянной памяти для чтения неизменяемых данных: непосредственная адресация, при которой второй байт двухбайтной команды представляет собой операнд; косвенная адресация, при которой содержимое аккумулятора используется в качестве указателя данных в текущей странице или в странице 3 памяти программ
В расширенной МК-системе, работающей с внешней па мятью. программ, возникает проблема размещения подпрограмм в двух блоках памяти. Проблема эта связана с тем, что МК не имеет средств считывания и анализа признака МВ, соответствующего содержимому старшего разряда счетчика команд СК И поэтому в каждый текущий момент исполнения программы, состоящей из потока вызовов подпрограмм, нет возможности определения блока памяти, из которого осуществляется выборка. Так как межблочные переходы выполняются только по командам SЕL МВ0 и SЕL МВ1, то необходимо следить за тем, чтобы подпрограммы, взаимно вызывающие друг друга, располагались в пределах одного блока памяти, В противном случае возникает необходимость модификации признака МВ в вызываемой подпрограмме и восстановление его при возврате в вызывающую подпрограмму. Но если вызов такой подпрограммы носит условный характер, то проблема восстановления может оказаться трудноразрешимой.
При обработке запросов прерываний в МК 1816 старший разряд СК принудительно устанавливается в 0. Это приводит к необходимости подпрограмму обслуживания прерывания и все подпрограммы, вызываемые ею, размещать в пределах блока памяти 0.
Память данных. Рёзидентная память данных емкостью б4байт имеет в своем составе два банка рабочих регистров
0—7 и 24—31 по восемь регистров в каждом. Выбор одного из двух банков регистров выполняется по команде SЕL RB. Рабочие регистры доступны командам с прямой адресацией, а все ячейки ОЗУ доступны командам с косвенной адресацией. В качестве регистров косвенного адреса используются регистры R0, R1 и R0* R1* (рис. 4.4).
Ячейки ОЗУ с адресами 8—23 адресуются указателем стека из ССП и могут быть использованы в качестве 8-уровневого стека (рис. 4,5). В том случае, если уровень вложенности подпрограмм меньше 8, то незадействованные в стеке регистры МОГУТ использоваться как ячейки ОЗУ. При переполнении стена регистр-указатель стека, по строенный на основе 3-разрядного счетчика, переходит из состояния 7 в состояние О. Малая емкость стека ограничивает число возможных внешних источников прерывания в МК-системе. МК 1816 не имеет команд загрузки байта в стек или его извлечения из стена, и в нем фиксируются только содержимое СК и старшая тетрада ССП (признаки). В силу этого программисту необходимо следить за тем, что бы вложенные подпрограммы не использовали одноименные ячейки ОЗУ в качестве рабочих регистров. Если же такая необходимость возникает, то загрузку в стек и извлечение из него можно выполнить программно, путем передачи ССП, в аккумулятор, выделения по маске указателя стека, передачи его в регистр косвенного адреса R0 или R1 с последующим обращением к ОЗУ по сформированному таким образом адресу вершины стека.
Практически все команды с обращением к ОЗУ оперируют с одним байтом. Однако по командам вызова и возврата осуществляется доступ к двухбайтным словам. В памяти данных слова хранятся так, что старший байт слова располагается в ячейке с большим адресом. Отметим, что в памяти программ порядок расположения байт по старшинству при хранении двухбайтных слов обратный.
В расширенных МК-системах, где используется внешнее ОЗУ, через регистры косвенного адреса R0 или R1 возможен доступ к внешней памяти объемом 256 байт. В случае необходимости в МК-системах можно применить внешнее ОЗУ требуемого объема, если, например, использовать 4 бита порта ввода—вывода информации для выбора одной из 16 страниц внешней памяти, каждая из которых имеет объем 256 байт. При этом 4-битный указатель страниц становится дополнением ССП и должен сохраняться в стеке при обработке прерываний.
Дата добавления: 2015-02-25; просмотров: 704;