《MCS-51單片機原理、系統(tǒng)設(shè)計與應(yīng)用_12015401.pdf》
MCS-51 Intel 公司 的 8051 內(nèi)核技術(shù)
MSC-51單片機(有史以來,最簡單易懂教程).pdf
《新編MCS-51單片機應(yīng)用設(shè)計.pdf》 ---- good
2 MCS-51 PC 指針
PC 是 單片機 CPU 內(nèi)部的一個寄存器
總是指向程序存儲器,存放下一條要執(zhí)行指令的地址。
復(fù)位之后的的值為 0x0000H
CPU內(nèi)部的寄存器包括:
寄存器 復(fù)位值
PC 0000H
Acc 00H
B 00H
PSW 00H
SP 07H
DPTR 0000H
MCS-51 復(fù)位之后,(PC)= 0000H,
系統(tǒng)程序從0000H單元開始,0000H是復(fù)位入口地址,是系統(tǒng)程序的啟動地址。
一般在該單元存放一條絕對跳轉(zhuǎn)指令,從跳轉(zhuǎn)地址開始存放初始化程序和主程序。
2 MCS-52 內(nèi)部RAM劃分
00H — 7FH ( 0 —127 )單元組成的128字節(jié)的RAM塊
80H ---- FFH ( 128 — 255 )單元組成的 128字節(jié)的RAM塊 (MCS-51中沒有,這一個部分)
80H ---- FFH ( 128 — 255 )的 SFR 特殊功能寄存器塊
在MCS-52 中,高128字節(jié)的RAM 和SFR塊地址重疊,但是物理上是兩個不同的地方。
訪問的時候,根據(jù)指令的不同,來確定是訪問RAM,還是方位SFR。
訪問高80H ---- FFH RAM是 間接尋址方式。
訪問SFR 是 直接尋址方式。
低128字節(jié)的RAM 間接 直接都可以。
SFR 這128個字節(jié)中僅僅有26個字節(jié)是有意義的。
3 MSC-51 低128字節(jié) RAM劃分 00H – 7FH
CPU寄存器 SP 指針 復(fù)位之后 指向 RAM地址 07H,
如果使用PUSH指令 ,會將數(shù)據(jù)存放在 RAM地址07H,08H,依次往上。
RAM 地址的 00H — 07H 是第一組 R0 — R7
RAM 地址的 08H — 0FH 是第二組 R0 — R7
RAM 地址的 10H — 17H 是第三組 R0 — R7
RAM 地址的 18H — 1FH 是第四組 R0 — R7
R0—R7 不是 和 PC SP 一樣的 CPU內(nèi)部的寄存器。
R0 – R7 叫做 工作寄存器區(qū) 位于 RAM
SFR 應(yīng)該是位于CPU內(nèi)部— 是特殊功能寄存器。
4 堆棧
用戶RAM區(qū),地址為30H — 7FH,這些地址只能按字節(jié)尋址。
復(fù)位的時候,SP指向07H單元,當用戶使用堆棧的時候,應(yīng)該首先設(shè)置堆棧,用戶堆棧一般設(shè)置在30H—7FH范圍之內(nèi)。
SP 設(shè)置的越大,堆棧越淺。
堆棧 是在片內(nèi)RAM中開辟出來的一個區(qū)域,其主要是為子程序調(diào)用和中斷操作而設(shè)立的。
具體功能是:保護斷點和保護現(xiàn)場。
無論是子程序調(diào)用,還是中斷操作,都需要返回主程序。
堆棧指針SP 是一個8位的SFR,特殊功能寄存器,SP的內(nèi)容指示堆棧頂部在內(nèi)部RAM塊中的位置。
它可以指向內(nèi)部RAM 00H— 7FH的任何單元。
實際使用的時候,最好是SP的值,設(shè)置為1FH,或者更大的值。
堆棧的操作,也就是對SP指針的操作,是通過指令集中的PUSH和POP指令實現(xiàn)的。
操作兩種:一種是數(shù)據(jù)壓入(PUSH)堆棧,
另外一種是數(shù)據(jù)彈出(POP)堆棧。
堆棧的棧頂由SP自動管理。每次進入壓入或者彈出操作以后,堆棧指針SP自動調(diào)整以保持指示棧頂位置。
當一個字節(jié)數(shù)據(jù)壓入堆棧后,SP自動加1.
一個字節(jié)數(shù)據(jù)彈出堆棧之后,SP自動減1
MCS-51單片機的這種堆棧結(jié)構(gòu)是屬于向上生長型的堆棧。
5 堆棧操作指令
MCS-51 單片機內(nèi)部 RAM,后進先出(Last In First Out),
進棧指令
Push direct
功能是,首先將SP 加1 ,然后將direct指向的地址的內(nèi)容,放到SP指向的RAM單元中。
出棧指令
POP direct
棧指向的RAM中的內(nèi)容放入 direct指向的地址中,
SP 減小1.
6 RET 子程序的放回指令
RET
指向指令的時候,
SP ---->PCH 然后 SP - 1 -----> SP
SP ---->PCL 然后 SP - 1 -----> SP
功能是從堆棧中退出PC的高8位和低8位字節(jié),
把棧指針減小2,從PC值開始繼續(xù)執(zhí)行程序。不影響標志。
6 RETI 子程序的放回指令
和RET類似,本指令清除了中斷響應(yīng)時候,單片機內(nèi)部的中斷優(yōu)先級狀態(tài)。
7 長調(diào)用
8 中斷
中斷源向CPU提出處理請求。
CPU主動中止執(zhí)行的程序,轉(zhuǎn)去執(zhí)行中斷服務(wù)程序,
硬件自動將中斷點的地址(16位程序計數(shù)器PC的值)壓入堆棧中。
中斷響應(yīng)的主要內(nèi)容是由硬件自動生成一條長調(diào)用指令LCALL addr16。
addr16 是程序存儲區(qū)中的中斷向量地址。
例如 對于 外部中斷1的響應(yīng),產(chǎn)生的長調(diào)用指令是,
LCALL 0013H。
生成LCALL 指令后,由CPU直接執(zhí)行該指令。
首先是將PC的內(nèi)容壓入堆棧保護斷點,再將中斷入口地址裝入PC。
9 典型的中斷服務(wù)程序
|