Datasheet

1997-2013 Microchip Technology Inc. DS30234E-page 49
PIC16C6X
Example 4-1 shows the calling of a subroutine in
page 1 of the program memory. This example assumes
that the PCLATH is saved and restored by the interrupt
service routine (if interrupts are used).
EXAMPLE 4-1: CALL OF A SUBROUTINE IN
PAGE 1 FROM PAGE 0
ORG 0x500
BSF PCLATH,3 ;Select page 1 (800h-FFFh)
BCF PCLATH,4 ;Only on >4K devices
CALL SUB1_P1 ;Call subroutine in
: ;page 1 (800h-FFFh)
:
:
ORG 0x900
SUB1_P1: ;called subroutine
: ;page 1 (800h-FFFh)
:
RETURN ;return to Call subroutine
;in page 0 (000h-7FFh)
4.5 Indirect Addressing, INDF and FSR
Registers
The INDF register is not a physical register. Address-
ing the INDF register will cause indirect addressing.
Indirect addressing is possible by using the INDF reg-
ister. Any instruction using the INDF register actually
accesses the register pointed to by the File Select Reg-
ister, FSR. Reading the INDF register itself indirectly
(FSR = '0') will produce 00h. Writing to the INDF regis-
ter indirectly results in a no-operation (although status
bits may be affected). An effective 9-bit address is
obtained by concatenating the 8-bit FSR register and
the IRP bit (STATUS<7>), as shown in Figure 4-25.
A simple program to clear RAM location 20h-2Fh using
indirect addressing is shown in Example 4-2.
EXAMPLE 4-2: INDIRECT ADDRESSING
movlw 0x20 ;initialize pointer
movwf FSR ; to RAM
NEXT clrf INDF ;clear INDF register
incf FSR,F ;inc pointer
btfss FSR,4 ;all done?
goto NEXT ;NO, clear next
CONTINUE
: ;YES, continue
Applicable Devices
61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67
FIGURE 4-25: DIRECT/INDIRECT ADDRESSING
For memory map detail see Figure 4-5, Figure 4-6, Figure 4-7, and Figure 4-8.
bank select bank select
location select
location select
Direct Addressing
Indirect Addressing
RP1: RP0 6 0
from opcode
IRP 7 FSR 0
00 01 10 11
Bank 0
Bank 1
Bank 2
Bank 3
FFh
80h
Data
Memory
7Fh
00h
17Fh
100h
1FFh
180h