微控制器的組成
微控制器的組成
微控制器由I/O、CPU、ROM、RAM和週邊電路等元件組成。
透過這些元件的組合,實現微控制器“接收某種輸入,執行某種指定的處理,並輸出某種訊號”的工作。
下面是各個元件的作用:
I/O:接收某種輸入並輸出某種訊號的部分。
CPU:執行某些指定處理的部分。
ROM:儲存用來決定處理內容的軟體的部分。
RAM:儲存處理結果等臨時資料的部分。
週邊電路:使微控制器功能更豐富的電路群。
以電熱水壺為例,瞭解微控制器的工作
下面以“接收按鈕輸入、電熱盤發熱並將水加熱”的電熱水壺為例,來看看微控制器內部是如何工作的。
什麼是I/O?
I/O(Input / Output)從外部連接的元件輸入訊號,並向外部連接的元件輸出訊號。
在這裡我們透過電熱水壺的工作來瞭解其作用。電熱水壺接收按鈕輸入並加熱電熱盤以將水加熱。在電熱水壺中,I/O的作用是“接收按鈕輸入”、“接收電熱水壺內溫度計的訊號”和“向電熱盤輸出控制訊號”。
如果沒有I/O,就無法輸入按鈕和電熱水壺內溫度計的訊號,也無法向電熱盤輸出控制訊號。
可見,I/O是微控制器非常重要的組成部分,發揮著入口和出口的作用。
什麼是CPU?
CPU被稱為“中央處理單元(Central Processing Unit)”,在微控制器中發揮著指揮部的作用。以電熱水壺的微控制器為例,CPU就是接收按鈕輸入、指示電熱盤加熱並根據水溫的上升情況發出停止電熱盤加熱指令的單元。
例如,希望使用電熱水壺將水溫加熱到90℃時,
“當按鈕被按下時,電熱盤發熱並將水加熱”
“當電熱水壺內溫度計的溫度達到90℃時,停止加熱”
需要預先設定需要處理的內容(如上)。
這樣,只需向電熱水壺加水並按下按鈕,即可製作出90℃的熱水。
這個預先設定的處理稱為“程式”。這種“程式”有“預定的計畫”的含義。因此,CPU充當指揮部,根據這個預定的計畫執行處理。
關於CPU執行的處理(指令)
下面讓我們更具體地來瞭解CPU。
“當電熱水壺內的溫度達到90℃時,停止加熱”
這個過程大致可分為以下三步:
1.每隔幾秒接收電熱水壺內溫度感測器的輸出。
2.將獲取的電熱水壺內的溫度與閾值90℃進行比較。
3.如果溫度達到閾值90℃以上時,使電熱盤停止工作。
上面的例子還可以進一步分解為更詳細的步驟,分解到最小單位後,就是CPU執行的處理(指令)。具體而言,比如上面例子中的“2.”和“3. ”的“比較”和“使電熱盤停止工作”的處理,對應的是CPU的比較指令和分支指令。如果用微控制器的語言—組合語言來描述的話,就是:
・CMP 電熱水壺內溫度、90℃(將電熱水壺內的溫度與90℃進行比較)
・BGE 電熱盤停止(如果電熱水壺內的溫度≧90℃,則進入分支“電熱盤停止”)
儘管微控制器不同其指令也有所不同,但很多組合語言的指令都有表示相應工作的符號,例如比較指令是CMP(=compare:比較)。其他還有傳送指令MOV(move)、存儲指令ST(store)、分支指令B(branch)等指令。順便提一下,如果用C語言來描述上述指令的話,將是:
if (電熱水壺內的溫度 >= 90℃){
電熱盤停止();
}
CPU將會執行這些指令。
CPU執行指令
下面我們來更深入地瞭解一下CPU的工作。
CPU內部主要由程式計數器、指令解碼器和運算電路組成。
程式計數器負責保存下一條要執行的指令的位置(位址)。
指令解碼器負責將指令轉換成CPU可以處理的訊號。
運算電路負責處理指示。
圖中用數位標出的部分解釋說明如下:
①由程式計數器來指定保存了比較指令CMP的位址。
②讀取程式計數器指定的指令,並將其輸入至解碼器。
③由解碼器將讀取的指令轉換成CPU可以處理的訊號,並輸入至運算電路。
此時,程式計數器會自動計數並指定下一個位置(位址)。
使用無條件分支指令B時,在程式計數器中指定分支目的地。
④由運算電路根據指令進行處理。運算電路根據每條指令進行加減法運算。例如,針對比較指令CMP,進行減法運算來確認哪個值更大。
⑤在使用利用了比較結果的特殊條件分支指令時,可以在處理後在程式計數器中指定分支目的地。
其中,②表示獲取(fetch),③表示解碼(decode),④表示執行(execute)。
綜上所述,預先準備給CPU的指令組合,由CPU按順序逐一處理,即可實現上述工作。
關於CPU執行指令的時間
表示CPU能力的參數之一是處理指示所花費的時間。在這裡,我們以CPU執行比較指令CMP所花費的時間為例進行說明。
儘管具體時間會因微控制器而異,但指令的執行時間最長也只有100μsec左右。一些速度較快的微控制器,執行一條指令僅需數十納秒。決定指令執行速度的是時鐘。
時鐘是決定執行指令所需時間的訊號,其單位為頻率[Hz]。
時鐘越快,執行指令的速度就越快。CPU會根據時鐘按循序執行指令。
什麼是ROM?
ROM(Read Only Memory)是只能讀取的記憶體。基本上是內容無法改寫的記憶體。
以電熱水壺為例,
這是存儲程式的地方。因此,也被稱為“程式記憶體”。
ROM的內容在接通電源時就被讀取,而且即使重啟電源,ROM的內容仍會保留。
因此,即使重啟電熱水壺等電氣設備,每次都會執行相同的工作。
順便提一下,目前主流的ROM是當希望改寫ROM內容時即可改寫的快閃記憶體。這樣就增加了微控制器的自由度,可以進一步縮短電氣設備的開發週期並降低成本。
CPU、指令、ROM之間的關係
CPU會一條一條地處理最小的處理單位—指令。這些指令包括傳送指令MOV、存儲指令ST和比較指令CMP等。
每條指令都存儲在ROM中。
在這裡我們再回顧一下電熱水壺的例子。
“當電熱水壺內的溫度達到90℃時,停止加熱”
這個過程大致可分為以下三步:
1.每隔幾秒接收電熱水壺內溫度感測器的輸出。
2.將獲取的電熱水壺內的溫度與閾值90℃進行比較。
3.如果溫度達到閾值90℃以上時,使電熱盤停止工作。
其中,如果將“2. ”和“3. ”的處理用組合語言來描述,則是
・CMP 電熱水壺內溫度、90℃(將電熱水壺內的溫度與90℃進行比較)
・BGE 電熱盤停止(如果電熱水壺內的溫度≧90℃,則進入分支“電熱盤停止”)
這些指令存儲在ROM中,CPU按順序逐一處理這些指令。
什麼是RAM?
RAM(Random Access Memory)是一種可讀寫的記憶體,因其可臨時存儲資料,也被稱為“資料記憶體”。
電熱水壺需要保存沸騰溫度設置、電熱水壺內溫度感測器的測量結果以及電熱盤等的當前狀態。
事實上,如果只有前面提到的傳送指令MOV和存儲指令ST等單純的處理,並不需要RAM。然而,當使用微控制器構建實際的電氣設備時,由於需要複雜的處理,所以RAM是必不可少的元件。
RAM的處理
下面以電熱水壺為例來介紹RAM的處理。
例如,可設定溫度的電熱水壺的功能如下:
①煮水功能
・在未煮水狀態下按下煮水按鈕,就會開始加熱。
・當電熱水壺內的溫度達到設定溫度(目標溫度)時,停止加熱。
・如果在煮水過程中關掉煮水按鈕,將停止加熱。
②溫度設置功能
・可設置100℃、90℃、75℃三個溫度等級。
・每按一次溫度設定按鈕,溫度就會按照100℃⇒90℃⇒75℃⇒100℃⇒90℃的順序變化。
要實現這些功能也需要RAM。
●煮水功能
煮水功能是在未煮水狀態下按下煮水按鈕開始加熱的,所以需要能夠判斷當前狀態是正在煮水還是未煮水狀態。因此,需要將電熱水壺的煮水ON/OFF狀態作為資料進行保存。
在這裡,我們將電熱水壺的煮水ON/OFF狀態保存在RAM中,並將資料命名為“HeaterStatus”。
當按下煮水按鈕時,CPU會執行從RAM中讀取HeaterStatus、判斷當前狀態、然後改寫HeaterStatus的工作。
其中,當在HeaterStatus的OFF狀態按下煮水按鈕時,電流流過電熱盤並將HeaterStatus置為“ON”。相反,當在HeaterStatus為ON的狀態下按下煮水按鈕時,會切斷電熱盤的電流並將HeaterStatus改為“OFF”。
如果沒有像RAM這樣的可改寫區域,將無法保存當前狀態。
●關於溫度設置
關於溫度設置,由於有三段溫度,所以需要保存設置的是哪一段溫度。另外,每按一次溫度設置按鈕,設定的溫度就會改變,按三次按鈕後需要返回最初的溫度。按照這個邏輯,可以將按下按鈕的次數和該次數對應的溫度作為目標溫度資料保存在RAM中,即可實現溫度設置。
綜上所述,如果有可自由讀寫的RAM區域,就可以實現更靈活的處理。
什麼是週邊電路?
週邊電路是安裝在微控制器中用來豐富其功能電路群。我們以電熱水壺的工作為例來具體瞭解一下。
“當電熱水壺內的溫度達到90℃時,停止加熱”
電熱水壺的處理過程可分為以下三步:
1.每隔幾秒接收電熱水壺內溫度感測器的輸出。
2.將獲取的電熱水壺內的溫度與閾值90℃進行比較。
3.如果溫度達到閾值90℃以上時,使電熱盤停止工作。
例如,要處理“1.”的“每隔幾秒接收電熱水壺內溫度感測器的輸出”,需要稱為“計時器”的週邊電路來測量幾秒的時間。
另外,還需要有A/D(模數轉換器)來接收溫度感測器輸出。所以,配有計時器、A/D等週邊電路的微控制器可實現“1.”的工作。透過將週邊電路集成到微控制器中,可以實現單獨使用CPU、ROM、RAM時無法實現的功能。