PIC16CR54C
4.7
Indirect Data Addressing; INDF and
FSR Registers
EXAMPLE 4-2: HOW TO CLEAR RAM
USING INDIRECT
ADDRESSING
The INDF register is not
a physical register.
movlw 0x10
;initialize pointer
Addressing INDF actually addresses the register
whose address is contained in the FSR register (FSR
is a pointer). This is indirect addressing.
movwf FSR
; to RAM
;clear INDF register
NEXT
clrf
incf
INDF
FSR,F ;inc pointer
btfsc FSR,4 ;all done?
goto
NEXT
;NO, clear next
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
CONTINUE
:
;YES, continue
The FSR is a 5-bit ( PIC16CR54C) wide register. It is
used in conjunction with the INDF register to indirectly
address the data memory area.
• Increment the value of the FSR register by one
(FSR = 06)
• A read of the INDR register now will return the
value of 0Ah.
The FSR<4:0> bits are used to select data memory
addresses 00h to 1Fh.
PIC16CR54C: Do not use banking. FSR<6:5> are
unimplemented and read as '1's.
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.
FIGURE 4-6: DIRECT/INDIRECT ADDRESSING
Direct Addressing
Indirect Addressing
(FSR)
5
(FSR)
0
6
4
4
(opcode)
0
5
6
location select
location select
bank select
bank
00
00h
Data
Memory
0Fh
10h
(1)
1Fh
Bank 0
Note 1: For register map detail see Section 4.2.
DS40191A-page 18
Preliminary
1998 Microchip Technology Inc.