
PIC16C505
DS40192D-page 18
1999-2012 Microchip Technology Inc.
4.8
Indirect Data Addressing; INDF and
FSR Registers
The INDF
register
is not
a physical register.
Addressing 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 07 contains the value 10h
Register file 08 contains the value 0Ah
Load the value 07 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 = 08)
A read of the INDR 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 10h-1Fh
EXAMPLE 4-2:
HOW TO CLEAR RAM
USING INDIRECT
ADDRESSING
movlw
0x10
;initialize pointer
movwf
FSR
; to RAM
NEXT
clrf
INDF
;clear INDF register
incf
FSR,F
;inc pointer
btfsc
FSR,4
;all done?
goto
NEXT
;NO, clear next
CONTINUE
:
;YES, continue
:
The FSR is a 5-bit wide register. It is used in
conjunction with the INDF register to indirectly address
the data memory area.
The FSR<4:0> bits are used to select data memory
addresses 00h to 1Fh.
The device uses FSR<6:5> to select between banks
0:3.
FIGURE 4-4:
DIRECT/INDIRECT ADDRESSING
Direct Addressing
(FSR)
6
5
4
(opcode)
0
bank select
location select
00
01
10
11
00h
0Fh
10h
Data
Memory(1)
1Fh
3Fh
5Fh
7Fh
Bank 0
Bank 1
Bank 2
Bank 3
Addresses
map back to
addresses
in Bank 0.
Indirect Addressing
6
5
4
(FSR)
0
bank
location select