Datasheet
2000 Microchip Technology Inc. Preliminary DS40197B-page 17
PIC16HV540
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-3: 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 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-4.
EXAMPLE 4-4: 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 (PIC16HV540) 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.
PIC16HV540: Do not use banking. FSR<6:5> are
unimplemented and read as '1's.
FIGURE 4-4: DIRECT/INDIRECT ADDRESSING
Note 1: Bits 5 and 6 are unimplemented and read as 1’s.
2: For register map detail, see Section 4.2.
location select
location select
(Note 1)
Indirect AddressingDirect Addressing
Data
Memory
(2)
0Fh
10h
Bank 0
0
4
5
6
(FSR)
00h
1Fh
(opcode) 04
5
6
(FSR)
(Note 1)