
SN8P2711A
8位微控制器
2.3
堆栈
2.3.1
概述
SN8P2711A
的堆栈缓存器共
4
层,
程序进入中断或执行
通话
指令时,
用来存储程序计数器
PC
的值。
寄存器
STKP
为堆栈指针, STKnH和
STKnL
分别是各堆栈缓存器的高、½字节。
RET /
RETI
呼叫/
中断
PCH
的PCl
堆栈层数
STKP + 1
STKP - 1
STKP = 3
STKP = 2
STKP = 1
STKP
STKP = 0
堆栈缓存器高
字节
STK3H
STK2H
STK1H
STKP
STK0H
堆栈缓存器½
字节
STK3L
STK2L
STK1L
STK0L
2.3.2
堆栈寄存器
堆栈指针
STKP
是一个
3
½寄存器,存放被访问的堆栈单元地址,10 ½数据存储器
STKnH
和
STKnL
用于暂存堆栈
数据。以上寄存器½½于
银行0 。
½用入指令
推
和出栈指令
POP
可对堆栈缓存器进行操½。堆栈操½遵循后进先出(LIFO)的原则,入栈时堆
栈指针
STKP
的值减
1 ,出栈时STKP
的值加
1,这样,STKP
总是指向堆栈缓存器顶层单元。
系统进入中断或执行
通话
指令之前,程序计数器
PC
的值被存入堆栈缓存器中进行入栈保护。
0DFH
STKP
读/写
复½后
第7位
GIE
读/写
0
第6位
-
-
-
第5位
-
-
-
4位
-
-
-
第3位
-
-
-
第2位
STKPB2
读/写
1
第1位
STKPB1
读/写
1
位0
STKPB0
读/写
1
位[2:0 ]
第7位
STKPBn :堆栈指针(N
= 0 ~ 2)。
GIE:全局中断控制½。
0 =
禁止;
1 =
½½。
例:系统复½时,堆栈指针寄存器内容为默认值,½强烈建议在程序初始部分重新设定,如下面所示:
MOV
B0MOV
0F0H~0FFH
STKnH
读/写
复½后
0F0H~0FFH
STKnL
读/写
复½后
第7位
-
-
-
第7位
SnPC7
读/写
0
第6位
-
-
-
第6位
SnPC6
读/写
0
A, # 00000111B
STKP ,A
第5位
-
-
-
第5位
SnPC5
读/写
0
4位
-
-
-
4位
SnPC4
读/写
0
第3位
-
-
-
第3位
SnPC3
读/写
0
第2位
-
-
-
第2位
SnPC2
读/写
0
第1位
SnPC9
读/写
0
第1位
SnPC1
读/写
0
位0
SnPC8
读/写
0
位0
SnPC0
读/写
0
STKN = STKnH
,
STKnL
(
n = 3 ~ 0
)。
松翰科技股份有限公司
第25页
1.0版