Микроконтроллеры AVR оснащены 16-разрядным указателем стека, размещенным в двух регистрах пространства I/O по адресам $3E ($5E) и $3D ($5D). Поскольку микроконтроллеры ATmega603/103 поддерживают объем SRAM до 64 Кбайт, то используются все 16 разрядов указателя стека.
Указатель стека указывает на область в SRAM данных, в которой размещаются стеки подпрограмм и прерываний. Объем стека в SRAM данных должен задаваться программой перед каждым вызовом подпрограммы и обработкой разрешенного прерывания. Указатель стека декрементируется на единицу, при каждом занесении командой PUSH данных в стек, и на две единицы при занесении данных в стек подпрограммой CALL и прерыванием.
Указатель стека инкрементируется на единицу, при извлечении данных из стека командой POP, и на две единицы при извлечении данных из стека при возврате из подпрограммы (RET) или возврате из прерывания (IRET).
| Биты | ||||||||||||||||||
| $3E ($5E) $3D ($5D) |
| SPH SPL | ||||||||||||||||
| Чтение/Запись |
| |||||||||||||||||
| Начальное состояние |
Регистр выбора страницы Z RAM - The RAM Page Z Select Register - RAMPZ
| Биты | ||||||||||
| $3B ($5B) |
| RAMPZ | ||||||||
| Чтение/Запись |
| |||||||||
| Начальное состояние |
Регистр RAMPZ используется обычно для определения к какой странице RAM, емкостью 64К, возможно обращение посредством указателя Z. Поскольку микроконтроллеры ATmega603/103 не поддерживают SRAM с объемом свыше 64К, этот регистр используется только для выбора страницы в памяти программ при использовании команды ELPM. Различные установки бита RAMPZ0 оказывают следующий эффект:
| RAMPZ0 = 0: | Команде ELPM доступна память программ с адресами от $0000 до $7FFF (младшие 64 Кбайт) |
| RAMPZ0 = 1: | Команде ELPM доступна память программ с адресами от $8000 до $FFFF (старшие 64 Кбайт). |
Отметим, что на LPM не воздействует установка RAMPZ.
Микроконтроллер ATmega603 не содержит регистра RAMPZ и не имеет команды ELPM. Команда LPM способна перекрыть все пространство памяти программ микроконтроллера ATmega603.






