找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 40067|回復(fù): 8
打印 上一主題 下一主題
收起左側(cè)

AT89S51單片機(jī)中SP的復(fù)位值07H是什么意思?初學(xué),不是太懂

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:139137 發(fā)表于 2016-9-11 22:37 來(lái)自手機(jī) | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
AT89S51單片機(jī)中SP的復(fù)位值07H是什么意思?初學(xué),不是太懂,見(jiàn)諒一下。

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1 發(fā)表于 2016-9-11 22:43 | 只看該作者
就是說(shuō)單片機(jī)上電復(fù)位以后 sp這個(gè)寄存器的值就變成了07H
回復(fù)

使用道具 舉報(bào)

板凳
ID:139137 發(fā)表于 2016-9-11 23:09 來(lái)自手機(jī) | 只看該作者
admin 發(fā)表于 2016-9-11 22:43
就是說(shuō)單片機(jī)上電復(fù)位以后 sp這個(gè)寄存器的值就變成了07H

值為07H是什么意思。窟@是一個(gè)地址么?還是什么?
回復(fù)

使用道具 舉報(bào)

地板
ID:111634 發(fā)表于 2016-9-12 06:33 | 只看該作者
本帖最后由 zl2168 于 2016-9-12 07:05 編輯

首先要搞懂sp


堆棧指針SPStack Pointer


堆棧是CPU用于暫時(shí)存放特殊數(shù)據(jù)的“倉(cāng)庫(kù)”,如子程序斷口地址,中斷斷口地址和其他需要保存的數(shù)據(jù)。在80C51中,堆棧由內(nèi)RAM中若干連續(xù)存儲(chǔ)單元組成,存儲(chǔ)單元的個(gè)數(shù)稱為堆棧的深度(可理解為倉(cāng)庫(kù)容量)。


堆棧指針SP專用于指出堆棧頂部數(shù)據(jù)的地址。無(wú)論存入還是取出數(shù)據(jù),SP始終指向堆棧最頂部有效數(shù)據(jù)的地址。


堆棧中數(shù)據(jù)存取按先進(jìn)后出、后進(jìn)先出的原則。相當(dāng)于沖鋒槍的子彈夾,子彈一粒粒壓進(jìn)去,射擊時(shí),最后壓進(jìn)去的子彈先打出去(后進(jìn)先出),最先壓進(jìn)去的子彈最后打出去(先進(jìn)后出)。


堆棧操作分自動(dòng)方式和指令方式。自動(dòng)方式是在調(diào)用子程序或發(fā)生中斷時(shí),CPU自動(dòng)將斷口地址存入或者取出;指令方式是使用進(jìn)出棧指令進(jìn)行操作。

以上摘自張志良編著
80C51單片機(jī)實(shí)用教程——基于Keil CProteus》高等教育出版社ISBN 978-7-04-044532-9

書(shū)中電路和程序設(shè)計(jì)有詳細(xì)說(shuō)明,程序語(yǔ)句條條有注解。


回復(fù)

使用道具 舉報(bào)

5#
ID:111634 發(fā)表于 2016-9-12 06:38 | 只看該作者
本帖最后由 zl2168 于 2016-9-12 07:06 編輯

⒋ 堆棧操作指令


PUSH      direct                 ;SP+1SP,(direct)→(SP


POP       direct                 ;SP)→(direct),SP-1SP


