跳至內容

嵌入式系統/8051 微控制器

來自華夏公益教科書,開放的書籍,開放的世界

英特爾 8051 微控制器是當今最流行的通用微控制器之一。英特爾 8051 的成功催生了許多克隆產品,它們被統稱為 MCS-51 系列微控制器,其中包括來自 Atmel、飛利浦、英飛凌和德州儀器等供應商的晶片。

關於 8051

[編輯 | 編輯原始碼]

英特爾 8051 是一款 8 位微控制器,這意味著大多數可用操作都限於 8 位。8051 有 3 種基本“尺寸”:短型、標準型和擴充套件型。短型和標準型晶片通常以 DIP(雙列直插式封裝)形式提供,但擴充套件型 8051 模型通常具有不同的外形尺寸,並且不“插拔相容”。所有這些都稱為 8051,因為它們都可以使用 8051 組合語言進行程式設計,並且它們都共享某些特性(儘管不同的模型都有自己的特殊特性)。

使 8051 廣受歡迎的一些特性包括

  • 4 KB 片上程式儲存器。
  • 128 位元組片上資料儲存器 (RAM)
    • 32 位元組專用於暫存器組
    • 16 位元組位可定址記憶體
    • 80 位元組通用記憶體
  • 4 個暫存器組。
  • 128 個使用者定義軟體標誌。
  • 8 位資料匯流排
  • 16 位地址匯流排
  • 16 位定時器(通常為 2 個,但可能更多或更少)。
  • 3 個內部和 2 個外部中斷。
  • 16 位元組的位和位元組可定址 RAM 區域。
  • 四個 8 位埠(短型模型有兩個 8 位埠)。
  • 16 位程式計數器和資料指標。
  • 使用 12 MHz 晶體時,指令週期為 1 微秒。

8051 的變體可能還具有一些特殊、特定於模型的特性,例如 UART、ADC、運算放大器等,使其成為功能更強大的微控制器。

典型應用

[編輯 | 編輯原始碼]

8051 晶片被廣泛應用於各種控制系統、電信應用、機器人以及汽車行業。據估計,8051 系列晶片佔嵌入式晶片市場的 50% 以上。

8051 DIP 的引腳圖

基本引腳

[編輯 | 編輯原始碼]

引腳 9:引腳 9 是復位引腳,用於在啟動時復位微控制器的內部暫存器和埠。(引腳應保持高電平 2 個機器週期。)

引腳 18 和 19:8051 具有內建的振盪器放大器,因此我們只需要在這些引腳上連線一個晶體即可為電路提供時鐘脈衝。

引腳 40 和 20:引腳 40 和 20 分別是 VCC 和地。8051 晶片需要 +5V 500mA 才能正常工作,不過也有一些低功耗版本,例如 Atmel 2051,它是 8051 的縮減版本,工作電壓為 +3V。

引腳 29、30 和 31:如 8051 特性所述,該晶片包含一個內建的快閃記憶體。為了對其進行程式設計,我們需要在引腳 31 上提供 +12V 電壓。如果連線了外部儲存器,則引腳 31 也稱為 EA/VPP,應連線到地,以指示存在外部儲存器。引腳 30 稱為 ALE(地址鎖存使能),當多個儲存器晶片連線到控制器時,並且只需要選擇其中一個時,就會使用該引腳。我們將在後面的章節中詳細介紹這一點。引腳 29 稱為 PSEN。這是“程式儲存器使能”。為了使用外部儲存器,需要在 PSEN 和 EA 引腳上提供低電壓(0)。

引腳 29:如果我們使用外部 ROM,那麼它應該有一個邏輯 0,指示微控制器從儲存器讀取資料。

引腳 30:此引腳用於 ALE,即地址鎖存使能。如果我們使用多個儲存器晶片,則此引腳用於區分它們。它以 1/6 的振盪器頻率的恆定速率週期性地啟用。該引腳還在 EPROM 程式設計期間提供程式脈衝輸入。

引腳 31:如果我們必須使用多個儲存器,那麼透過將邏輯 1 應用於此引腳,指示微控制器首先從內部儲存器讀取資料,然後從外部儲存器讀取資料。

有 4 個 8 位埠:P0、P1、P2 和 P3。

