? ? ?微控制器是指帶有外設(shè)的微處理器系統(tǒng),比如臺式電腦的CPU,它是一個微處理器系統(tǒng)。微控制器將響應(yīng)來自I/O 引腳、定時器、通信等的輸入,同時通過對信息進(jìn)行操作控制來產(chǎn)生合適的輸出信號。
I/O 引腳使得微控制器能讀取來自其他設(shè)備的按鈕和狀態(tài)信息,同時I/O 引腳也能夠輸出信號用來打開燈、運行電機和驅(qū)動顯示設(shè)備。
定時器、通信模塊和數(shù)/模轉(zhuǎn)換模塊能使微控制器執(zhí)行特殊的任務(wù),比如與PC 機進(jìn)行通信,讀取溫度信息等。
從微觀上說,微控制器是一個集成了成千上萬電子開關(guān)的設(shè)備。正如編程的人目的是為了將復(fù)雜的操作簡化為邏輯和算術(shù)運算來完成任務(wù)那樣,微控制器的設(shè)計人員必須決定使用什么電子設(shè)備來完成這些任務(wù),比如,晶體管,F(xiàn)ET 和二極管等。大多數(shù)的微控制器工作在二進(jìn)制系統(tǒng)下,比如“1”或“0”,邏輯高或邏輯低,開或關(guān)。
Cypress 的微控制器系統(tǒng)稱為可編程片上系統(tǒng)(Programmable System-on-Chip, PSoC) ,那是因為在單芯片上包含了CPU 內(nèi)核、足夠的模擬子系統(tǒng)和數(shù)字子系統(tǒng)資源。因此,在實現(xiàn)一個系統(tǒng)時,幾乎不需要外部的電路。
1.1.1 微控制器的涵義
如圖1.1 所示,微處理器系統(tǒng)的CPU 通常需要和其他部件相連接,這樣才能使其發(fā)揮作用。微處理器系統(tǒng)通常會使用到的功能部件包括以下內(nèi)容。
圖1.1 微處理器系統(tǒng)常用功能部件
?。?)中央處理單元(CPU)
中央處理單元(Central Processing Unit, CPU )是系統(tǒng)的“大腦”,它知道如何和各種不同空間的存儲器交換(讀或?qū)懀┬畔ⅰM瑫r,也執(zhí)行一些邏輯指令,最基本和最通用的有:加、減、邏輯“或”、邏輯“與”、邏輯“異或”、移位、移動和復(fù)制。一些處理器可能執(zhí)行更加復(fù)雜的操作,但這些操作都是由最基本的操作組合得到的。
CPU 由一些子系統(tǒng)構(gòu)成,在這些子系統(tǒng)中最重要的是程序計數(shù)器(Program Counter, PC),指令譯碼器和算術(shù)邏輯單元(Arithmetic Logic Unit,ALU )部分。PC 指向Flash 存儲器指定的地址,然后返回指令和數(shù)據(jù)。PC 用來確定送到指令譯碼器內(nèi)的Flash 中的字段。指令譯碼器包含譯碼邏輯,這些邏輯將對從Flash 返回的數(shù)進(jìn)行“翻譯”,用來確定程序?qū)?zhí)行的指令,這些指令將“告訴”CPU 下一步所做的邏輯操作行為。
CPU 不但能實現(xiàn)運算操作,也能修改程序運行的地址。如果在執(zhí)行指令的過程中,并不是順序的執(zhí)行指令,比如遇到調(diào)轉(zhuǎn)指令,那么PC 將加載新的所要運行指令的地址,并且從指向Flash 新的地址位置的地方執(zhí)行程序。如果指令需要CPU 執(zhí)行一些運算,那么相關(guān)的數(shù)將送到ALU 單元中。
此外,CPU 也能根據(jù)所接收到的指令對外設(shè)進(jìn)行控制。
?。?)高速緩存(Cache)
從位置和訪問速度方面來說,高速緩存Cache 最靠近CPU。有時,將Cache 直接集成在同一芯片內(nèi)。但并不是必須放在同一個硅片上,只是封裝在同一個芯片內(nèi)。
?。?)隨機訪問存儲器(RAM)
從CPU 訪問速度來說,訪問隨機訪問存儲器(Random Access Memory, RAM )比訪問高速緩存要慢。需要說明的是,這個詞語已經(jīng)失去了它的原本含義,這是由于現(xiàn)在大部分的存儲器都能夠以任何順序進(jìn)行訪問。
(4)硬件驅(qū)動
從速度來說,是系統(tǒng)中最慢和最大的存儲部分。它用來保存程序,并且是由非易失性的存儲介質(zhì)構(gòu)成。
1.1.2 微控制器編程語言
世界上不管是什么廠商的CPU,不管采用什么樣結(jié)構(gòu)的CPU,它們都有下面的共同特點:
都是靠程序計數(shù)器(Program Counter, PC )來控制程序的運行,正因為這個原因,它們本質(zhì)上也是串行執(zhí)行的;?
工作在二進(jìn)制狀態(tài)下,也就是通常所說的在PC 的控制下,通過運行二進(jìn)制組成的機器代碼,來控制CPU 內(nèi)各個功能部件的運行。
對CPU 來說,所謂的“機器語言指令”,就是通過CPU 內(nèi)的控制邏輯來協(xié)調(diào)CPU 內(nèi)各個功能部件,完成所要求的操作。機器語言的運行效率是最高的。
機器語言指令應(yīng)該由操作碼和操作數(shù)兩部分構(gòu)成。操作碼告訴CPU 所需要執(zhí)行的操作,操作數(shù)是執(zhí)行操作所針對的對象。這些對象包括:立即數(shù),寄存器和存儲器等,通過訪問這些對象來獲得所需要操作的對象。比如:對8051 來說,機器語言指令-7D25,表示該指令要實現(xiàn)數(shù)據(jù)傳輸操作,“7D”是操作碼,“25”是操作對象,其表示將十六進(jìn)制數(shù)#25 ,送到R5 寄存器中。
但是,正如前面所說的,純粹意義上的“機器語言”對程序員太難理解了,為什么?這是因為程序員是CPU 的操作者,而不是CPU 的設(shè)計者,程序員根本不可能從二進(jìn)制代碼的排列中看出“機器語言”所描述的邏輯操作行為。
為了幫助程序員理解CPU 所執(zhí)行的操作,通過匯編語言助記符指令來幫助程序員設(shè)計指令以控制CPU 的運行。匯編語言助記符指令通過匯編器被翻譯成機器語言指令。用匯編助記符描述機器指令的形式為:
?。蹣?biāo)號:] 助記符 [操作數(shù)] [;注釋]
標(biāo)號用來表示一行指令,助記符表示所要執(zhí)行的邏輯操作行為,操作數(shù)為邏輯操作行為所操作具體對象,現(xiàn)在用匯編語言來描述上面的機器指令“7D25”:
MOV R5, #25
MOV 表示數(shù)據(jù)移動操作,R5 表示目的操作數(shù),#25 表示源操作數(shù),這個助記符匯編指令所表示的是,將立即數(shù)25 復(fù)制到R5 寄存器中。使用助記符來描述CPU 所要進(jìn)行的操作,比使用機器語言直接描述更加容易理解和記憶。但是,由于匯編語言下面是機器語言,所以對于使用匯編語言編程的程序員來說,他必須很清楚CPU 的指令集,寄存器單元和存儲器映射等繁瑣的硬件規(guī)則。雖然其執(zhí)行效率基本上和機器語言一樣,但是使用匯編語言編程效率很低。因為很多程序員根本不了解CPU 的具體內(nèi)部結(jié)構(gòu),所以對他們來說,使用匯編語言編程并不比使用機器指令編程好到哪里去,這也是一件令他們非常痛苦的事情。
值得高興的是,在今天,廠商開發(fā)的軟件平臺支持使用C、BASIC 等高級語言對硬件進(jìn)行編程;C 語言是不能直接在CPU 上運行,它必須首先通過編譯器(Compiler )轉(zhuǎn)換成機器語言,才能在CPU 上運行。使用高級語言所編寫的代碼其運行的效率不可能比用匯編語言編程的運行效率高,所以說,如果你想讓C 語言所編寫的代碼和匯編語言編寫的代碼有一樣高的代碼執(zhí)行效率,你只能是絞盡腦汁的對C 代碼進(jìn)行優(yōu)化,或者使用C 語言和匯編語言混合編程,來滿足代碼長度和運行時間的設(shè)計要求。雖然這一過程也會讓程序員耗費很多的精力,但是,值得他們高興的是,他們再也不用和底層硬件直接打交道了。
為了更清楚地說明C 語言和匯編助記符之間的關(guān)系,列出表1.1 如下。
表1.1 C 語言和匯編助記符之間的對應(yīng)關(guān)系
如今,越來越多的廠商提供了硬件的應(yīng)用程序接口(Application Program Interface,API)函數(shù),這樣程序員可以根本不用知道更多的硬件實現(xiàn)細(xì)節(jié),只需關(guān)心如何編寫代碼來使硬件工作,這樣就大大提高了程序的設(shè)計效率。
評論
查看更多