說(shuō)明:⑴ PUSH為入棧指令,是將其指定的直接尋址單元中的數(shù)據(jù)壓入堆棧。由于80C51是向上生長(zhǎng)型堆棧,所以進(jìn)棧時(shí)堆棧指針要先加1,然后再將數(shù)據(jù)壓入堆棧。例如,設(shè)堆棧原始狀態(tài)如3-2a所示,(30H=2BH。執(zhí)行指令:PUSH  30H。具體操作是:①先將堆棧指針SP的內(nèi)容(0FH)加1,指向堆棧頂上的一個(gè)空單元,此時(shí)SP=10H,如3-2b所示;②然后將指令指定的直接尋址單元30H中的數(shù)據(jù)(2BH)送到該空單元中。執(zhí)行指令結(jié)果:(10H=2BH,SP=10H,如3-2c所示。














POP為出棧指令,是將當(dāng)前堆棧指針SP所指示單元中的數(shù)據(jù)彈出到指定的內(nèi)RAM單元,然后將SP1,SP始終指向棧頂?shù)刂。例如,設(shè)堆棧原始狀態(tài)如3-3a所示,SP=0FH,(0FH=4CH,執(zhí)行指令:POP  40H。具體操作是:①先將SP所指單元0FH(棧頂?shù)刂罚┲械臄?shù)據(jù)(4CH)彈出,送到指定的內(nèi)RAM單元40H,(40H=4CH,3-3b所示;②然后SP-1→SPSP=0EH,SP仍指向棧頂?shù)刂罚?font face="Times New Roman">0FH中數(shù)據(jù)不變,仍等于4CH,但已作廢,3-3c所示。

























由于堆棧操作時(shí)只能以直接尋址方式來(lái)取得操作數(shù),故不能用累加器A和工作寄存器Rn作為操作對(duì)象。若要把A的內(nèi)容推入堆棧,應(yīng)用指令“PUSH  ACC”,這里ACC表示A的直接地址E0H。若要把R0的內(nèi)容推入堆棧,應(yīng)用指令“PUSH  00H”,這里00H表示R0的直接地址(設(shè)當(dāng)前工作寄存器區(qū)為0區(qū))。


3-8】已知SP=60H,求執(zhí)行下列程序指令后的結(jié)果。


MOV      DPTR,#1234H        ;DPTR=1234HDPH=12H,DPL=34H


PUSH      DPH                ;SP+1SPSP=61H,(DPH)→(SP),(SP=61H=12H


PUSH      DPL                 ;SP+1SP,SP=62H,(DPL)→(SP),(SP=62H=34H


MOV      DPTR,#5678H        ;DPTR=5678H


POP       DPH                ;DPH=62H=34H,SP-1SP,SP=61H


POP       DPL                 ;DPL=61H=12H,SP-1SP,SP=60H


執(zhí)行結(jié)果:SP=60H,不變;DPTR=3412H。由于堆棧先進(jìn)后出、后進(jìn)先出的操作原則,出棧時(shí),先出的DPH裝入了后進(jìn)的原DPL的內(nèi)容(34H);而后出的DPL裝入了先進(jìn)的原DPH的內(nèi)容(12H)。
以上摘自張志良編著
80C51單片機(jī)實(shí)用教程——基于Keil CProteus》高等教育出版社ISBN 978-7-04-044532-9

書(shū)中電路和程序設(shè)計(jì)有詳細(xì)說(shuō)明,程序語(yǔ)句條條有注解。


回復(fù)

使用道具 舉報(bào)

6#
ID:111634 發(fā)表于 2016-9-12 06:54 | 只看該作者
本帖最后由 zl2168 于 2016-9-12 07:07 編輯

堆棧指針SP設(shè)置在內(nèi)RAM(內(nèi)RAM地址為00H~7FH)什么區(qū)域呢?

復(fù)位后 SP值為07H,表明堆棧底部在07H。對(duì)于匯編程序,要考慮堆棧的重新設(shè)置。若SP=07H,就會(huì)占用原屬于工作寄存器區(qū)的08H1FH單元和20H以上的位尋址區(qū),妨礙工作寄存器和位尋址區(qū)的特殊功能。因此,在匯編程序初始化中,必須改變SP值,一般可置SP值為50H60H,堆棧深度相應(yīng)為48字節(jié)和32字節(jié)。對(duì)于C51程序,編譯器會(huì)自動(dòng)安排堆棧,即不需要考慮堆棧如何設(shè)置。





以上摘自張志良編著
80C51單片機(jī)實(shí)用教程——基于Keil CProteus》高等教育出版社ISBN 978-7-04-044532-9

書(shū)中電路和程序設(shè)計(jì)有詳細(xì)說(shuō)明,程序語(yǔ)句條條有注解。





回復(fù)

使用道具 舉報(bào)

7#
ID:139137 發(fā)表于 2016-9-12 09:03 來(lái)自手機(jī) | 只看該作者
zl2168 發(fā)表于 2016-9-12 06:54
堆棧指針SP設(shè)置在內(nèi)RAM(內(nèi)RAM地址為00H~7FH)什么區(qū)域呢?

復(fù)位后 SP值為07H,表明堆棧底部在07H。對(duì)于 ...

感謝感謝,雖然還有一些不懂得地方,但是大體知道怎么回事了,謝謝大神
回復(fù)

使用道具 舉報(bào)

8#
ID:139160 發(fā)表于 2016-9-12 10:47 | 只看該作者
同求~~~~~
回復(fù)

使用道具 舉報(bào)

9#
ID:7485 發(fā)表于 2016-9-12 11:27 | 只看該作者
本帖最后由 ahshmj 于 2016-9-12 11:28 編輯

sp是堆棧寄存器。默認(rèn)的堆棧棧底地址是片內(nèi)RAM的07H單元。

由于堆棧操作時(shí)(硬件自動(dòng))先將地址加1然后存儲(chǔ),所以實(shí)際默認(rèn)的是從08H開(kāi)始寫(xiě)入,往上逐字節(jié)寫(xiě)入。

由于單片機(jī)的結(jié)構(gòu)決定,00H~2FH功能較多,有其他更重要的事情分派,所以一般可以放到5FH以上的地址上。

又由于出棧也是間接尋址方式,所以,像at80c52系列的單片機(jī),片內(nèi)有256字節(jié)的RAM,堆棧棧底也可以放到7FH以上只要棧頂不超過(guò)0FFH即可。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表