PIC配置位之STVREN

2019-04-15 15:57发布

讨论这个配置位之前先来看看相关知识。 下面的图是某型号PIC芯片的程序存储器的映射和堆栈: 从上面可以看出,该PIC芯片有31级堆栈。 下面的图是堆栈的更详细的情况: 上图有个重要的东西,Stcak Pointer(STKPTR),就是堆栈的指针。5位可以实现32个地址的寻址,但是STKPTR=00000是不指向任何RAM单元的,只是表示堆栈满了,上溢或下溢。所以堆栈只有31级。
入栈(Push):先让STKPTR加1,再把PC(程序计数器 Program Counter)中的值写入STKPTR指向的单元中。 出栈(Pop):先把PC中的值写入STKPTR指向的单元中,在让STKPTR减1。 如果一直Push而不Pop的话,当到第32次你再Push就Push不进去了,因为没地方了嘛,接下来进入正题咯。 STVREN: Stack Full/Underflow Reset Enable bit 1 = Stack full/underflow will cause Reset 0 = Stack full/underflow will not cause Reset   如果STVREN 位已经置1 (默认),第31 次进栈将把(PC + 2)值压入堆栈,从而将STKFUL(Stack满标志位) 位置1 并复位器件。STKFUL 位将保持置1,而堆栈指针将被清零。(If STVREN is set(default), the 31st push will push the (PC + 2) value onto the stack, set the STKFUL bit and reset the device. The STKFUL bit will remain set and the Stack Pointer will be set to zero.)
  如果将STVREN 清零,第31 次进栈时STKFUL 位将会置1,堆栈指针递增到31。任何其他进栈操作都不会覆盖第31 次进栈的值,并且STKPTR 将保持为31。(If STVREN is cleared, the STKFUL bit will be set on the 31st push and the Stack Pointer will increment to 31.Any additional pushes will not overwrite the 31st push and STKPTR will remain at 31.)


原创声明:关于PIC的博客我也同时更新在 与非网 无知的萝卜的博客