English
Language : 

PIC17C7XX_13 Datasheet, PDF (54/306 Pages) Microchip Technology – High-Performance 8-bit CMOS EPROM Microcontrollers with 10-bit A/D
PIC17C7XX
7.3 Stack Operation
PIC17C7XX devices have a 16 x 16-bit hardware stack
(Figure 7-1). The stack is not part of either the program
or data memory space, and the stack pointer is neither
readable nor writable. The PC (Program Counter) is
“PUSH’d” onto the stack when a CALL or LCALL
instruction is executed, or an interrupt is acknowl-
edged. The stack is “POP’d” in the event of a RETURN,
RETLW, or a RETFIE instruction execution. PCLATH is
not affected by a “PUSH” or a “POP” operation.
The stack operates as a circular buffer, with the stack
pointer initialized to '0' after all RESETS. There is a
stack available bit (STKAV) to allow software to ensure
that the stack will not overflow. The STKAV bit is set
after a device RESET. When the stack pointer equals
Fh, STKAV is cleared. When the stack pointer rolls over
from Fh to 0h, the STKAV bit will be held clear until a
device RESET.
Note 1: There is not a status bit for stack under-
flow. The STKAV bit can be used to detect
the underflow which results in the stack
pointer being at the Top-of-Stack.
2: There are no instruction mnemonics
called PUSH or POP. These are actions
that occur from the execution of the CALL,
RETURN, RETLW and RETFIE instruc-
tions, or the vectoring to an interrupt
vector.
3: After a RESET, if a “POP” operation
occurs before a “PUSH” operation, the
STKAV bit will be cleared. This will
appear as if the stack is full (underflow
has occurred). If a “PUSH” operation
occurs next (before another “POP”), the
STKAV bit will be locked clear. Only a
device RESET will cause this bit to set.
After the device is “PUSH’d” sixteen times (without a
“POP”), the seventeenth push overwrites the value
from the first push. The eighteenth push overwrites the
second push (and so on).
7.4 Indirect Addressing
Indirect addressing is a mode of addressing data mem-
ory where the data memory address in the instruction
is not fixed. That is, the register that is to be read or
written can be modified by the program. This can be
useful for data tables in the data memory. Figure 7-6
shows the operation of indirect addressing. This
depicts the moving of the value to the data memory
address specified by the value of the FSR register.
Example 7-1 shows the use of indirect addressing to
clear RAM in a minimum number of instructions. A sim-
ilar concept could be used to move a defined number
of bytes (block) of data to the USART transmit register
(TXREG). The starting address of the block of data to
be transmitted could easily be modified by the program.
FIGURE 7-6:
INDIRECT ADDRESSING
RAM
Instruction
Executed
Opcode
Address
8
File = INDFx
Instruction
Fetched
Opcode
88
File
FSR
7.4.1
INDIRECT ADDRESSING
REGISTERS
The PIC17C7XX has four registers for indirect address-
ing. These registers are:
• INDF0 and FSR0
• INDF1 and FSR1
Registers INDF0 and INDF1 are not physically imple-
mented. Reading or writing to these registers activates
indirect addressing, with the value in the corresponding
FSR register being the address of the data. The FSR is
an 8-bit register and allows addressing anywhere in the
256-byte data memory address range. For banked
memory, the bank of memory accessed is specified by
the value in the BSR.
If file INDF0 (or INDF1) itself is read indirectly via an
FSR, all '0's are read (Zero bit is set). Similarly, if INDF0
(or INDF1) is written to indirectly, the operation will be
equivalent to a NOP, and the status bits are not affected.
DS30289C-page 54
 1998-2013 Microchip Technology Inc.