单片机中写程序时为什么要抬高堆栈指针?

如题所述

51的硬件结构要求堆栈从下往上压入(方向是从低字节RAM到高字节RAM)。
如果堆栈指针设置的太低,那么你的低字节RAM就无法使用了。
比如,SP复位后的值是07H,
如果不调整指针,那么工作寄存器1~3区,以及30H附近的RAM就无法使用;
所以,一般单片机复位以后,运行一条MOV SP,#60H的语句,将堆栈指针设置为60H;
这样,全部工作寄存器区以及30H~5FH的RAM空间用户就可以使用;
60H~7FH的堆栈范围也足够3级子程序或中断嵌套;
当然,如果子程序或中断只有1级或最多2级嵌套,
那么也可将SP设为70H,这样就能留出更多的RAM空间;
但是要注意SP压栈操作时,值一定不能到达80H,那可是P0口。

根据实际情况再定吧,上面说的只是一般情况,
如果你的RAM使用不多,但是子程序或中断特别多,那么你的SP就必须要设低了。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-01-02
51单片机在用汇编语言写程序时常这样,堆栈是从上向下压,默认的堆栈指针往下就压到工作寄存器里了,而写程序时经常用到工作寄存器,怕有冲突,建议改到RAM的顶端。
其他单片机一般不用这样做。
第2个回答  2013-01-02
你这问题描述的不清楚啊?
堆还是栈?
那类单片机?
相似回答