单片机程序SP不停的向上加,希望高手指点。

作者&投稿:姬差 (若有异议请与网页底部的电邮联系)
在单片机程序设计的时,有时为什么要对堆栈指针SP重新赋值~

初始化时通常要重新初始化栈,尤其是使用汇编时,你必需自已去归划RAM,

是55h。因为单片机中,在进入子程序时,会先将子程序后的PC地址先压入堆栈保存(2字节),若在子程序退出时,会自动将进入时保存的PC值出栈恢复(两个字节)。所以当SP=57h时子程序返回(即退出子程序),因PC值出栈恢复,故SP=57h-2=55h;

楼主对两类指令的概念不甚清晰:子程序调用指令LCALL与跳转类指令LJMP、JNB等:

1、LJMP、JNB、CJNE等均为跳转语句,跳转后程序指针PC指向跳转位置,但不影响SP堆栈的值;

2、LCALL、ACALL等为子程序调用指令,执行前需要将下一条指令的地址(PC指针)压入堆栈(2各字节),所以SP+2,然后PC指针移动到子程序开始的位置去执行子程序;在子程序执行完成后通过RET指令将PC指针恢复到调用前CALL语句的下一条指令,同时将SP-2。

由于程序中有很多处使用了LCALL,但相应的子程序体中又没有RET返回指令,所以造成SP不断增加,举例如下:
。。。。。。。。。
ORG 30H
WXL: JNB P2.5 SCL
LJMP WXL
SCL: LCALL YS1
JNB P2.5,WXL100
LCALL WXL ;这句有问题,执行后SP+2,再回到上面的WXL又回到这,SP又会+2,永无止境。
。。。。。。。。。。

由于这类错误太多,且不了解软件功能,就不一一列举了,建议楼主重新清理一下思路。

CALL太多,RET太少,理论上来说,每次调用CALL,都应该对应一个RET调用才行,否则CALL一次压栈一次,像这种方便面程序(就是毫无头绪的意思啦),多少堆栈也不够用啊,呵呵,建议没有必要用CALL的地方就用JMP好了,更有意义的建议是理清思路,使用结构化的思想规划程序结构,重写程序。


芯片(单片机)是怎么认识程序转化来的二进制,0是低电平,1是高电平使...
手机不再是单纯的手机,它是有情感的智能机器人,而它的芯片被别人控制,我们不仅仅要学会和人相处,更要学会和手机处理好关系,它一不高兴,就有办法给我们设置阻碍,天下之大,能人倍出,望老天爷快速研究出新的东西来智胜它吧,不想被手机控制,望转发!保护自己自己的隐私是每个公民的权利!

推片机sc与sp的区别在哪
功能不同,设计不同。1、功能不同,SC主要用于单色及双色印刷,而SP则更加适用于彩色印刷。2、设计不同,SC的设计更加简单,只有一个横向滑板,而SP则具有两个滑板,一个横向和一个纵向的。

...有哪位师兄能向我传授一些学好单片机的经验。
一、总线:我们知道,一个电路总是由元器件通过电线连接而成的,在模拟电路中,连线并不成为一个问题,因为各器件间一般是串行关系,各器件之间的连线并不很多,但计算机电路却不一样,它是以微处理器为核心,各器件都要与微处理器相连,各器件之间的工作必须相互协调,所以就需要的连线就很多了,如果仍如同模拟电路一样,在...

请推荐几款GBA SP游戏机片!
铁臂阿童木-原子之心的秘密 逆转裁判 蜡笔小新 哈利波特 星之卡比 王国之心-记忆之链 鬼武者 网球王子金版 最终幻想战略版 瓦利奥制造 奇奇怪界 马里奥&路易RPG 动物园 超级马里欧2 沙罗曼蛇 勇者斗恶龙 口袋怪兽 塞尔达系列 索尼克战斗 龙珠-舞空斗剧 动物管理员 ...

sp功能是什么
SP= Super Power ① 三诺技展公司旗下自主品牌,主要经营电脑周边设备如:鼠标,键盘,机箱,电源,显示器等产品.是国内外较大的知名电脑外设品牌。 ②GolemLabs 开发3D策略\/即时战略\/政治模拟\/军事模拟\/经济模拟游戏“超级力量”,集政治经济军事模拟一体化 SP = service pack ,补丁包。××SP2是××...

