Регистры общего назначения
Все регистры общего назначения объединены в файл, структура которого показана на рисунке 1.6.
Как уже было сказано, в микроконтроллерах AVR все 32 РОН непосредственно доступны АЛУ в отличие от микроконтроллеров других фирм, в которых имеется только один такой регистр – рабочий регистр W (аккумулятор). Благодаря этому любой РОН может использоваться во всех командах и как операнд-источник и как операнд-приемник. Исключение составляют лишь пять арифметических и логических команд, выполняющих действия между константой и регистром (SBCI, SUBI, CPI, ANDI, ORI), а также команда загрузки константы в регистр (LDI). Эти команды могут обращаться только ко второй половине регистров (R16...R31). Ряд регистров общего назначения используется в качестве указателей при косвенной адресации памяти данных. В модели AT90S1200 таким регистром является регистр R30 (регистр Z). Поскольку объем адресуемой памяти данных этой модели составляет всего 96 байт, для хранения адреса достаточно одного 8-разрядного регистра. Во всех других моделях для косвенной адресации используются три 16-разрядных регистра (регистры X, Y и Z), каждый из которых получается объединением двух РОН (рисунок 1.7). Как показано на рисунке 1.6, каждый регистр файла имеет свой собственный адрес в пространстве памяти данных (кроме AT90S1200). Поэтому к ним можно обращаться как к памяти, несмотря на то, что физически эти регистры не являются ячейками ОЗУ.
Регистры ввода/вывода Регистры ввода/вывода располагаются в так называемом пространстве ввода/вывода размером 64 байта. Все РВВ можно разделить на две группы: служебные регистры микроконтроллера и регистры, относящиеся к периферийным устройствам (в т.ч. порты ввода/вывода). Размер каждого регистра – 8 разрядов. Распределение адресов пространства ввода/вывода зависит от конкретной модели микроконтроллера, т.к. разные модели имеют различный состав периферийных устройств и, соответственно, разное количество регистров. Размещение РВВ в адресном пространстве ввода/вывода для всех моделей семейства приведено в таблицах П.1-П.4. Общее замечание к таблицам: если адрес в таблице не указан, это означает, что для данной модели он зарезервирован, и запись по этому адресу запрещена (крайне не рекомендуется). К любому регистру ввода/вывода можно обратиться с помощью команд IN и OUT, выполняющих пересылку данных между одним из 32 РОН и пространством ввода/вывода. Кроме того, имеются 4 команды поразрядного доступа, использующие в качестве операндов регистры ввода/вывода: команды установки/сброса отдельного разряда (SBI и CBI) и команды проверки состояния отдельного разряда (SBIS и SBIC). Обратите внимание, что эти команды могут обращаться только к 1-й половине регистров ввода/вывода (адреса $00...$1F). Так же, как и к РОН, к регистрам ввода/вывода можно обращаться двумя способами: как собственно к регистрам (с помощью команд IN и OUT) и как к ячейкам ОЗУ (кроме AT90S1200). В первом случае используются адреса РВВ, принадлежащие пространству ввода/вывода ($00...$3F). Во втором случае адрес РВВ необходимо увеличить на $20 (в таблицах при указании адресов РВВ в скобках указываются соответствующие им адреса ячеек ОЗУ). Все служебные регистры перечислены в таблице 1.2, знак "+" в таблице означает, что тот или иной регистр присутствует в данной модели микроконтроллера. Обратите внимание, что адреса служебных регистров не меняются от модели к модели (т.е. регистр SREG всегда расположен по адресу $3F ($5F), GIMSK — по адресу $ЗВ ($5В) и т.д.).
Таблица 1.2 – Служебные регистры микроконтроллеров семейства Classic
1.6.8.3 Регистр состояния SREG Регистр состояния располагается по адресу $3F ($5F). Этот регистр представляет собой набор флагов, показывающих текущее состояние микроконтроллера. Эти флаги автоматически устанавливаются в "1" или в "0" при наступлении определенных событий (в соответствии с результатом выполнения команд). Все разряды этого регистра доступны как для чтения, так и для записи в любой момент времени. После сброса микроконтроллера все разряды регистра сбрасываются в "0". Содержимое этого регистра показано на рисунке 1.8, а его описание приведено в таблице 1.3.
Рисунок 1.8 – Регистр состояния SREG
Таблица 1.3 – Регистр состояния SREG
SP (указатель стека) В моделях, имеющих объем ОЗУ до 128 байт (адресное пространство ОЗУ – $000...$ODF), указатель стека реализован на одном регистре SPL, расположенном по адресу $3D ($5D). В остальных моделях указатель стека реализован на паре регистров SPH:SPL, расположенных по адресам $ЗЕ ($5Е) и $3D ($5D) соответственно. Причем для всех моделей, кроме АТ9084414 и AT90S8515, в регистре SPH (старший байт указателя стека) используются только 1 (объем ОЗУ – 256 байт) или 2 (объем ОЗУ – 512 байт) младших разряда, остальные разряды доступны только для чтения и содержат "0". В моделях AT90S4414 и AT90S8515 оба регистра SPH:SPL используются полностью, т.к. максимальный объем памяти в этих моделях равен 64 Кбайт. Все используемые разряды регистров доступны как для чтения, так и для записи в любой момент времени. После сброса микроконтроллера содержимое регистров равно 0, поэтому в самом начале программы указатель стека необходимо проинициализировать каким-либо значением (как правило, это наибольший для конкретного микроконтроллера адрес памяти данных).
Популярное: ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (382)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |