![Microchip Technology PIC12F1501 Скачать руководство пользователя страница 33](http://html1.mh-extra.com/html/microchip-technology/pic12f1501/pic12f1501_manual_1785833033.webp)
PIC16(L)F1508/9
DS40001609E-page 34
2011-2015 Microchip Technology Inc.
3.5
Stack
All devices have a 16-level x 15-bit wide hardware
stack (refer to Figures
through
). The stack
space is not part of either program or data space. The
PC is PUSHed onto the stack when
CALL
or
CALLW
instructions are executed or an interrupt causes a
branch. The stack is POPed in the event of a
RETURN
,
RETLW
or a
RETFIE
instruction execution. PCLATH is
not affected by a PUSH or POP operation.
The stack operates as a circular buffer if the STVREN
bit is programmed to ‘
0
‘ (Configuration Words). This
means that after the stack has been PUSHed sixteen
times, the seventeenth PUSH overwrites the value that
was stored from the first PUSH. The eighteenth PUSH
overwrites the second PUSH (and so on). The
STKOVF and STKUNF flag bits will be set on an Over-
flow/Underflow, regardless of whether the Reset is
enabled.
3.5.1
ACCESSING THE STACK
The stack is available through the TOSH, TOSL and
STKPTR registers. STKPTR is the current value of the
Stack Pointer. TOSH:TOSL register pair points to the
TOP of the stack. Both registers are read/writable. TOS
is split into TOSH and TOSL due to the 15-bit size of the
PC. To access the stack, adjust the value of STKPTR,
which will position TOSH:TOSL, then read/write to
TOSH:TOSL. STKPTR is 5 bits to allow detection of
overflow and underflow.
During normal program operation,
CALL, CALLW
and
Interrupts will increment STKPTR while
RETLW
,
RETURN
, and
RETFIE
will decrement STKPTR. At any
time STKPTR can be inspected to see how much stack
is left. The STKPTR always points at the currently used
place on the stack. Therefore, a
CALL
or
CALLW
will
increment the STKPTR and then write the PC, and a
return will unload the PC and then decrement the
STKPTR.
Reference
through
for examples
of accessing the stack.
FIGURE 3-4:
ACCESSING THE STACK EXAMPLE 1
Note 1:
There are no instructions/mnemonics
called PUSH or POP. These are actions
that occur from the execution of the
CALL, CALLW
,
RETURN
,
RETLW
and
RETFIE
instructions or the vectoring to
an interrupt address.
Note:
Care should be taken when modifying the
STKPTR while interrupts are enabled.
STKPTR = 0x1F
Stack Reset Disabled
(STVREN =
0
)
Stack Reset Enabled
(STVREN =
1
)
Initial Stack Configuration:
After Reset, the stack is empty. The
empty stack is initialized so the Stack
Pointer is pointing at 0x1F. If the Stack
Overflow/Underflow Reset is enabled, the
TOSH/
TOSL register will return ‘
0
’
. If the
Stack Overflow/Underflow Reset is
disabled, the TOSH/TOSL register will
return the contents of stack address
0x0F.
0x0000
STKPTR = 0x1F
TOSH:TOSL
0x0F
0x0E
0x0D
0x0C
0x0B
0x0A
0x09
0x08
0x07
0x06
0x04
0x05
0x03
0x02
0x01
0x00
0x1F
TOSH:TOSL
Rev. 10-000043A
7/30/2013
Содержание PIC12F1501
Страница 307: ...PIC16 L F1508 9 DS40001609E page 308 2011 2015 Microchip Technology Inc NOTES...
Страница 392: ...2011 2015 Microchip Technology Inc DS40001609E page 393 PIC16 L F1508 9 1RWH 6 7 7 588 8 7...
Страница 399: ...PIC16 L F1508 9 DS40001609E page 400 2011 2015 Microchip Technology Inc NOTES...