PIC12C5XX
DS40139A-page 16
Advanced Information
1996 Microchip Technology Inc.
4.5
Program Counter
As a program instruction is executed, the Program
Counter (PC) will contain the address of the next
program instruction to be executed. The PC value is
increased by one every instruction cycle, unless an
instruction changes the PC.
For a
GOTO
instruction, bits 8:0 of the PC are provided
by the
GOTO
instruction word. The PC Latch (PCL) is
mapped to PC<7:0>. Bit 5 of the STATUS register
provides page information to bit 9 of the PC (Figure 4-
6).
For a
CALL
instruction, or any instruction where the
PCL is the destination, bits 7:0 of the PC again are
provided by the instruction word. However, PC<8>
does not come from the instruction word, but is always
cleared (Figure 4-6).
Instructions where the PCL is the destination, or
Modify PCL instructions, include
MOVWF PC, ADDWF
PC,
and
BSF PC,5.
FIGURE 4-6:
LOADING OF PC
BRANCH INSTRUCTIONS -
PIC12C508/C509
Note:
Because PC<8> is cleared in the
CALL
instruction, or any Modify PCL instruction,
all subroutine calls or computed jumps are
limited to the first 256 locations of any pro-
gram memory page (512 words long).
PA0
STATUS
PC
8
7
0
PCL
9
10
Instruction Word
7
0
GOTO
Instruction
11
CALL
or Modify PCL Instruction
PA0
STATUS
PC
8
7
0
PCL
9
10
Instruction Word
7
0
11
Reset to ‘0’
4.5.1
EFFECTS OF RESET
The Program Counter is set upon a RESET, which
means that the PC addresses the last location in the
last page i.e., the oscillator calibration instruction. After
executing MOVLW XX, the PC will roll over to location
00h, and begin executing user code.
The STATUS register page preselect bits are cleared
upon a RESET, which means that page 0 is pre-
selected.
Therefore, upon a RESET, a
GOTO
instruction will
automatically cause the program to jump to page 0
until the value of the page bits is altered.
4.6
Stack
PIC12C5XX devices have a 12-bit wide hardware
push/pop stack.
A
CALL
instruction will pushthe current value of stack
1 into stack 2 and then push the current program
counter value, incremented by one, into stack level 1.
If more than two sequential
CALL
’s are executed, only
the most recent two return addresses are stored.
A
RETLW
instruction will popthe contents of stack level
1 into the program counter and then copy stack level 2
contents into level 1. If more than two sequential
RETLW
’s are executed, the stack will be filled with the
address previously stored in level 2. Note that the
W register will be loaded with the literal value specified
in the instruction. This is particularly useful for the
implementation of data look-up tables within the
program memory.