
PIC16F8X
1998 Microchip Technology Inc.
DS30430C-page 19
4.5
Indirect Addressing; INDF and FSR
Registers
The INDF register is not a physical register. Address-
ing INDF actually addresses the register whose
address is contained in the FSR register (FSR is a
pointer). This is indirect addressing.
EXAMPLE 4-1:
INDIRECT ADDRESSING
Register file 05 contains the value 10h
Register file 06 contains the value 0Ah
Load the value 05 into the FSR register
A read of the INDF register will return the value of
10h
Increment the value of the FSR register by one
(FSR = 06)
A read of the INDF register now will return the
value of 0Ah.
Reading INDF itself indirectly (FSR = 0) will produce
00h. Writing to the INDF register indirectly results in a
no-operation (although STATUS bits may be affected).
A simple program to clear RAM locations 20h-2Fh
EXAMPLE 4-2:
HOW TO CLEAR RAM
USING INDIRECT
ADDRESSING
movlw
0x20
;initialize pointer
movwf
FSR
;
to RAM
NEXT
clrf
INDF
;clear INDF register
incf
FSR
;inc pointer
btfss
FSR,4 ;all done?
goto
NEXT
;NO, clear next
CONTINUE
:
;YES, continue
An effective 9-bit address is obtained by concatenating
the 8-bit FSR register and the IRP bit (STATUS<7>), as
shown in
Figure 4-1. However, IRP is not used in the
PIC16F8X.
FIGURE 4-1:
DIRECT/INDIRECT ADDRESSING
Direct Addressing
RP1 RP0
6
from opcode
0
IRP
7
(FSR)
0
Indirect Addressing
bank select
location select
bank select
location select
00
01
10
11
00h
7Fh
00h
0Bh
0Ch
2Fh (1)
30h (1)
7Fh
not used
Bank 0
Bank 1
Bank 2
Bank 3
Note 1:
PIC16F83 and PIC16CR83 devices.
2:
PIC16F84 and PIC16CR84 devices
3:
4Fh (2)
50h (2)
Addresses
map back
to Bank 0
Data
Memory (3)
not used