Команды, оперирующие с двумя регистрами, действуют, в основном, аналогичным образом. В этих командах регистр-приемник (destination) указывается перед регистром-источником (source), то есть является первым параметром. Таким образом, команда
add R0, R1
реально выполняется так: R0 = R0 + R1. Рассмотренные способы адресации операндов называются прямой регистровой адресацией (рисунок 16).
Рис. 16. Прямая адресация AVR к двум РОН
Операнды могут также входить в состав команды. В других контроллерах это называется «непосредственной адресацией». В AVR будем называть этот способ адресации «непосредственной прямой регистровой» (рисунок 17). Хорошим примером команды с такой адресацией является ORI: так как поле адреса составляет 4 бита, возможно обращаться только к 16 старшим РОН.
Рис. 17. Непосредственная адресация AVR
Это, очевидно, окажет влияние на то, как разместить данные в рабочих регистрах. Чтобы избежать ошибок, можно использовать в качестве рабочих 16 старших регистров общего назначения, имеющих адреса с $10 по $1F.
Последняя форма прямой адресации, применяемая для доступа ко всему объему адресуемой памяти, использует второе слово команды для указания 16-разрядного адреса. При этом способе адресации данные, размещенные в любой точке адресуемой памяти, поступают в РОН или выбираются из них. Есть две особенности, на которые стоит обратить внимание при такой адресации. Первая особенность – опять доступны только 16 старших РОН. Вторая особенность – команды с такой адресацией не реализуются в младших моделях AVR1200. В этих моделях для передачи данных между РОН и набором регистров ввода-вывода используются команды in и out, реализующие прямую адресацию двух регистров.
Последний способ обращения к данным – косвенная адресация. По технической документации на микроконтроллеры AVR видно, что в ней используется пять рисунков для описания этого способа адресации, реализация которого иллюстрируется на рисунке 18. На этом рисунке показана только косвенно-регистровая адресация и не приведены ее варианты с предекрементом и постинкрементом. Основные команды косвенной адресации используют содержимое индексных регистров в качестве адреса для выборки данных. Это похоже на индексную адресацию в большинстве других микроконтроллеров. Это единственный режим, доступный в младших моделях AVR, где для обращения к РОН может использоваться только индексный регистр Z, а РОН и регистры ввода-вывода не образуют общее регистровое пространство.
Рис. 18. Косвенная адресация к РОН-памяти данных в AVR
При обычной косвенно-регистровой адресации содержимое индексного регистра не изменяется при выполнении операции. Для получения эффективного адреса можно использовать положительное смещение, прибавляемое к содержимому индексного регистра. Такой способ адресации называется косвенно-регистровой адресацией со смешением. Смещение может иметь значение от нуля до 63 и прибавляется к величине, хранящейся в индексном регистре. Такой способ адресации наиболее эффективен при обращении к структуре данных, когда смещение указывает на нужный элемент в структуре. Полученный эффективный адрес не сохраняется после операции.
Есть и другие варианты косвенной адресации: косвенно–регистровая с предекрементом и косвенно-регистровая с постинкрементом. При их использовании происходит изменение содержимого индексного регистра в процессе выполнения команды – либо до обращения к памяти (предекремент), либо после (постинкремент). Значительным преимуществом этих команд является возможность организации стека, кроме того они могут служить для индексации элементов в структурах данных. Это позволяет эффективно применять AVR при разработке компиляторов для языков высокого уровня, которые используют локальные переменные.
В технической документации для микроконтроллеров AVR показано, каким образом можно обеспечить обращение к данным, размещенным в памяти программ, и как изменяется содержимое программного счетчика.
ВЫВОДЫ
Эффективность микроконтроллеров семейства AVR поддерживается наличием флаш-памяти для хранения программ с возможностью внутрисхемного программирования. Но наличие только 32 регистров общего назначения является ограничением при написании прикладных программ. Новые модели AVR обладают дополнительными периферийными устройствами и вариантами реализации памяти, что значительно обогащает данное семейство микроконтроллеров.
СПИСОК ЛИТЕРАТУРЫ
1. Мирский Г.Я. Микропроцессоры в измерительных приборах / Г.Я. Мирский. – М.: Радио и связь, 1984. – 160 с.
2. Шилейко А.В. Микропроцессоры / А.В. Шилейко, Т.И. Шилейко. – М.: Радио и связь, 1986. – 112 с.
4. Голубцов М.С. Микроконтроллеры AVR: от простого к сложному / М.С. Голубцов, А.В. Кириченкова. – М.: СОЛОН–Пресс, 2006. – 304 с.
5. Предко М. Руководство по микроконтроллерам. Т. 1 / М. Предко. – М.: Постмаркет, 2001. – 416 с.
6. Варламов И.В. Микропроцессоры в бытовой технике / И.В. Варламов, И.Л. Касаткин. – М.: Радио и связь, 1990. – 104 с.
7. Токхейм Р. Основы цифровой электроники. – М.: Мир, 1998. – 392 с.
8. Хартов В.Я. Микроконтроллеры AVR. Практикум для начинающих / В.Я. Хартов. – М: Изд-во МГТУ им. Н.Э. Баумана, 2007. – 240 с.
Размещено