单片机中写程序时为什么要抬高堆栈指针?
2个回答
展开全部
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就必须要设低了。
如果堆栈指针设置的太低,那么你的低字节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就必须要设低了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询