
PIC18F6585/8585/6680/8680
DS30491C-page 404
2004 Microchip Technology Inc.
TBLWT
Table Write
Syntax:
[ label ] TBLWT ( *; *+; *-; +*)
Operands:
None
Operation:
if TBLWT*,
(TABLAT)
→ Holding Register;
TBLPTR – No Change;
if TBLWT*+,
(TABLAT)
→ Holding Register;
(TBLPTR) + 1
→ TBLPTR;
if TBLWT*-,
(TABLAT)
→ Holding Register;
(TBLPTR) – 1
→ TBLPTR;
if TBLWT+*,
(TBLPTR) + 1
→ TBLPTR;
(TABLAT)
→ Holding Register;
Status Affected: None
Encoding:
0000
11nn
nn=0 *
=1 *+
=2 *-
=3 +*
Description:
This instruction uses the 3 LSBs of
TBLPTR to determine which of the
8 holding registers the TABLAT is
written to. The holding registers are
used to program the contents of
Program Memory (P.M.). (Refer
programming Flash memory.)
The TBLPTR (a 21-bit pointer) points
to each byte in the program memory.
TBLPTR has a 2-MBtye address
range. The LSb of the TBLPTR
selects which byte of the program
memory location to access.
TBLPTR[0] = 0: Least Significant
Byte of Program
Memory Word
TBLPTR[0] = 1: Most Significant
Byte of Program
Memory Word
The TBLWT instruction can modify
the value of TBLPTR as follows:
no change
post-increment
post-decrement
pre-increment
TBLWT
Table Write (Continued)
Words: 1
Cycles: 2
Q Cycle Activity:
Q1
Q2
Q3
Q4
Decode
No
operation
No
operation
No
operation
No
operation
No
operation
(Read
TABLAT)
No
operation
No
operation
(Write to
Holding
Register )
Example1:
TBLWT
*+;
Before Instruction
TABLAT
=
0x55
TBLPTR
=
0x00A356
HOLDING REGISTER
(0x00A356)
=
0xFF
After Instructions (table write completion)
TABLAT
=
0x55
TBLPTR
=
0x00A357
HOLDING REGISTER
(0x00A356)
=
0x55
Example 2:
TBLWT
+*;
Before Instruction
TABLAT
=
0x34
TBLPTR
=
0x01389A
HOLDING REGISTER
(0x01389A)
=
0xFF
HOLDING REGISTER
(0x01389B)
=
0xFF
After Instruction (table write completion)
TABLAT
=
0x34
TBLPTR
=
0x01389B
HOLDING REGISTER
(0x01389A)
=
0xFF
HOLDING REGISTER
(0x01389B)
=
0x34