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