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