❶ 80C51 單片機堆棧區的進棧和出棧遵循的原則是
80C51 單片機堆棧區的進棧和出棧遵循的原則是後進先出。
❷ 51單片機堆棧是什麼意思可以對哪些單元堆棧
堆棧的功能就是先進後出,這樣可以非常簡單的解決子程序調用和中斷(其實是特殊的子程序調用)問題,主要是嵌套的返回,用堆棧能准確的找到返回點。51單片機的堆棧是向上生長的,其實可以利用片內RAM中沒用到的一切空間(當然得是連續的),復位後堆棧指針指向07H,一般從30H開始使用,就是復位後將堆棧指針指向30H,一定要弄清楚中斷還有子程序調用時單片機是怎麼壓棧,返回時是怎麼出棧的,利用堆棧可以讓中斷返回時返回到指定的地方,這招很絕。
❸ 求解單片機原理題1、請說明80C51單片機的堆棧的作用和操作規律。補考試題,求解,急急急
1.堆棧用於響應中斷或調用子程序時保護斷點地址,也可通過棧操作指令(push
和pop保護和恢復現場)其中入棧時先SP+1再將內容壓入當前SP所指示的堆棧單元
中,出棧則先將SP所指示的內部ram單元中內容送入直接地址定址的單元中,再將
SP減1.
2.中斷允許寄存器的功能是控制CPU對中斷的開放和屏蔽以及每個中斷源是否允許
中斷結構包括EA(CPU中斷總允許位),ES(串列口中斷允許位)ET1(定時器1中
斷允許位)EX1(外部中斷1中斷允許位)ET0(定時器0中斷允許位)EX0(外部中
斷0中斷允許位)
3.T機=12/fosc=12/(6*E6)=2us
X=2*E13-T/T機=8192-200/2=8092=1F9CH=1111 1100 1110 0B
因為TL1的高3位未用, 修正後X=1111 1100 0001 1100B=FC1CH
4.LJMP為長轉移指令,可轉向64KB程序存儲器的任一單元;SJMP為相對轉移指令
,偏移范圍-128~+127共259位元組;AJMP為絕對轉移指令,轉移目的在指令後一個
存儲單位所在2K區間內。
5.按鍵抖動:在觸點抖動期間檢測按鍵的通與斷狀態,可能導致判斷出錯,即按
鍵一次按下或釋放被錯誤認為是多次操作。
6.汽車的溫控系統,測控系統,防盜報警等多項系統中應用單片機。汽車電子中
涉及A/D和D/A轉換的模塊基本都會有單片機的存在。以下以汽車倒車雷達為例,
雷達控制部分由89C51單片機構成,前端數據採集由超聲波測距,系統由發射和接
收裝置來獲取數據,根據所測得的距離來判斷是否調用聲音報警程序,距離小於
預置點時,調用報警模塊。
❹ 關於51單片機堆棧的問題
首先,SP是堆棧指針,當壓堆棧的時候,它增加一,當出棧的時候,它減一。
PUSH
ACC和POP
ACC分別是壓和出的指令。
除此之外,中斷和call指令,硬體自動將PC程序指針壓棧,等到reti或ret指令的時候,出棧。
一般講SP設置大一點,比如70H,以免和其他單元沖突。
❺ 簡述51單片機堆棧進棧和出棧操作規則
1.堆棧用於響應中斷或調用子程序時保護斷點地址,也可通過棧操作指令(push
和pop保護和恢復現場)其中入棧時先SP+1再將內容壓入當前SP所指示的堆棧單元
中,出棧則先將SP所指示的內部ram單元中內容送入直接地址定址的單元中,再將
SP減1.
2.中斷允許寄存器的功能是控制CPU對中斷的開放和屏蔽以及每個中斷源是否允許
中斷結構包括EA(CPU中斷總允許位),ES(串列口中斷允許位)ET1(定時器1中
斷允許位)EX1(外部中斷1中斷允許位)ET0(定時器0中斷允許位)EX0(外部中
斷0中斷允許位)
3.T機=12/fosc=12/(6*E6)=2us
X=2*E13-T/T機=8192-200/2=8092=1F9CH=1111 1100 1110 0B
因為TL1的高3位未用, 修正後X=1111 1100 0001 1100B=FC1CH
4.LJMP為長轉移指令,可轉向64KB程序存儲器的任一單元;SJMP為相對轉移指令
,偏移范圍-128~+127共259位元組;AJMP為絕對轉移指令,轉移目的在指令後一個
❻ 什麼是堆棧MCS-51單片機的堆棧怎樣設置的
堆棧其實就是一塊存儲器區域,51單片機中可以用寄存器SP來設置棧頂地址,壓棧操作,地址是往上加的,出棧則地址往下減。遵循後進先出原則。
❼ 關於單片機的問題!100分
我答看看:
一、-----------------------------------------
1、255
2、低
3、55H
4、0FFH
5、0003H
6、64
7、ORG
8、解碼
9、片選
10、PC、PC、中斷服務
11、MOV、MOVX、MOVC
二、---------------------------------------
1、對
2、對
3、錯
4、對
5、錯
三、----------------------------------------
1、看書
2、進堆棧時SP先加一,後送數。出棧時先取數,SP後減一
3、MOV A,R7
MOV A,30H
MOV A,@R1
MOV A,#00H
四、---------------------------------------------------
1、置位 bit、將direct數據壓棧、累加器自減一
2、外部中斷1、串口中斷、定時器T1
3、12H、35H、09H
4、0、1、0
五、---------------------------------------------------
1、MOV R0,#30H
MOV R1,#09H
LOOP:
MOV A,#1FH
MOV @R0,A
DJNZ R1,LOOP
END
2、10HZ的周期為100MS,高低電平分別為50MS
12M的晶振,機器周期為1US,定時器0工作方式1的定時時間可以達到50ms
所以讓T0每隔50MS中斷一次,對P2.0去反即可。
ORG OOOOH
LJMP MAIN
ORG 000BH
LJMP TOSEV
ORG 0100H
MAIN:
MOV SP,#60H
MOV TMOD,#01H
MOV TL0,#0B0H
MOV TH0,#3CH
SETB ET0
SETB EA
SETB TR0
AJMP $
T0SEV:
MOV TL0,#0B0H
MOV TH0,#3CH
CPL P2.0
RETI
3、
MOV DPL,#00H
MOV DPH,#20H
MOV A,#0FFH
LOOP:
MOVX @DPTR,A
DEC A
JNZ LOOP
❽ 單片機堆棧出棧問題
你的理解是正確的,以51為例:需要保存的參數累加器A和狀態字PSW,在程序產生中斷的時候,堆棧的做法是:
MOV SP,#60H
PUSH ACC
PUSH PSW
.......
...
POP PSW
POP ACC
這種做法很方便
最好還是不要用工作寄存器做,原因:R0~R7在程序中有他自己的用處,重復使用會丟失數據,如果說51有4組工作寄存器可用,那麼就要面臨選體的問題,這樣就會很麻煩。
事實上,堆棧的設計是單片機硬體設計的一個理念,那就是盡可能的把數據按類別分開處理,就是讓堆棧里的數據區別於RAM里的數據,說到底,工作寄存器也是存儲數據的,本質上是一樣的,但在設計單片機的時候盡可能地分開,這樣可以使得單片機的功能更加強大,執行效率更高
51單片機的工作寄存器是在人啊摹RAM中統一編址的,那麼還有的單片機的工作寄存器是獨立出來的,也就是為了達到這個目的!
總之,既然有了 堆棧操作這匹「好馬」,就沒必要用別的 「破鞍」了!!
❾ 51單片機的堆棧和出棧使用的哪種定址方式
供電和介面電平是兩碼事,你要適用於3.3v和5v兩種電平的,那就要選那種3.3v標准並能承受5v的。
❿ 8051單片機堆棧
51單片機的堆棧是向上生長的,就是堆棧不為空時,棧底地址小於棧頂地址,當將數據入棧時,棧頂地址增加。還有一個技巧是,堆棧是數據存儲器的一部分,也就是說堆棧除了利用push和pop訪問,也可以通過普通的選址方法訪問,例如mov。有時我們想訪問堆棧數據,但不想改動變動棧頂,這時可以通過mov來訪問數據。還有一個書上很少提到的知識點是出棧之後,原來那個棧頂的內容並不會清零,所以我們依然可以像對待普通數據存儲器一樣訪問。