Косвенная адресация данных с постинкрементом

Рис. 14. Косвенная адресация данных с постинкрементом

После выполнения операции регистр X, Y или Z инкрементируется. Адресом операнда является содержимое X, Y или Z регистра предшествовавшее инкрементированию. Команды ST X+,Rg; ST Y+,Rg; ST Z+,Rg; LD Rg,X+; LD Rg, Y+; LD Rg,Z+.

 

1.6. Порты ввода/вывода (I/O)

МК ATmega8515 имеет четыре 8-разрядных порта (A,B,C,D) и один 3-разрядный порт E. Порты ввода/вывода МК AVR ATmega8515 имеют независимые линии "вход/выход" (каждая линия порта может быть запрограммирована независимо от других линий на вход или на выход). Мощные выходные драйверы обеспечивают токовую нагрузочную способность 20 мА на линию порта (втекающий ток) при максимальном значении 40 мА, что позволяет, например, непосредственно подключать к микроконтроллеру светодиоды и биполярные транзисторы. Общая токовая нагрузка на все линии одного порта не должна превышать 80 мА (все значения приведены для напряжения питания 5 В). Архитектурная особенность построения портов ввода/вывода у AVR заключается в том, что для каждого физического вывода (пина) существует 3 бита контроля/управления, а не 2, как у распространенных 8-разрядных микроконтроллеров (Intel, Microchip, Motorola и т.д.). Это позволяет избежать необходимости иметь копию содержимого порта в памяти для безопасности и повышает скорость работы микроконтроллера при работе с внешними устройствами, особенно в условиях внешних электрических помех.

Порт A

Порт A является 8-разрядным двунаправленным I/O портом и оснащен встроенными нагрузочными резисторами.

Взаимодействие с портом A осуществляется тремя расположенными в пространстве I/O памяти данных регистрами (см. Таблицу 1):

1) регистром данных – PORTA, $1B($3B),

2) регистром направления данных – DDRA, $1A($3A),

3) регистром адресов выводов входа – PINA, $19($39).

Регистр адресов выводов входа порта A (PINA) обеспечивает возможность только чтения, регистры данных и направления данных порта A (PORTA, DDRA) обеспечивают возможность и чтения и записи. Все выводы порта A оснащены индивидуально подключаемыми встроенными нагрузочными резисторами.

Выходные буферы выводов порта A обеспечивают втекающий ток до 40 мА, что достаточно для прямого управления LED дисплеями. Если выводы с PA0 по PA7 используются в качестве входов и внешним сигналом удерживаются на низком уровне, то вытекающий ток обеспечивается подключением внутренних нагрузочных резисторов. Выводы порта A могут выполнять, дополнительную к основной функции, функцию обеспечения взаимодействия с внешней дополнительной SRAM данных – они могут быть сконфигурированы как младшие разряды шины адреса/данных внешней SRAM данных.

Дополнительная функция включается установкой бита SRE (разрешение внешней SRAM) в регистре управления MCU (MCUCR), при этом установки регистра направления данных игнорируются.

Регистр PINA – адрес выводов входа порта A не является регистром в полном смысле этого слова, и эти адреса обеспечивают считывание физического состояния каждого вывода порта. При считывании PORTA считывается состояние фиксаторов данных порта A , а при считывании PINA считываются непосредственно логические состояния выводов.

Порт B

Порт B является 8-разрядным двунаправленным I/O портом и оснащен встроенными нагрузочными резисторами. Взаимодействие с портом B осуществляется тремя расположенными в пространстве I/O памяти данных регистрами: регистром данных - PORTB, $18($38), регистром направления данных - DDRB, $17($37) и регистром адресов выводов входа - PINB, $16($36). Регистр адресов выводов входа порта B обеспечивает возможность только чтения, регистры данных и направления данных порта B обеспечивают возможность и чтения и записи.

Порт C

Порт C представляет собой 8-разрядный двунаправленный I/O порт. Кроме основной функции выводы порта C выполняют дополнительную функцию обеспечения взаимодействия с внешней дополнительной SRAM. При использовании внешней SRAM через выводы порта C выводится старший байт адреса внешней SRAM. Взаимодействие с портом С осуществляется тремя расположенными в пространстве I/O памяти данных регистрами: регистром данных - PORTС, $15($35), регистром направления данных - DDRС, $14($34) и регистром адресов выводов входа - PINС, $13($33). Регистр адресов выводов входа порта С обеспечивает возможность только чтения, регистры данных и направления данных порта С обеспечивают возможность и чтения и записи.

Порт D

Порт D является 8-разрядным двунаправленным I/O портом и оснащен встроенными нагрузочными резисторами. Взаимодействие с портом D осуществляется тремя расположенными в пространстве I/O памяти данных регистрами: регистром данных - PORTD, $12($32), регистром направления данных - DDRD, $11($31) и регистром адресов выводов входа - PIND, $10($30). Регистр адресов выводов входа порта D обеспечивает возможность только чтения, регистры данных и направления данных порта D обеспечивают возможность и чтения и записи.

 

Порт E

Порт E является 3-разрядным двунаправленным I/O портом и оснащен встроенными нагрузочными резисторами. Взаимодействие с портом E осуществляется тремя расположенными в пространстве I/ O памяти данных регистров: регистра данных - PORTE, $07($27), регистра направления данных - DDRE, $06($26) и регистра адресов выводов входа - PINE, $05($25). Регистр адресов выводов входа порта E обеспечивает возможность только чтения, регистры данных и направления данных порта E обеспечивают возможность и чтения и записи.

 

1.7. Стек. Указатель стека - Stack Pointer - SP

Микроконтроллер AVR ATmega8515оснащен 16-разрядным указателем стека– регистром SP, размещенным в двух регистрах пространства I/O по адресам $3E ($5E) и $3D ($5D) (Таблица 1). Поскольку ATmega8515 поддерживает объем SRAM до 64 Кбайт, то используются все 16 разрядов указателя стека.

Указатель стека указывает на область в SRAM данных, в которой размещаются стеки подпрограмм и прерываний. Объем стека в SRAM данных должен задаваться программой перед каждым вызовом подпрограммы и обработкой разрешенного прерывания. Указатель стека декрементируется на единицу, при каждом занесении командой PUSH данных в стек, и на две единицы при занесении данных в стек подпрограммой CALL и прерыванием.

Указатель стека инкрементируется на единицу, при извлечении данных из стека командой POP, и на две единицы при извлечении данных из стека при возврате из подпрограммы (RET) или возврате из прерывания (IRET).