1. 程式人生 > >MCS-51微控制器 原理 整理

MCS-51微控制器 原理 整理

1 書籍

《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 典型的中斷服務程式

在這裡插入圖片描述

在這裡插入圖片描述