Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Экзамен по архитектуре ЭВМ (v2.0 beta).docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
735.19 Кб
Скачать

47. Организация узла регистра общего назначения (рон). Одноканальный и двухканальный доступ.

Регистры общего назначения в любом микроконтроллере играют очень важную роль. В дальнейшем я буду сокращать их название – писать просто РОН.

РОН принимают участие в выполнении практически всех команд МК, и практически все данные проходят через них. В микроконтроллерах AVR имеется 32 РОН (и это очень хорошо, что их так много. А к примеру, в МК PIC – всего один регистр).

Каждый РОН имеет свое имя: R0, R1, R2 ….. R29, R30, R31. Все РОН объединяются в один файл, который называется файл регистров общего назначения. Регистры общего назначения восьмиразрядные (однобайтовые). Каждому РОН в области памяти данных (SRAM) отведен свой адрес – они занимают ячейки памяти с “нулевой” по “тридцать первую”, или в шестнадцатиричном исчислении – от $00 (0х00) до $1F (0x1F). Т.е., получается, что ячейки памяти SRAM с 0 по 31, одновременно являются и регистрами общего назначения. Мы можем в программе прописать команду: “записать 255 в регистр R31″, а можем прописать: “записать 255 в 31 ячейку памяти данных”, – результат будет один и тот же.

Надо помнить, что физически РОН (как и рассматриваемые ниже регистры ввода/вывода) не входят в память данных, но для повышения эффективности работы МК и его производительности, РОН (и регистры ввода/вывода) располагаются в адресном пространстве памяти данных, и к ним можно обращаться как по их именам, так и как к ячейкам памяти ОЗУ (SRAM).

Так как все РОН восьмиразрядные (однобайтовые) то и оперировать они могут только с однобайтными данными. В случае, если необходимо проводить операции с двухбайтными данными (шестнадцатиразрядными), то РОН с R26 по R31 могут образовывать сдвоенные регистры, которые в свою очередь могут выступать в роли самостоятельных шестандцатиразрядных регистров и тогда они имеют другие имена (такие сдвоенные регистры иногда называют “словом”, по аналогии с ячейками памяти программ):

R26 и R27 – сдвоенный регистр “Х”,

R28 и R29 – сдвоенный регистр “Y”,

R30 и R31 – сдвоенный регистр “Z”.

При этом первый регистр в такой паре (R26, или R28, или R30) играет роль младшего байта и обозначается дополнительной буквой “L”. Например: XL, YL, ZL.

Второй регистр в паре играет роль старшего байта и обозначается дополнительной буквой “H”. Например: XH, YH, ZH.

Это позволяет нам записать (или считать значение), к примеру, двухбайтовое число непосредственно в двойной регистр, обратившись к его буквенному обозначению X, Y или Z, а также считать любой байт (или записать в любой байт) выбрав буквенное обозначение младшего или старшего байта двойного регистра (к примеру XL или XH).

Кроме того необходимо помнить, что хотя и все регистры общего назначения одинаковы, но не все из них могут участвовать в некоторых операциях. При этом, регистрам с R16 по R31 доступны все операции, а регистрам с R0 по R15 – не все.

И еще. В некоторых МК (Tiny) двойной регистр только один – Z (R30,R31).

В описание каждой команды указывается, какие РОН могут участвовать в данной операции, к примеру:

Регистры ввода/вывода

Как мы уже знаем, в МК присутствует много различных периферийных устройств. Кроме них, в МК есть и внутренние устройства. Всеми этими устройствами необходимо управлять, задавать необходимые режимы работы. Для этих целей в МК существуют регистры ввода/вывода.

Все регистры ввода/вывода (в дальнейшем буду писать РВВ) условно можно разделить на два типа:

- служебные регистры микроконтроллера

- регистры, относящиеся к конкретным периферийным устройствам

Все регистры ввода/вывода (как и РОН) занимают свое адресное пространство в памяти данных (SRAM) – от 32 до 95 (или в шестнадцатиричном счислении от $20 до $5F) и идут сразу за регистрами общего назначения, в так называемом адресном пространстве ввода/вывода. Каждый регистр восьмиразрядный и занимает память в один байт.

Всего МК может иметь 64 регистра ввода/вывода – максимальное число (за редким исключением). В тоже время, если МК простенький и в нем мало устройств, и он использует меньшее число РВВ, в области памяти данных все равно резервируется 64 адреса. Некоторым, слишком навороченным МК, стандартного значения в 64 РВВ недостаточно. В таких МК в адресном пространстве памяти данных выделяется еще дополнительно 160 ячеек памяти для дополнительных регистров ввода/вывода.

Еще раз напомню, что хотя РОН и РВВ выделяется место в памяти данных, но доступное пространство памяти данных для нас от этого не уменьшается, ведь физически они там не располагаются. Если написано, что МК имеет память данных 128 байт, то значит мы можем использовать эти 128 байт в своих целях. Просто первый адрес памяти данных будет начинаться не с нуля, как в памяти программ или энергонезависимой памяти.

Каждый регистр ввода/вывода имеет свой номер – от 0 до 63 (или в шестнадцатиричном виде – от $00 до $3F), который соответствует его адресу в адресном пространстве ввода/вывода. Адрес РВВ в адресном пространстве ввода/вывода и адреса соответствующих им ячеек в ОЗУ (памяти данных) не совпадают. Если регистр имеет номер 0, то в адресном пространстве ОЗУ он будет занимать 32 ячейку памяти (ведь сначала идут 32 регистра общего назначения, а за ними уже – РВВ). Для определения адреса РВВ в области памяти данных необходимо прибавить к его номеру 32.

Помимо номера, каждый регистр имеет свое имя (буквенную аббревиатуру) – для удобства программистов.

Для разных МК имена регистров, имеющих одинаковое назначение, обычно совпадают, а вот номер регистра может отличаться. Но это не так и важно, потому, что при программировании оперируют в основном именами регистров.

К примеру, для управления портом ввода-вывода (а их мы рассмотрим очень подробно в следующей статье) имеется три РВВ – один служит для задания направления работы порта (на вывод или ввод информации), второй для … рассмотрим в следующей статье. И так каждое устройство.

Кусочек из таблицы регистров ввода/вывода (первое число – номер регистра, и оно же его адрес в адресном пространстве РВВ, в скобках указывается адрес регистра в адресном пространстве памяти данных, т.е. номер +32):