sp是什么单词的缩写?
SP = Stream Processing Units,流处理器,是直接将多媒体的图形数据流映射到流处理器上进行处理的,有可编程和不可编程两种。[6]SP = Service Provider证,移动网增值业务经营许可证,是《移动网增值业务经营许可证》为适应市场发展及管理需要,信息产业部依据《中华人民共和国电信条例》(国务院令第 ...

单机片学习应用六大重要部分
通过PUSH和POP指令进行数据存储和提取,堆栈指针SP的值可以由程序控制,以设置堆栈的起始位置。在编写软件时,先确定常数和地址,然后用文本编辑器编写程序,并通过编译器检查语法错误,可能还需在仿真机上调试。程序正确后,将源程序编译为HEX格式的目标文件,通过编程器写入EPROM,完成单片机的开发过程。

宾得胶片机pentax sp 如何使用
Pentax sp后盖打开很简单,如图 把这个拉起,就可以打开了。为了你更好的使用SP ,下面是整个相机的各个位置使用图,请参考。希望对你有帮助。

关于老相机宾得sp的一点疑问(我是一个可悲的年轻人)
这是胶片机的定数调节盘,对应胶片的感光度来调整。如你用的是100度的胶片,定数盘也因调到100处,这样测光表才准确。

sp看电影的格式什么
在烧录卡中装一个GBA专用的播放器“FilmPlay”。 GBA上看电影还要把影片用一个叫“Movie_Converter”的软件转换成GBM格式。然后再把转换好的影片复制到电影卡中,用播放器播放,但是由于GBA的机能比较差,而且液晶屏的分辨率也不是很高,所以电影效果一般,外语片字幕辨认有些困难。采纳哦 ...

固始县15695726686: 单片机程序SP不停的向上加,希望高手指点. -
兆雪盐酸: 楼主对两类指令的概念不甚清晰:子程序调用指令LCALL与跳转类指令LJMP、JNB等:1、LJMP、JNB、CJNE等均为跳转语句,跳转后程序指针PC指向跳转位置,但不影响SP堆栈的值;2、LCALL、ACALL等为子程序调用指令,执行前需要...

固始县15695726686: 51单片机 keil 里的sp - max有什么作用 -
兆雪盐酸: sp_max仅仅是一个用来调试的东西,表示SP的最大值,依此确定堆栈区域的区间,在程序设计时堆栈空间用来保存局部变量,如果不慎将一个需要较长时间生存的变量定义在堆栈区那么就会出错.

固始县15695726686: 关于51单片机堆栈的问题 -
兆雪盐酸: 首先,SP是堆栈指针,当压堆栈的时候,它增加一,当出栈的时候,它减一.PUSH ACC和POP ACC分别是压和出的指令.除此之外,中断和call指令,硬件自动将PC程序指针压栈,等到reti或ret指令的时候,出栈.一般讲SP设置大一点,比如70H,以免和其他单元冲突.

固始县15695726686: 单片机,汇编,推算SP的值,我认为题中SP的答案应该是52H,给的答案50H是错误的.大神们怎么看 -
兆雪盐酸: 是52H,程序开始执行两个POP则SP减2,后面再PUSH两个,则加2.

固始县15695726686: 单片机中,设置堆栈指针SP为57H后发生子程序返回,这时SP变为( ). -
兆雪盐酸: 是55h.因为单片机中,在进入子程序时,会先将子程序后的PC地址先压入堆栈保存(2字节),若在子程序退出时,会自动将进入时保存的PC值出栈恢复(两个字节).所以当SP=57h时子程序返回(即退出子程序),因PC值出栈恢复,故SP=57h-2=55h;

固始县15695726686: 单片机在设计程序时,有时为什么要对SP赋值? -
兆雪盐酸: 设置sp值是为了,定栈顶元素sp本来的地址为81H,81H内储存的值就是栈顶元素,控制sp的指令主要有PUSH和POP.至于为什么要赋值,就要看具体的才知道了...

固始县15695726686: 什么叫堆栈?8051堆栈指示器SP有多少位,作用是什么?单片机初始化话后SP中的内容是什么? -
兆雪盐酸: 堆栈是连续的内存单元,存取方式遵循“先进后出”的原则. 其作用一般是保存寄存器或标志寄存器的内容. 堆栈就是这样一种数据结构.它是在内存中开辟一个存储区域,数据一个一个顺序地存入(也就是“压入——push”)这个区域之中...

固始县15695726686: 汇编 堆栈中SP的一些问题 -
兆雪盐酸: sp指向栈顶,因为x86的栈是向下增长的,所以栈顶地址是整个栈空间中最小的地址. 入栈时,1234h被压入到栈中,同时sp减2 出栈时,1234h弹出到ax,sp加2

固始县15695726686: C语言 单片机 程序不停循环么 -
兆雪盐酸: 单片机的指令执行是通过PC指针来确定的,当一段程序执行结束时,如果没有跳转指令,则PC指针会自动加1,向下继续执行,直到PC为0FFFFH,再加1回到开始位置0000H,又从头开始运行;如此不停循环.上面的程序里,没有死循环控制.所以会出现上诉情况.

固始县15695726686: 单片机,汇编,一个简单程序分析 -
兆雪盐酸: 展开全部51单片机复位的时候SP = 07H,调用函数的时候SP会加1然后把下一条指令的地址低位压栈,然后SP再加1,压栈高位 MOV 20H,#1AH 指令长度为3 MOV A,20H 指令长度为2 LCALL D1 指令长度为3 MOV 21H,A 指令长度为2 MOV A,...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网