11
8197C–AVR–05/11
ATtiny261A/461A/861A
In different addressing modes these address registers function as automatic increment and
automatic decrement (see the instruction set reference for details).
4.5
Stack Pointer
The Stack is mainly used for storing temporary data, local variables and return addresses for
interrupts and subroutine calls. The Stack Pointer Register always points to the top of the Stack,
in the data SRAM Stack area where the subroutine and interrupt stacks are located.
The Stack in the data SRAM must be defined by the program before any subroutine calls are
executed or interrupts are enabled. The Stack Pointer must be set to point above start of the
internal SRAM.
Note that the Stack is implemented as growing from higher to lower memory locations. This
means a Stack PUSH command decreases the Stack Pointer. See
Table 4-1.The AVR Stack Pointer is implemented as two 8-bit registers in the I/O space. The number of
bits actually used is implementation dependent.
Note that the data space in some implementations of the AVR architecture is so small that only
SPL is needed. In this case, the SPH Register will not be present.
4.5.1
SPH and SPL – Stack Pointer Register
15
YH
YL
0
Y-register
70
7
0
R29 (0x1D)
R28 (0x1C)
15
ZH
ZL
0
Z-register
7
070
R31 (0x1F)
R30 (0x1E)
Table 4-1.
Stack Pointer instructions
Instruction
Stack pointer
Description
PUSH
Decremented by 1
Data is pushed onto the stack
ICALL
RCALL
Decremented by 2
Return address is pushed onto the stack with a
subroutine call or interrupt
POP
Incremented by 1
Data is popped from the stack
RET
RETI
Incremented by 2
Return address is popped from the stack with return
from subroutine or return from interrupt
Bit
151413121110
9
8
SP15
SP14
SP13
SP12
SP11
SP10
SP9
SP8
SPH
SP7
SP6
SP5
SP4
SP3
SP2
SP1
SP0
SPL
765432
10
Read/Write
R/W
Initial Value
RAMEND