1996 Microchip Technology Inc.
Advance Information
DS40139A-page 17
PIC12C5XX
4.7
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:
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
using indirect addressing is shown in Example 4-2.
INDIRECT ADDRESSING
EXAMPLE 4-2:
HOW TO CLEAR RAM
USING INDIRECT
ADDRESSING
0x10
;initialize pointer
FSR
; to RAM
INDF
;clear INDF register
FSR,F
;inc pointer
FSR,4
;all done
NEXT
;NO, clear next
movlw
movwf
clrf
incf
btfsc
goto
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.
PIC12C508:
Does not use banking. FSR<6:5> are
unimplemented and read as '1's.
PIC12C509:
Uses FSR<5>. Selects between bank 0
and bank 1. FSR<6> is unimplemented, read as '1’ .
FIGURE 4-7:
DIRECT/INDIRECT ADDRESSING
Note 1:
For register map detail see Section 4.2.
Note 2:
PIC12C509 only
bank
location select
location select
bank select
Indirect Addressing
Direct Addressing
Data
Memory
(1)
0Fh
10h
Bank 0
Bank 1
(2)
0
4
5
6
(FSR)
00
01
00h
1Fh
3Fh
(opcode)
0
4
5
6
(FSR)
Addresses
map back to
addresses
in Bank 0.