埠 P1(引腳 1 到 8):埠 P1 是一個通用輸入/輸出埠,可用於各種介面任務。其他埠 P0、P2 和 P3 根據使用上下文具有雙重作用或附加功能。埠 1 輸出緩衝器可以吸收/提供四個 TTL 輸入。當向 portn1 寫入 1 時,引腳會透過內部上拉電阻拉高,並且可以用作輸入。

埠 P3(引腳 10 到 17):埠 P3 充當正常的 I/O 埠,但埠 P3 還具有附加功能,例如,序列傳送和接收引腳、2 個外部中斷引腳、2 個外部計數器輸入、用於記憶體訪問的讀寫引腳。

埠 P2(引腳 21 到 28):埠 P2 也可以用作通用 8 位埠,此時沒有外部儲存器,但是如果需要外部儲存器訪問,那麼埠 P2 將與埠 P0 一起充當地址匯流排,以訪問外部儲存器。埠 P2 充當 A8-A15,如圖 1.1 所示。

埠 P0(引腳 32 到 39)埠 P0 也可以用作通用 8 位埠,此時沒有外部儲存器,但是如果需要外部儲存器訪問,那麼埠 P0 將充當複用地址和資料匯流排,可與埠 P2 一起用於訪問外部儲存器。P0 充當 AD0-AD7,如 圖 1.1 所示。

埠 P10:非同步通訊輸入或串行同步通訊輸出。

引腳 11:序列非同步通訊輸出或串行同步通訊時鐘輸出。

振盪器電路

[編輯 | 編輯原始碼]

8051 需要一個外部振盪器電路。振盪器電路通常執行在 12 MHz 左右,儘管 8051(具體取決於具體型號)能夠以高達 40 MHz 的速度執行。8051 中的每個機器週期都是 12 個時鐘週期,這使得有效週期速率在 1 MHz(對於 12 MHz 時鐘)到 3.33 MHz(對於最大 40 MHz 時鐘)之間。振盪器電路產生時鐘脈衝,以便所有內部操作同步。

一個機器週期包含 6 個狀態。一個狀態為 2 個 T 狀態。因此一個機器週期為 12 個 T 狀態。執行指令所需的時間是透過將 C 乘以 12 並將乘積除以晶體頻率來計算的。

T=(C*12d)/晶體頻率

8051 內部架構

[編輯 | 編輯原始碼]
8051 的內部示意圖。

資料和程式儲存器

[編輯 | 編輯原始碼]

8051 微控制器可以用 PL/M、8051 彙編、C 和許多其他高階語言進行程式設計。有些編譯器甚至支援為 8051 編譯 C++。

8051 的程式儲存器是隻讀的,而資料儲存器被認為是讀寫可訪問的。當儲存在 EEPROM 或 Flash 中時,程式儲存器可以在微控制器處於特殊程式設計電路中時被重寫,或者,如果不使用 8031,則可以透過預裝的引導載入程式進行重寫。

程式起始地址

[編輯 | 編輯原始碼]

8051 從程式儲存器中的地址 0000 開始執行程式指令。

特殊功能暫存器

[編輯 | 編輯原始碼]

特殊功能暫存器 (SFR) 是可定址記憶體的上部區域,從地址 0x80 到 0xFF。A、B、PSW、DPTR 被稱為 SFR。該記憶體區域不能用於資料或程式儲存,而是作為一系列記憶體對映埠和暫存器。因此,所有埠輸入和輸出都可以透過對 SFR 中指定地址執行記憶體mov操作來完成。此外,不同的狀態暫存器被對映到 SFR 中,用於檢查 8051 的狀態,並更改 8051 的一些操作引數。

通用暫存器

[編輯 | 編輯原始碼]

8051 有 4 個可選的 8 位可定址暫存器組,從 R0 到 R7。這意味著實際上有 32 個可用的通用暫存器,儘管一次只能直接訪問 8 個(一個組)。要訪問其他組,我們需要在標誌暫存器中更改當前組號。

A 和 B 暫存器

[編輯 | 編輯原始碼]

A 暫存器位於 SFR 記憶體位置 0xE0。A 暫存器的工作方式類似於 x86 處理器的 AX 暫存器。A 暫存器被稱為累加器,預設情況下,它接收所有算術運算的結果。B 暫存器以類似的方式使用,只是它可以接收乘法和除法運算的擴充套件結果。當不用於乘法和除法時,B 暫存器可用作額外的通用暫存器。A 和 B 暫存器可以分別儲存高達 8 位的資料。

華夏公益教科書