單片機(jī)初學(xué)者的常見問題
二十世紀(jì)跨越了三個“電”的時代,即電氣時代、電子時代和現(xiàn)已進(jìn)入的電腦時代。不過,這種電腦,通常是指個人計算機(jī),簡稱pc機(jī)。它由主機(jī)、鍵盤、顯示器等組成。還有一類計算機(jī),大多數(shù)人卻不怎么熟悉。這種計算機(jī)就是把智能賦予各種機(jī)械的單片機(jī)(亦稱微控制器)。顧名思義,這種計算機(jī)的最小系統(tǒng)只用了一片集成電路,即可進(jìn)行簡單運(yùn)算和控制。因?yàn)樗w積小,通常都藏在被控機(jī)械的“肚子”里。它在整個裝置中,起著有如人類頭腦的作用,它出了毛病,整個裝置就癱瘓了?,F(xiàn)在,這種單片機(jī)的使用領(lǐng)域已十分廣泛,如智能儀表、實(shí)時工控、通訊設(shè)備、導(dǎo)航系統(tǒng)、家用電器等。各種產(chǎn)品一旦用上了單片機(jī),就能起到使產(chǎn)品升級換代的功效,常在產(chǎn)品名稱前冠以形容詞——“智能型”,如智能型洗衣機(jī)等?,F(xiàn)在有些工廠的技術(shù)人員或其它業(yè)余電子開發(fā)者搞出來的某些產(chǎn)品,不是電路太復(fù)雜,就是功能太簡單且極易被仿制。究其原因,可能就卡在產(chǎn)品未使用單片機(jī)或其它可編程邏輯器件上。
學(xué)習(xí)單片機(jī)是否很困難呢?應(yīng)當(dāng)說,對于已經(jīng)具有電子電路,尤其是數(shù)字電路基本知識的讀者來說,不會有太大困難,如果你對pc機(jī)有一定基礎(chǔ),學(xué)習(xí)單片機(jī)就更容易。為使絕大多數(shù)讀者能用上單片機(jī)。我們這里將盡量按深入淺出、刪繁就簡、理論聯(lián)系實(shí)際的原則把單片機(jī)的基本工作原理、使用方法交給讀者,以達(dá)到把大家領(lǐng)進(jìn)單片機(jī)之“門”的目的。不過,單片機(jī)和pc機(jī)一樣,是實(shí)踐性很強(qiáng)的一門技術(shù),有人說“計算機(jī)是玩出來的”,單片機(jī)亦一樣,只有多“玩”,也就是多練習(xí)、多實(shí)際操作,才能真正掌握它。因此,本講座會提供各種練習(xí)和實(shí)驗(yàn),并介紹一些適用于初學(xué)者且性價比較高的單片機(jī)和開發(fā)系統(tǒng)的貨源。你只有認(rèn)真完成成這些實(shí)踐環(huán)節(jié),才能為進(jìn)一步深造,打好基礎(chǔ)。
“入門既不難,深造也是辦得到的”,只要你有恒心、有決心,跟隨我們的“連載”一步步走下去,將來就一定能在單片機(jī)世界里遨游。
單片機(jī)的組成
單片機(jī)要自動完成計算,它應(yīng)該具有哪些最重要的部分呢?
我們以打算盤為例計算一道算術(shù)題。例:36+163×156-166÷34?,F(xiàn)在要進(jìn)行運(yùn)算,首先需要一把算盤,其次是紙和筆。我們把要計算的問題記錄下來,然后第一步先算163×156,把它與36相加的結(jié)果記在紙上,然后計算166÷34,再把它從上一次結(jié)果中減去,就得到最后的結(jié)果。
現(xiàn)在,我們用單片機(jī)來完成上述過程,顯然,它首先要有代替算盤進(jìn)行運(yùn)算的部件,這就是“運(yùn)算器”;其次,要有能起到紙和筆作用的器件,即能記憶原始題目、原始數(shù)據(jù)和中間結(jié)果,還要記住使單片機(jī)能自動進(jìn)行運(yùn)算而編制的各種命令。這類器件就稱為“存貯器”。此外,還需要有能代替人作用的控制器,它能根據(jù)事先給定的命令發(fā)出各種控制信號,使整個計算過程能一步步地進(jìn)行。但是光有這三部分還不夠,原始的數(shù)據(jù)與命令要輸入,計算的結(jié)果要輸出,都需要按先后順序進(jìn)行,有時還需等待。如上例中,當(dāng)在計算163×156時,數(shù)字36就不能同時進(jìn)入運(yùn)算器。因此就需要在單片機(jī)上設(shè)置按控制器的命令進(jìn)行動作的“門”,當(dāng)運(yùn)算器需要時,就讓新數(shù)據(jù)進(jìn)入?;蛘?,當(dāng)運(yùn)算器得到最后結(jié)果時,再將此結(jié)果輸出,而中間結(jié)果不能隨便“溜出”單片機(jī)。這種對輸入、輸出數(shù)據(jù)進(jìn)行一定管理的“門”電路在單片機(jī)中稱為“口”(port)。在單片機(jī)中,基本上有三類信息在流動,一類是數(shù)據(jù),即各種原始數(shù)據(jù)(如上例中的36、163等)、中間結(jié)果(如166÷34所得的商4、余數(shù)30等)、程序(命令的集合)等。這樣要由外部設(shè)備通過“口”進(jìn)入單片機(jī),再存放在存貯器中,在運(yùn)算處理過程中,數(shù)據(jù)從存貯器讀入運(yùn)算器進(jìn)行運(yùn)算,運(yùn)算的中間結(jié)果要存入存貯器中,或最后由運(yùn)算器經(jīng)“出入口”輸出。用戶要單片機(jī)執(zhí)行的各種命令(程序)也以數(shù)據(jù)的形式由存貯器送入控制器,由控制器解讀(譯碼)后變?yōu)楦鞣N控制信號,以便執(zhí)行如加、減、乘、除等功能的各種命令。所以,這一類信息就稱為控制命令,即由控制器去控制運(yùn)算器一步步地進(jìn)行運(yùn)算和處理,又控制存貯器的讀(取出數(shù)據(jù))和寫(存入數(shù)據(jù))等。第三類信息是地址信息,其作用是告訴運(yùn)算器和控制器在何處去取命令取數(shù)據(jù),將結(jié)果存放到什么地方,通過哪個口輸入和輸出信息等。
存貯器又分為只讀存貯器和讀寫存貯器兩種,前者存放調(diào)試好的固定程序和常數(shù),后者存放一些隨時有可能變動的數(shù)據(jù)。顧名思義,只讀存貯器一旦將數(shù)據(jù)存入,就只能讀出,不能更改(eprom、e2prom等類型的rom可通過一定的方法來更改、寫入數(shù)據(jù)——編者注)。而讀寫存貯器可隨時存入或讀出數(shù)據(jù)。
實(shí)際上,人們往往把運(yùn)算器和控制器合并稱為中央處理單元——cpu。單片機(jī)除了進(jìn)行運(yùn)算外,還要完成控制功能。所以離不開計數(shù)和定時。因此,在單片機(jī)中就設(shè)置有定時器兼計數(shù)器,其基本結(jié)構(gòu)與本連載之(二)中的舉例類似。到這里為止,我們已經(jīng)知道了單片機(jī)的基本組成,即單片機(jī)是由中央處理器(即cpu中的運(yùn)算器和控制器)、只讀存貯器(通常表示為rom)、讀寫存貯器(又稱隨機(jī)存貯器通常表示為ram)、輸入/輸出口(又分為并行口和串行口,表示為i/o口)等等組成。實(shí)際上單片機(jī)里面還有一個時鐘電路,使單片機(jī)在進(jìn)行運(yùn)算和控制時,都能有節(jié)奏地進(jìn)行。另外,還有所謂的“中斷系統(tǒng)”,這個系統(tǒng)有“傳達(dá)室”的作用,當(dāng)單片機(jī)控制對象的參數(shù)到達(dá)某個需要加以干預(yù)的狀態(tài)時,就可經(jīng)此“傳達(dá)室”通報給cpu,使cpu根據(jù)外部事態(tài)的輕重緩急來采取適當(dāng)?shù)膽?yīng)付措施。
現(xiàn)在,我們已經(jīng)知道了單片機(jī)的組成,余下的問題是如何將它們的各部分連接成相互關(guān)聯(lián)的整體呢?實(shí)際上,單片機(jī)內(nèi)部有一條將它們連接起來的“紐帶”,即所謂的“內(nèi)部總線”。此總線有如大城市的“干道”,而cpu、rom、ram、i/o口、中斷系統(tǒng)等就分布在此“總線”的兩旁,并和它連通。從而,一切指令、數(shù)據(jù)都可經(jīng)內(nèi)部總線傳送,有如大城市內(nèi)各種物品的傳送都經(jīng)過干道進(jìn)行。
單片機(jī)的指令系統(tǒng)和匯編語言程序
前面已經(jīng)講述了單片機(jī)的幾個主要組成部分,這些部分構(gòu)成了單片機(jī)的硬件。所謂硬件(hardware),就是看得到,摸得到的實(shí)體。但是,光有這樣的硬件,還只是有了實(shí)現(xiàn)計算和控制功能的可能性。單片機(jī)要真正地能進(jìn)行計算和控制,還必須有軟件(software)的配合。軟件主要指的是各種程序。只有將各種正確的程序“灌入”(存入)單片機(jī),它才能有效地工作。單片機(jī)所以能自動地進(jìn)行運(yùn)算和控制,正是由于人把實(shí)現(xiàn)計算和控制的步驟一步步地用命令的形式,即一條條指令(instruction)預(yù)先存入到存貯器中,單片機(jī)在cpu的控制下,將指令一條條地取出來,并加以翻譯和執(zhí)行。就以兩個數(shù)相加這一簡單的運(yùn)算來說,當(dāng)需要運(yùn)算的數(shù)已存入存貯器后,還需要進(jìn)行以下幾步: 第一步:把第一個數(shù)從它的存貯單元(location)中取出來,送至運(yùn)算器。
評論