|
PIC18F86K22-I Datasheet, PDF (105/550 Pages) Microchip Technology – 64/80-Pin, High-Performance, 1-Mbit Enhanced Flash Microcontrollers | |||
|
◁ |
PIC18F87K22 FAMILY
6.4 Data Addressing Modes
Note:
The execution of some instructions in the
core PIC18 instruction set are changed
when the PIC18 extended instruction set is
enabled. For more information, see
Section 6.6 âData Memory and the
Extended Instruction Setâ.
While the program memory can be addressed in only
one way, through the Program Counter, information in
the data memory space can be addressed in several
ways. For most instructions, the addressing mode is
fixed. Other instructions may use up to three modes,
depending on which operands are used and whether or
not the extended instruction set is enabled.
The addressing modes are:
⢠Inherent
⢠Literal
⢠Direct
⢠Indirect
An additional addressing mode, Indexed Literal Offset,
is available when the extended instruction set is
enabled (XINST Configuration bit = 1). For details on
this modeâs operation, see Section 6.6.1 âIndexed
Addressing with Literal Offsetâ.
6.4.1
INHERENT AND LITERAL
ADDRESSING
Many PIC18 control instructions do not need any
argument at all. They either perform an operation that
globally affects the device or they operate implicitly on
one register. This addressing mode is known as Inherent
Addressing. Examples of this mode include SLEEP,
RESET and DAW.
Other instructions work in a similar way, but require an
additional explicit argument in the opcode. This method
is known as the Literal Addressing mode because the
instructions require some literal value as an argument.
Examples of this include ADDLW and MOVLW, which
respectively, add or move a literal value to the W
register. Other examples include CALL and GOTO,
which include a 20-bit program memory address.
6.4.2 DIRECT ADDRESSING
Direct Addressing specifies all or part of the source
and/or destination address of the operation within the
opcode itself. The options are specified by the
arguments accompanying the instruction.
In the core PIC18 instruction set, bit-oriented and
byte-oriented instructions use some version of Direct
Addressing by default. All of these instructions include
some 8-bit literal address as their Least Significant
Byte. This address specifies the instructionâs data
source as either a register address in one of the banks
of data RAM (see Section 6.3.3 âGeneral Purpose
Register Fileâ) or a location in the Access Bank (see
Section 6.3.2 âAccess Bankâ).
The Access RAM bit, âaâ, determines how the address
is interpreted. When âaâ is â1â, the contents of the BSR
(Section 6.3.1 âBank Select Registerâ) are used with
the address to determine the complete 12-bit address
of the register. When âaâ is â0â, the address is interpreted
as being a register in the Access Bank. Addressing that
uses the Access RAM is sometimes also known as
Direct Forced Addressing mode.
A few instructions, such as MOVFF, include the entire
12-bit address (either source or destination) in their
opcodes. In these cases, the BSR is ignored entirely.
The destination of the operationâs results is determined
by the destination bit, âdâ. When âdâ is â1â, the results are
stored back in the source register, overwriting its origi-
nal contents. When âdâ is â0â, the results are stored in
the W register. Instructions without the âdâ argument
have a destination that is implicit in the instruction,
either the target register being operated on or the W
register.
6.4.3 INDIRECT ADDRESSING
Indirect Addressing allows the user to access a location
in data memory without giving a fixed address in the
instruction. This is done by using File Select Registers
(FSRs) as pointers to the locations to be read or written
to. Since the FSRs are themselves located in RAM as
Special Function Registers, they can also be directly
manipulated under program control. This makes FSRs
very useful in implementing data structures such as
tables and arrays in data memory.
The registers for Indirect Addressing are also
implemented with Indirect File Operands (INDFs) that
permit automatic manipulation of the pointer value with
auto-incrementing, auto-decrementing or offsetting
with another value. This allows for efficient code using
loops, such as the example of clearing an entire RAM
bank in Example 6-5. It also enables users to perform
Indexed Addressing and other Stack Pointer
operations for program memory in data memory.
EXAMPLE 6-5:
HOW TO CLEAR RAM
(BANK 1) USING
INDIRECT ADDRESSING
NEXT
LFSR
CLRF
BTFSS
BRA
CONTINUE
FSR0, 100h ;
POSTINC0 ; Clear INDF
; register then
; inc pointer
FSR0H, 1 ; All done with
; Bank1?
NEXT
; NO, clear next
; YES, continue
ï£ 2009-2011 Microchip Technology Inc.
DS39960D-page 105
|
▷ |