第3節(jié):單片機一個最重要的特性
“道生一,一生二,二生三,三生萬物。”《道德經(jīng)》認為,世間萬物,繽紛多彩,它們都起源自一個東西,這個“一”的東西就是“道”。電子世界也存在“一”這個東西,這個“一”繁衍出手機,電腦,電視機,機器人等豐富多彩的電子世界。這個“一”就是單片機一個最重要的特性:程序下載進單片機的內(nèi)存后,可以識別管腳上的高低電平信號,管腳也可以輸出不同時間長度的高低電平。下面我把這句話的5個重要關健詞提取出來,詳細解讀它的含義。
本文引用地址:http://m.butianyuan.cn/article/201611/319813.htm程序。有3種,C程序,匯編程序,機器程序。能下載進單片機的只有機器程序,C程序和匯編程序都不能直接下載進單片機,所以C程序和匯編程序最終要經(jīng)過專用編譯軟件翻譯成機器程序后,才能下載進單片機執(zhí)行。程序就是語言,語言就是用來交流的,交流就必須存在兩個對象,這兩個對象分別是程序員和單片機。程序員用C語言或者匯編語言,單片機只用機器語言,他們兩者交流就必需一個翻譯家,這個翻譯家就是編譯軟件,俗稱編譯器,它專門把C語言或者匯編語言翻譯成單片機能識別的機器語言?,F(xiàn)在單片機開發(fā)的主流是用C語言,我本人出來工作后就從來沒有用過匯編語言,所以我的觀點是,C語言是必修課,匯編語言是選修課;C語言是白話文簡單易懂,匯編語言是文言文繁瑣難讀。當然匯編也有它的優(yōu)點和不可替代的場合,匯編的翻譯效率高,往往是一句匯編語言對應一句機器語言,而一句C語言有可能對應幾句機器語言,所以很多嵌入式系統(tǒng)某段要求簡潔高效的源代碼都是用匯編來寫的,也有少數(shù)一些很便宜的單片機不提供C編譯器,只能用匯編語言開發(fā)。所以要不要學匯編,我的建議是最好根據(jù)個人的工作需求來決定。
內(nèi)存。既然程序可下載進單片機,那么單片機必然有一個存儲程序的內(nèi)存。單片機內(nèi)存包括ROM和RAM兩部分。ROM的優(yōu)點是掉電后存儲的內(nèi)容不會丟失,缺點是除非在燒錄(下載)過程中,否則上電后它存儲的內(nèi)容也不能更改。并且,雖然ROM在燒錄(下載)過程中可以更改內(nèi)容,但是更改的次數(shù)有限制,也就是燒錄(下載)的次數(shù)有限制,一般最大次數(shù)是10萬次,當然這里所說ROM是指FLASH的單片機,如果是OTP的單片機,那么最大次數(shù)是1次。而RAM恰好反過來,RAM的優(yōu)點是上電后存儲的內(nèi)容可以被程序指令隨時更改,而且還沒有更改次數(shù)限制,缺點是掉電后內(nèi)容會丟失。正因為ROM和RAM各有特點,所以它們的分工有所不同。程序包括指令和數(shù)據(jù)兩部分。指令是指程序中的判斷,跳轉(zhuǎn),賦值等指令,這些內(nèi)容是程序燒錄進單片機時就固定下來的,不可更改的,所以存儲在ROM中。數(shù)據(jù)也分兩種,程序指令可更改的數(shù)據(jù)和程序指令不可更改的數(shù)據(jù)。程序指令可更改的數(shù)據(jù)存儲在RAM中,程序指令不可更改的數(shù)據(jù)存儲在ROM中。那么誰在幕后進行這些分類存儲?是編譯器軟件和下載器(燒錄器)。編譯器除了把C語言翻譯成機器語言之外,還幫我們分好了類,分配好了存儲的地址和位置,下載器(燒錄器)再根據(jù)這些信息把程序存儲到內(nèi)存中。
管腳。它是單片機與外部電路進行能量和信息交互的橋梁。有電源,復位,晶振和IO口這4種類型管腳。第一種電源管腳。是給單片機內(nèi)部電路供電的接口。單片機有兩種常用的供電電壓,一般不是3.3V就是5V,有的單片機兩種電壓都兼容。第二種復位管腳。單片機上電后需要外部電路給它一個瞬間高電平或者低電平的復位信號,才能啟動工作。這類外部的復位電路通常是用電容和電阻組成的充電電路來實現(xiàn),也有一些系統(tǒng)是用專門的復位芯片來實現(xiàn)。第三種晶振管腳。任何單片機想要工作必須要有晶振。單片機執(zhí)行程序指令是按一個節(jié)拍一個節(jié)拍來執(zhí)行的。而晶振產(chǎn)生固定頻率的脈沖就是這個節(jié)拍的基礎源泉。所以把晶振比喻成單片機的心臟是非常恰當?shù)摹.斎?,現(xiàn)在很多單片機都把晶振集成到內(nèi)部了,不用再外接晶振。第四種IO口管腳。這是跟我們編寫程序關聯(lián)最密切的管腳。前面提到的電源,復位,晶振這3種管腳是為了讓單片機能工作,俗稱單片機工作的三要素。而單片機工作的具體內(nèi)容就是通過IO口管腳來體現(xiàn)的。比如,IO口能識別按健的輸入,也能驅(qū)動繼電器的開關,也能跟外圍器件進行通信。
電平。單片機IO口管腳檢測到的電壓低于或等于0.8V時是低電平,程序里讀取到的是0數(shù)字。檢測到的電壓高于或等于2.4V時是高電平,程序里讀取到的是1數(shù)字,當然IO口輸入的最大電壓不能超過單片機的供電電壓。單片機輸出的低電平是0V,單片機輸出的高電平等于它的供電電壓值。
時間。時間是單片機程序必不可少的一個元素。跟外圍芯片通信的時序節(jié)拍需要時間,驅(qū)動發(fā)光二極管閃爍需要時間,工控自動化的某些延時需要時間。單片機的時間來源自兩方面。第一方面源自指令的周期時間。單片機是根據(jù)節(jié)拍來執(zhí)行程序指令的,所以每執(zhí)行一條指令都要消耗一點時間,只要讓程序執(zhí)行一些無實際意義的指令,并且通過調(diào)整所執(zhí)行指令的條數(shù)就可以得到所需要的時間長度。第二方面源自單片機內(nèi)部自帶的定時器。假如設置定時器每20毫秒產(chǎn)生一次中斷,現(xiàn)在要獲取10秒鐘的時間,只需程序統(tǒng)記500次定時中斷就可以了,因為1秒等于1000毫秒。
下節(jié)預告,平臺軟件和編譯器軟件的簡介。
評論