PIC18F6585/8585/6680/8680
寄存器4-2 :
STKPTR注册
R/C-0
STKFUL
(1)
第7位
第7位
STKFUL :
堆栈满标志位
1
=堆栈满或溢出
0
=堆栈未满或未溢出
STKUNF :
堆栈下溢标志位
1
=发生堆栈下溢
0
=堆栈下溢并没有出现
未实现:
读为' 0 '
SP4 : SP0 :
堆栈指针地址位
注1 :
第7位和第6位,只能在用户软件或上电复位清零。
图例:
C =清零位
- n =上电复位值
R =可读位
' 1 ' =置
U =未实现位,读为' 0 'W =可写位
' 0 ' =清零
X =未知
R/C-0
STKUNF
(1)
U-0
—
R/W-0
SP4
R/W-0
SP3
R/W-0
SP2
R/W-0
SP1
R/W-0
SP0
位0
第6位
第5位
4-0位
图4-4:
返回地址堆栈和相关寄存器
返回地址栈
11111
11110
11101
TOSU
00h
胡说
1Ah
TOSL
34h
的栈顶001A34h
000D58h
00011
00010
00001
00000
STKPTR<4 : 0>
00010
4.2.3
推
和
POP
说明
4.2.4
堆栈满/下溢复位
由于顶级的堆栈( TOS )是可读可写的,
因此将值压入堆栈,并拉值的能力
从堆栈中,而不会破坏程序的正常执行
化,是一个理想的选择。要将当前的PC值
压入堆栈,一个
推
指令可以被执行。
这将递增堆栈指针和加载电流
租PC值压入堆栈。 TOSU , TOSH和TOSL
然后,可以修改以放置在返回地址
堆栈。
拉TOS值从堆栈的能力,
它用先前推的值替换
压入堆栈,而不会破坏正常执行,是
通过使用所获得的
POP
指令。该
POP
指令
化用递减放弃当前的TOS
堆栈指针。以前的值被压入
堆栈就成为了TOS值。
这些复位通过编程启用
STVREN配置位。当STVREN位
残疾人,全部或下溢状态会将
相应的STKFUL或STKUNF位,但不会使
器件复位。当STVREN位被使能,全
或下溢条件会将相应的STKFUL
或STKUNF位,然后使器件复位。该
STKFUL或STKUNF位只能由用户清零
软件或上电复位。
2004年Microchip的科技公司
DS30491C第55页