PIC17C75X
Using Figure 7-10, the operations of the PC and
PCLATH for different instructions are as follows:
7.7
Program Counter Module
The Program Counter (PC) is a 16-bit register. PCL,
the low byte of the PC, is mapped in the data memory.
PCL is readable and writable just as is any other regis-
ter. PCH is the high byte of the PC and is not directly
addressable. Since PCH is not mapped in data or pro-
gram memory, an 8-bit register PCLATH (PC high
latch) is used as a holding latch for the high byte of the
PC. PCLATH is mapped into data memory. The user
can read or write PCH through PCLATH.
a) LCALLinstructions:
An 8-bit destination address is provided in the
instruction (opcode). PCLATH is unchanged.
PCLATH → PCH
Opcode<7:0> → PCL
b) Read instructions on PCL:
Any instruction that reads PCL.
PCL → data bus → ALU or destination
PCH → PCLATH
The 16-bit wide PC is incremented after each instruc-
tion fetch during Q1 unless:
c) Write instructions on PCL:
Any instruction that writes to PCL.
8-bit data → data bus → PCL
PCLATH → PCH
• Modified by a GOTO, CALL, LCALL, RETURN,
RETLW, or RETFIEinstruction
• Modified by an interrupt response
• Due to destination write to PCL by an instruction
d) Read-Modify-Write instructions on PCL:
“Skips” are equivalent to a forced NOP cycle at the
skipped address.
Any instruction that does a read-write-modify
operation on PCL, such as ADDWF PCL.
Figure 7-10 and Figure 7-11 show the operation of the
program counter for various situations.
Read: PCL → data bus → ALU
Write: 8-bit result → data bus → PCL
PCLATH → PCH
FIGURE 7-10: PROGRAM COUNTER
OPERATION
e) RETURNinstruction:
Stack<MRU> → PC<15:0>
Internal data bus <8>
Using Figure 7-11, the operation of the PC and
PCLATH for GOTOand CALLinstructions is as follows:
8
CALL, GOTOinstructions:
PCLATH
8
A 13-bit destination address is provided in the
instruction (opcode).
8
Opcode<12:0> → PC<12:0>
PC<15:13> → PCLATH<7:5>
Opcode<12:8> → PCLATH<4:0>
PCH
PCL
FIGURE 7-11: PROGRAM COUNTER USING
THE CALL AND GOTO
The read-modify-write only affects the PCL with the
result. PCH is loaded with the value in the PCLATH.
For example, ADDWF PCLwill result in a jump within the
current page. If PC = 03F0h, WREG = 30h and
PCLATH = 03h before instruction, PC = 0320h after the
instruction. To accomplish a true 16-bit computed
jump, the user needs to compute the 16-bit destination
address, write the high byte to PCLATH and then write
the low value to PCL.
INSTRUCTIONS
15
13 12
8 7
Opcode
0
5
PC<15:13>
3
8
The following PC related operations do not change
PCLATH:
4
5
7
0
PCLATH
a) LCALL, RETLW, and RETFIEinstructions.
8
b) Interrupt vector is forced onto the PC.
15
0
8 7
c) Read-modify-write instructions on PCL (e.g.
PCL
PCH
BSF PCL).
DS30264A-page 52
Preliminary
1997 Microchip Technology Inc.