Datasheet
PIC16F526
DS41326E-page 22 2010 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.
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).
The FSR is an 8-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.
FSR<6:5> are the bank select bits and are used to
select the bank to be addressed (00 = Bank 0,
01 =Bank 1, 10 = Bank 2, 11 = Bank 3).
FSR<7> is unimplemented and read as ‘1’.
A simple program to clear RAM locations 10h-1Fh
using indirect addressing is shown in Example 4-1.
EXAMPLE 4-1: HOW TO CLEAR RAM
USING INDIRECT
ADDRESSING
FIGURE 4-4: DIRECT/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
:
Note 1: For register map detail see Figure 4-1.
bank
select
location select
location select
bank select
Indirect Addressing
Direct Addressing
Data
Memory
(1)
0Ch
0Dh
0
4
5
6
(FSR)
1000 01 11
00h
0Fh 2Fh 4Fh 6Fh
(opcode)
04
5
6
(FSR)
Addresses map back to
addresses in Bank 0.
3
2
1
3
2
1
10h
Bank 0 Bank 1 Bank 2 Bank 3
1Fh 3Fh 5Fh 7Fh