2-《電子入門趣談》第一章_一切從微控制器開始-1.1微控制器概述
接下來,我將帶您走入一個神奇的世界。
我知道,當您拿起這本書翻開第一頁的時候,您心裡肯定還是在嘀咕“我到底該如何入門電子科技呢?這個頭該怎麼開呢?”。
好吧,我來告訴你,從微控制器開始。
為何要從微控制器開始,原因很簡單,這是一個科技入門的捷徑。請相信我,如果能把一塊微控制器開發板學會了那基本上軟體程式設計和硬體電路知識就都能小有造詣了,因為你只有看懂了電路圖才能編出正確的程式,將程式都玩通了之後還可以試著自己設計新的電路,這是一個互相促進的過程,這也是好多電子愛好者達成的共識,好多人就是從微控制器開始入門科技製作,然後他們學會了程式設計,學會了電子電路的實戰技巧,然後又試著開始製作屬於自己的競賽機器人,再然後獲得了很多個科技獎項,再然後你會發現他們學習其他的東西(尤其是和軟硬體沾邊的)往往比一般人要快,再然後等他們上研究生了或者畢業了往往要比別人有更好的發展前景,呵呵,這是一條因果使然的人生軌跡,而且,並不誇張。
好吧,不多說廢話了。
諸位看官。
讓我們直接進入今天的主題,微控制器!
1.1 微控制器概述
1.1.1 啥叫微控制器
您有時候也許會聽到周圍的大神們常常說道這樣的字眼,像什麼“微控制器”、“微控制器開發板”、“微控制器學習板”之類的,我第一次聽到“微控制器”三個字的時候曾天真的以為微控制器就是一臺很高深莫測的機器,也許長得很像一輛卡丁車,也許就像一部手機吧。但是很快就發現了自己被騙了,其實“微控制器”還不如直接叫“單片”,因為他確確實實的就是一個孤單的小晶片。
那時候我經常懷著一份好奇,到底微控制器是個什麼東西,於是免不了的就往圖書館跑跑,結果不要緊,一眼望去《微控制器基礎教程》《51微控制器介面技術》《微控制器原理》《51微控制器設計例項》。。。我勒個去,滿滿的一屋子都是關於微控制器的書,隨便的抽出這麼幾本,發現不是講一些基本理論讓人看了一頭霧水,就是擺一堆亂七八糟的電路原理圖不知所云的。唉,就沒有一本通俗點的書告訴我微控制器到底是個啥嗎?
好吧,下面慢慢地告訴你,它到底是個啥。
根據經驗,姑且以為初入門的親們往往有著兩個誤區,這兩個誤區說大不大說小不小,但是當親們成為大神之後再回看當年這兩個錯誤,就會哭笑不得。來看看這兩個想法你有沒有過呢?
1.微控制器是一塊板子,上面有好多的晶片。
2.各種晶片工作是純靠板子上的電路完成的。
這兩個問題是不是有點似曾相識呢?如果沒有,那恭喜你,你已經比很多學生入門的時候要聰明很多啦~
首先第一個問題,第一段已經說了,微控制器就是一個孤單的晶片,那塊大大的電路板叫做開發板,上面除了微控制器(最小系統電路),還有各種晶片、數碼管、蜂鳴器、繼電器巴拉巴拉的。雖然微控制器晶片的樣式、大小不同,什麼直插式啦,貼片式啦,什麼20引腳、40引腳啦,那都是浮雲,重點是微控制器就是一個片,而他的偉大之處正在於此,一個龐大的檢測和控制的核心,往往就是這小小的一個片兒。據知情人爆料,一個飛思卡爾微控制器就有著控制一架波音747的能力,是不是有一種“哇塞”的感覺呢?
那麼第二個問題,一個功能到底是怎麼實現的呢?肯定不是純電路結構啦,其實我們可以簡單地理解為,微控制器就是一個大腦,它通過識別和控制引腳電平的變化來工作。我們結合下圖一起來看一下。
那是一個電阻,串聯著一個發光二極體,您可以把它理解成一個燈泡,現在我想把這個燈泡點亮,需要怎麼辦?用打火機嗎?肯定不行!只要稍微懂點電子知識的大家都知道,只需要在右面加一個正電源,比如5V,左端加一個0電壓,俗稱“地”,OK,一個點燈的專案就完成了。
接下來我對上圖做一個改裝。把“地”去掉,取而代之的是一塊長方形晶片,再擴充套件成如下圖所示的樣子。
沒錯,中間的那個長方形的東西就叫微控制器,假如你想讓燈L亮起來,只需要讓P1.4那個地方(學名叫管腳)作用等同於“地”即可,你想讓燈L滅掉只需要讓P1.4管腳作用等同於“+5V”電源,而這些我們都可以通過編寫程式來實現,具體怎麼編寫程式這是後話暫且不表。各位再看P1.0管腳,目前的情況是,P1.0管腳通過了一個電阻直接連到了+5V電源,如果我這個時候按下了按鍵S,此時P1.0管腳會被短路直接接地,這個特性很有意思,微控制器的P1.0管腳可以通過感應自身是高電平(高電平是數位電子技術中的術語,在上圖中就是代表+5V電源電壓)還是低電平(同高電平一個道理,在上圖中代表“地”)來判斷您是否按下了S,有了這個功能我就可以實現一個很有生活氣息的小專案:通過按鍵控制一個燈的亮滅,當P1.0檢測到有按鍵按下時就讓P1.4轉換一個電平狀態,從而達到控制燈泡L亮滅的目的。這就是一個簡單的測量與控制系統。很多人在沒學習微控制器的時候可能會認為,按鍵部位通過一條線連線到P1.4處,然後按下按鍵燈就會亮。不知道你有沒有這樣認為過呢?這樣雖然從原理圖上看起來是沒錯的,但是微控制器就悲催的毫無作用了……所以說,微控制器就是可以控制一個引腳輸出高/低電平(電源電壓或者地)並可以檢測一個引腳輸入了何種電平的晶片。要實現這些功能,就需要我們親自動手編寫程式並且將程式送給微控制器來實現,微控制器就是憑著可以由使用者來編寫智慧程式來實現各種功能而笑傲整個電子江湖,臭美去吧!
1.1.2 學習微控制器
為啥要學?
微控制器重要之處在於它的開發目的是將計算機的應用推廣到智慧儀表、資料採集、自動測試、工業自動化領域中,讓非計算機專業的工程技術人員能容易地掌握計算機應用系統的設計、組裝和除錯。
與通用計算機如PC機相比,微控制器結構簡單,只要外加一些擴充套件電路及必要的通道介面,就可以構成各種計算機應用系統。
再說點接點地氣的話,就像一開始提到的那樣,微控制器是電子愛好者初學者們入門的一個不二捷徑,而且,相當的“不二”!
怎麼學?
不程式設計永遠學不會微控制器!
微控制器是門學問呀,怎麼學?想做題海戰術?呃,您老給出道題看看。檢驗出真知,學微控制器只能靠實踐。怎麼實踐?程式設計!
就像人體會檢測身體狀況並做出反應一樣,微控制器功能也是如此。你的胃空了,你的大腦會識別傳來的訊號,然後輸出“餓”的訊號讓你察覺。相似的,按鍵按下,某個管腳的電平置低,微控制器識別電平變化並操縱連線LED的管腳置低電平。大腦有一套天生的系統,會識別,知道識別到訊號變化後進行怎樣的操作。但是微控制器怎麼知道如何做呢?那就是靠你下載到裡面的程式啦~
胃空了大腦會讓你感覺餓,腿抽筋了大腦會讓你覺得疼。那開發板上每個晶片也像身體的不同器官,有不同的訊號變化和對應的不同操作。因此你要學習對不同晶片的程式的編寫。
程式設計說難也難,說容易也容易,程式設計的根本目的就在於控制微控制器,由您來給單片機發口令,讓它執行各種任務,比如你對它喊“讓燈亮!”,它就老老實實的讓燈亮,再對它喊“睡大覺”,它就得心甘情願的去睡大覺!只不過我們對單片機發口令的時候不是真的靠“喊”,而是靠“寫”,寫它能認識的文字。懂點微控制器的發燒友應該都有這個體會,程式設計有一個經常要用到的關鍵東西:暫存器。
暫存器是一個神奇的東西,顧名思義,暫存器,暫存器,寄存東西的各種神器,你可以把微控制器理解成一個大盒子,而暫存器就是這個大盒子中的一個個排列整齊的小盒子,小盒子裡當然可以存東西,暫存器裡面就是存放口令的地方,一個暫存器在微控制器裡對應一種功能,您對微控制器編寫程式基本上都要對暫存器進行操作,它像一個個的箱子。小盒子裡面還可以有小小盒子,比如一個小盒子又分為8個小小盒,暫存器也是一樣的,有的有8個空,有的有16個,通過往裡面放1或者0,微控制器就會改變它的工作狀態。比如在飛思卡爾微控制器裡,向PTB管腳的方向暫存器PTBDD裡放1,管腳就成為輸出管腳,放0則成為輸入管腳。在AD轉換的程式中,暫存器的值還可以控制時鐘分頻、觸發方式、中斷開關等,有一個老師這樣跟我們說“微控制器程式設計就是玩暫存器”,謙虛的我們一般會接上一句“程式設計就是被暫存器玩”,都無所謂啦。具體如何程式設計,且聽下文分解。
1.1.3 世界上有多少種微控制器
要問世界上有多少種微控制器,這個問題恐怕和問世界上有多少種手機是一個意思,微控制器多的數不勝數,各自都有各自的功能特點。比較主流的微控制器型別有以下幾種。
1、Motorola微控制器
Motorola公司曾經是世界上最大的微控制器生產廠商,產品覆蓋8位、16位、32位微控制器領域,現在Motorola公司的微控制器行業已經由Freescale公司接管。我們平時接觸到的QG8 、JM60等微控制器就是出自Freescale旗下。Motorola微控制器的執行速度快、高頻噪聲低、抗干擾能力強,特別適合在工業領域或其他惡劣環境下執行。M-Core架構的32位微控制器在效能和功耗方面甚至超過了ARM7.
2、Microchip微控制器
在8位微控制器領域,Microchip公司是市場份額增長最快的微控制器生產廠商,其CPU率先採用RISC結構,執行速度快,價效比也很高,適合用於生產量大、價格敏感、檔次一般的產品。
3、Intel微控制器
同胞們,我們通常所說的51微控制器實際上有STC-51和AT89S51兩種,其中著名的STC-51系列微控制器就是STC公司以Intel公司在1980年推出的8位微控制器MCS-51核心生產的,它能夠利用串列埠來直接燒寫程式所以被廣泛使用,因為是80年誕生的所以這一系列中最著名的微控制器就起其名曰“8051”。後來Intel公司又推出了16位微控制器,效能更強,適用於要求較高的場合。
4、三星微控制器
三星公司以生產儲存器晶片著稱,但在儲存器市場供大於求的形勢下,它也涉足參與微控制器行業的競爭了。三星公司裡比較有名的微控制器有KS51和KS57系列4位微控制器,KS86和KS88系列8位微控制器,KS17系列16位微控制器和KS32系列32位微控制器。三星公司走的思路是引進發達技術,生產與之相容的微控制器產品,以價格優勢取勝。比如在4位微控制器上採用NEC的技術,8位微控制器上引進Zilog公司的Z8技術,32位微控制器購買ARM7核心,還有DEC、東芝公司的技術等。三星公司的裸片具有非常強的競爭力。
5、Zilog微控制器
Zilog公司的旗艦產片就是Z8微控制器了,它採用多累加器結構,有較強的中斷處理能力,開發工具物美價廉。微控制器以18引腳封裝為主,主要面向低端應用場合。
6、Atmel微控制器
同胞們,不得不提的AT89S51微控制器就誕生於Atmel公司,說51微控制器的粉絲量居世界首位一點都不為過,尤其在學生領域裡的受歡迎程度就更不用提了。Atmel公司是世界上最著名的高效能、低功耗、非易失性儲存器和數字積體電路的一流半導體生產公司。它最令人矚目的就是它的EEPROM電可擦除技術和快閃記憶體(Flash,也就是您手中的優盤)技術等。Atmel公司的微控制器獨具特色而又效能優越,它在計算機外圍裝置、通訊裝置、自動化、工業控制、宇航裝置、儀器儀表和各種消費類產品中有著廣泛的應用前景,其生產的AT90系列是增強型RSIC架構、內含閃速儲存器的微控制器,它有一個和51一樣如雷貫耳名字——AVR。目前AT89S51的生命力依然旺盛,目測這種51熱還會一直延續下去。
7、NEC微控制器
NEC微控制器自成體系,以78K系列8位微控制器生產量最高,它的發展思路主要是服務大客戶,並投入相當大的技術力量為大客戶開發產品。比如九安公司電子血壓計的主要CPU就基於NEC平臺。
8、華邦微控制器
華邦微控制器也屬於8051核心類微控制器,它們的W78系列與標準的8051相容,W77為增強型51系列,對8051的時序作了改進,在同樣的時鐘頻率下,其CPU速度提升了2.5倍,更重要的是具有了線上系統程式設計(In-System Programming,ISP)的功能,這種能力對程式除錯來說具有劃時代的意義。
9. 等等等等。。。。
選擇微控制器和選擇手機的道理也一樣,看你需要實現什麼功能了,有的微控制器沒什麼功能,有的就集成了AD轉換、I2C、SPI等模組,如果只是控制個燈泡之類的,51微控制器足夠用了,如果需要測量訊號或者需要和其他晶片通訊那就選擇帶有AD轉換和通訊功能的微控制器,下圖是一些常見微控制器的實物展示圖。樣子其實都差不多,長得跟小蜈蚣似的。
再引申一下。剛才說的是微控制器控制一個燈,其實微控制器不止能控制燈,它能控制很多電子器件,如LED數碼管、蜂鳴器、液晶、繼電器、還有各種數字的或者模擬的晶片等等等等。我們將這些器件都和微控制器連到一起然後焊接到一塊電路板上,這就構成了一個微控制器開發板,或者又叫微控制器學習板,目前市場上流行著很多微控制器學習板供初學者學習,他們的樣子大都大同小異,類似於下圖。
在國內,目前最流行的微控制器有51微控制器,AVR微控制器,飛思卡爾微控制器等等,不用擔心不同的微控制器使用起來會有很大的不同,其實不同的微控制器就像不同的手機一樣,最簡單的手機只能打電話,發簡訊,後來的手機可以照相,上網,聽音樂,你會使用一款手機就應該也會很快入手其他款手機,這跟微控制器是一樣的。它並不神祕,記住“我們是用微控制器。不是做微控制器”。後文中講到微控制器程式設計時,基本上都是藉助於51微控制器,需要說明的是目前比較流行的AT89S52、AT89C52和STC89C52都是51核心微控制器,AT89S52除了效能提升和具有ISP下載功能外,他們沒有本質區別、驅動能力也相當接近,所以大家約定俗成的將它們統稱為“51微控制器”。
跟大家分享一個小技巧,有時候我們不想花錢買晶片怎麼辦?這就需要和生產廠家申請樣片了,登陸晶片公司的網址一般都會有申請樣片的網頁,試著填寫一下,往往一個月之內就能收到樣片。
1.1.4 要掌握的基礎知識
(1)程式語言
關於使用的程式語言,微控制器程式語言高手會使用匯編語言,就是比較高深那種,新手一般使用C語言就足夠了,學習C語言請到網上找一些C語言程式設計的入門書稍微看看即可,一般教學視訊裡都會詳細教給你。
如果您學過C++那就會給你省很多時間,只不過微控制器中的C語言和您在電腦上用C++程式設計有兩點不同之處,一定要注意。
①C語言中定義變數一定要在函式的最前面定義,如
Void main() void main()
{ {
int a; //正確 … …
char b; int a; //這樣就錯誤,是不是挺矯情的?
… … char b;
} }
②微控制器程式最後一定要進入一個死迴圈。
微控制器死迴圈的理念和我們在電腦上利用VC6.0編寫程式時的理念大相徑庭。因為在電腦上CPU不允許你做死迴圈,那是大忌,電腦可不想讓自己處於死迴圈的類宕機狀態。但是微控制器就不同了,它一定要進入到一個死迴圈裡,舉一個例子,比如我們用微控制器來編寫一個家用熱水器的程式,功能是這樣:
當水的溫度低於80°的時候,熱水器處於加熱狀態。
當水的溫度達到100°的時候,熱水器處於保溫狀態。
微控制器需要做的就是時時刻刻的檢測水的溫度,根據水的溫度來調控內部加熱器的工作狀態,那問題就來了,假如微控制器的程式和電腦上C++一樣也是執行一遍就完的話,它只會檢測一遍水的溫度,以後水的溫度無論變成什麼樣跟它都沒有任何關係了,聽著似乎很悲壯的一個愛情故事。這個時候我們就需要將“檢測水溫”的程式放到死迴圈裡,讓他不停的檢測,一遍又一遍的做出判斷,然後做出相應的控制,不用擔心它會累死,這是上天賦予它的基本使命,就算累死,也得幹!
常用死迴圈程式
for( ; ; ){…
//這裡面寫主程式
…}或
while(1){…
//這裡面寫主程式
…}
(2)位和位元組、數制
位和位元組在微控制器裡是特別重要的兩個概念。
位(bit):指的是取值只能為0或1的一個二進位制數值位。記作b
位元組(byte):由8位二進位制位組成,通常用作計算儲存容量的單位。記作B。我們常說的B,K,M,G,T之間有如下的轉換關係:
K(kelo),1K=1024B=210
M(mega),1M=1024K=220
G(giga),1G=1024M=230
T(tera),1T=1024G=240
數制:數制也稱計數制,是用一組固定的符號和統一的規則來表示數值的方法。微控制器中的數制主要涉及10進位制、2進位制、16進位制。程式設計的時候更多的是2進位制和16進位制之間的轉換,3種數制之間的轉換關係如下表所示:
10進位制(預設數制) | 2進位制(宣告方式0b或0B) | 16進位制(宣告方式0x或0X) |
0 | 0 | 0 |
1 | 1 | 1 |
2 | 10 | 2 |
3 | 11 | 3 |
4 | 100 | 4 |
5 | 101 | 5 |
6 | 110 | 6 |
7 | 111 | 7 |
8 | 1000 | 8 |
9 | 1001 | 9 |
10 | 1010 | A |
11 | 1011 | B |
12 | 1100 | C |
13 | 1101 | D |
14 | 1110 | E |
15 | 1111 | F |
之所以說位和位元組的概念重要是因為它們和上文提到的“暫存器”息息相關,一個暫存器通常情況下就是一個位元組(有的微控制器一個暫存器是兩個位元組),一個位元組對應8位,一個暫存器在微控制器裡都對應著一種功能指令,我們通過向暫存器裡寫二進位制數來控制微控制器。
明白了位、位元組、數制的概念後再對暫存器舉一個例子:
51微控制器姓P1的管腳一共有8個,分別叫P1^0、P1^1、P1^2、P1^3……P1^7,我們想讓P1^1、P1^3、P1^5、P1^7輸出低電平,P1^0、P1^2、P1^4、P1^6輸出高電平,則只需要向控制P1輸出狀態的暫存器“P1”中寫二進位制數0b01010101(0b代表後面的數為二進位制數,8位位元組最高位代表P1^7,最低位代表P1^0,1代表高電平,0代表低電平),程式設計的時候由於微控制器只認16進位制,所以寫成C語言就像下面這個樣子
P1=0x55;
對,就是這樣一句簡單的程式碼就能讓微控制器實現功能了。
未完待續。。。