很多接觸機(jī)器人或單片機(jī)不久的朋友面對(duì)種類(lèi)繁多的單片機(jī)常會(huì)困惑,,到底它們之間有何不同,?制作機(jī)器人到底用哪種單片機(jī)控制比較好?當(dāng)我們選擇了一種 單片機(jī)后,有何捷徑能迅速掌握并應(yīng)用這種單片機(jī)?本文嘗試用一種通俗易懂的方法解讀上述問(wèn)題,并設(shè)計(jì)了一種有深度的單片機(jī)控制機(jī)器人的實(shí)例,,希望能起到拋 磚引玉的作用。我與大家分享我使用單片機(jī)的一些經(jīng)驗(yàn),,希望能讓初學(xué)者少些迷茫,,讓已經(jīng)入門(mén)的朋友思維開(kāi)闊。
寫(xiě)本文時(shí)我僅有3年單片機(jī)實(shí)踐經(jīng)驗(yàn),,比較了解51系列和AVR系列單片機(jī),,因此著重討論了AVR單片機(jī),我經(jīng)驗(yàn)有限,,有錯(cuò)誤在所難免,,希望朋友們批評(píng)指正!
一 單片機(jī)和CPU,、個(gè)人電腦的區(qū)別和聯(lián)系
這部分內(nèi)容比較初級(jí),,但很多朋友剛接觸單片機(jī)時(shí)或許對(duì)下面的問(wèn)題不是很清楚。
1 什么是CPU,?
CPU中文名稱(chēng)為“中央處理器”,,典型代表為英特爾8086處理器,現(xiàn)在的奔騰X處理器都是8086的直系后代,。處理器,,顧名思義,其功能是處理數(shù)據(jù),, 對(duì)于中央處理器,,就是在數(shù)據(jù)處理中處于核心地位的處理器,聽(tīng)起來(lái)似乎很復(fù)雜,,但實(shí)際上核心就是一個(gè)ALU“算術(shù)邏輯單元”,。這個(gè)單元由一些數(shù)字門(mén)電路組 成,僅能完成括加,、減、乘,、除四則運(yùn)算,,與、或、非,、異或等邏輯操作,,以及移位、比較和傳送等操作,。CPU內(nèi)部包含ALU,,除此之外CPU還有時(shí)鐘電 路,CPU運(yùn)行的基本原理是:時(shí)鐘電路產(chǎn)生計(jì)數(shù)脈沖,,這個(gè)脈沖控制著一個(gè)累加器,,即每產(chǎn)生一個(gè)時(shí)鐘脈沖,累加器加1,,這個(gè)累加值以16進(jìn)制數(shù)字的形式通過(guò) 地址總線(xiàn)唯一選通程序儲(chǔ)存器中一個(gè)儲(chǔ)存單元(在CPU外部),,這個(gè)單元將內(nèi)部?jī)?chǔ)存的程序命令代碼通過(guò)數(shù)據(jù)總線(xiàn)送到ALU中,ALU根據(jù)代碼不同執(zhí)行不同操 作,,比如把某寄存器數(shù)值和某數(shù)值相加等,,然后將計(jì)算結(jié)果輸出到IO口或者各個(gè)總線(xiàn)上。
總之,,CPU的工作就是把程序中的命令代碼翻譯成不同任務(wù),,然后執(zhí)行,輸出執(zhí)行結(jié)果,。CPU在一切數(shù)字計(jì)算機(jī)中都發(fā)揮了核心作用,,即計(jì)算機(jī)都有CPU。
2 什么是個(gè)人電腦,?
由于CPU只有計(jì)算功能,,其計(jì)算的結(jié)果需要通過(guò)顯示器、音箱輸出,,而其工作的依據(jù),,即程序命令則依靠硬盤(pán)儲(chǔ)存,其執(zhí)行任務(wù)時(shí)動(dòng)態(tài)存取的數(shù)據(jù)要保存在內(nèi)存中,,而人可以通過(guò)鍵盤(pán)控制程序命令的執(zhí)行過(guò)程,,把所有這些CPU的外設(shè)組合在一起就叫做“個(gè)人電腦”。
3 什么是單片機(jī),?
個(gè)人電腦功能強(qiáng)大,,計(jì)算速度快,是較為理想的計(jì)算機(jī),。但當(dāng)我們需要用一個(gè)小裝置控制微波爐定時(shí)開(kāi)關(guān)時(shí),,個(gè)人電 腦就顯得笨重和昂貴。因此人們?cè)O(shè)計(jì)出一種濃縮型電腦,,大的有幾平方厘米,,小的比米粒還小,它們叫做“單片機(jī)”——單片微型計(jì)算機(jī)。CPU是一個(gè)芯片,,單片 機(jī)也是一個(gè)芯片,,看起來(lái)外觀差不多,它們有什么不同呢,?答案是:?jiǎn)纹瑱C(jī)內(nèi)除了集成有CPU外,,還集成了程序儲(chǔ)存器ROM(可理解為硬盤(pán))、數(shù)據(jù)儲(chǔ)存器 RAM(可理解為內(nèi)存),,輸入輸出接口(可理解為顯示器,、鍵盤(pán)插座),有的單片機(jī)內(nèi)還集成了電機(jī)驅(qū)動(dòng)電路,、視頻解碼電路,、AD轉(zhuǎn)換器、無(wú)線(xiàn)傳輸電路等,,使 得單片機(jī)功能變得非常強(qiáng)大,。單片機(jī)的特長(zhǎng)在于可以用單個(gè)芯片和簡(jiǎn)單外部電路去實(shí)現(xiàn)復(fù)雜的控制操作,因此非常適合機(jī)器人控制,。其實(shí)在絕大多數(shù)機(jī)器人中都有單片機(jī)的影子,。簡(jiǎn)單的和中等復(fù)雜的機(jī)器人可以用單片機(jī)直接控制,高度復(fù)雜的機(jī)器人用“個(gè)人電腦”或者“超級(jí)計(jì)算機(jī)”指揮許多單片機(jī)來(lái)完成機(jī)器人控制,。
4 學(xué)習(xí)單片機(jī)的捷徑是什么,?
所謂捷徑就是少走彎路。我剛開(kāi)始學(xué)單片機(jī)時(shí)走了不少?gòu)澛?,很多朋友和我都有相似的?jīng)歷,,剛開(kāi)始接觸單片機(jī),面對(duì)琳瑯滿(mǎn)目的圖書(shū)教材,,不知選擇哪本,;想實(shí)踐時(shí)不知到哪買(mǎi)單片機(jī);不知如何編程下載程序……
A 對(duì)于初學(xué)者仔細(xì)看本文就是學(xué)習(xí)單片機(jī)的捷徑之一,。
B 到圖書(shū)館或者書(shū)店在數(shù)十本單片機(jī)書(shū)中選一本你能看懂,,而且覺(jué)得案例有趣的“實(shí)在、生動(dòng),、活潑”的單片機(jī)書(shū)做為你的入門(mén)讀物,。
C 建議先從51單片機(jī)學(xué)起。掌握51后再學(xué)AVR,,然后學(xué)ARM,、DSP等。
D 在學(xué)習(xí)過(guò)程中實(shí)踐非常必要,。你需要一臺(tái)電腦,。如果是臺(tái)式電腦,,你可以花十幾元購(gòu)買(mǎi)25針并口下載線(xiàn),如果是筆記本電腦,,你只能購(gòu)買(mǎi)幾十元到幾百元的USB ISP編程器。
E 用萬(wàn)用板自己焊一個(gè)單片機(jī)最小系統(tǒng),,或者購(gòu)買(mǎi)開(kāi)發(fā)板,。沒(méi)有必要使用昂貴的仿真器。
F 你需要上網(wǎng)下載單片機(jī)編程軟件,,比如51用Keil編程,,AVR用CVAVR編程,在編程軟件中編好程序,,然后生成HEX文件,,再上網(wǎng)下載并口燒程序軟件 或者USB ISP燒程序軟件,用燒程序軟件加載HEX文件,,然后將編程線(xiàn)查到你的單片機(jī)電路板上,,即可把程序燒到單片機(jī)中。
G 拔下編程線(xiàn),,然后接通單片機(jī)板電源,,你可以看到單片機(jī)系統(tǒng)在運(yùn)行。
H 如果系統(tǒng)不能正常運(yùn)行,,首先檢查電路是否接錯(cuò),,然后檢查程序是否燒錯(cuò),如果以上都沒(méi)毛病,,研究程序是否編錯(cuò),。有時(shí)系統(tǒng)不能正常運(yùn)行并不意味著有什么地方錯(cuò) 了,只是某些參數(shù)沒(méi)設(shè)置好,,你需要不斷運(yùn)行,、修改程序、調(diào)試參數(shù),、再運(yùn)行如此往復(fù),,直到你對(duì)系統(tǒng)運(yùn)行滿(mǎn)意為止。有時(shí)這是一個(gè)非常艱苦的重復(fù)勞動(dòng),,調(diào)整數(shù)百 次上千次,,你無(wú)法回避,只能堅(jiān)定信念,,勇往直前,。
I 到淘寶網(wǎng)上買(mǎi)東西更方便、更便宜,。
二 在單片機(jī)誕生前人們用什么控制機(jī)器人
1 模擬計(jì)算機(jī)
在數(shù)字計(jì)算機(jī)誕生前,,人們用電子管,、電容器和電感線(xiàn)圈、電阻搭建模擬計(jì)算機(jī),,能夠完成許多簡(jiǎn)單的計(jì)算和控制任務(wù),。所謂模擬計(jì)算機(jī)就是其計(jì)算采用的信號(hào)不是 1、0數(shù)字信號(hào),,而是電壓連續(xù)變換的模擬信號(hào),,類(lèi)似于自動(dòng)控制原理中的各種控制器采用的運(yùn)算。別小看了模擬計(jì)算機(jī),,上世紀(jì)80年代中東戰(zhàn)爭(zhēng)時(shí),,阿拉伯國(guó)家使用的蘇制全自動(dòng)自行防空炮內(nèi)采用模擬計(jì)算機(jī)實(shí)現(xiàn)計(jì)算飛機(jī)軌跡并控制火炮射擊目標(biāo)。
2 齒輪和凸輪組成的控制器
在模擬計(jì)算機(jī)誕生前,,也就是蒸汽機(jī)時(shí)代,,有些機(jī)械天才硬是用數(shù)百個(gè)齒輪和凸輪搭建出機(jī)械計(jì)算機(jī),人們通過(guò)轉(zhuǎn)動(dòng)印有數(shù)字的各種齒輪,,另一些齒輪就將運(yùn)算結(jié) 果顯示出來(lái),。機(jī)械計(jì)算機(jī)在人類(lèi)史上上曾經(jīng)是高科技產(chǎn)品,第二次世界大戰(zhàn)時(shí),,德國(guó)著名的密碼機(jī)就是一種機(jī)電混合式計(jì)算機(jī),,它當(dāng)時(shí)是最保密的通信工具。
3 發(fā)條和秒表和繼電器組成的控制器
在電氣時(shí)代開(kāi)始時(shí),,人們用鐘表內(nèi)機(jī)械的旋轉(zhuǎn)分時(shí)控制一些繼電器的通斷,,從而控制一些機(jī)床和生產(chǎn)線(xiàn)的運(yùn)行。這種裝置類(lèi)似于早期洗衣機(jī)內(nèi)的定時(shí)器,。
三 入門(mén)首選 AT89S51系列單片機(jī)
1 簡(jiǎn)介
1980,,英特爾公司開(kāi) 發(fā)出一種簡(jiǎn)易的8031CPU,在當(dāng)時(shí)該CPU性能不比8086差很多,,但價(jià)格較便宜,,因此被很多低端應(yīng)用選中。由于市場(chǎng)看好,,ATMEL公司購(gòu)買(mǎi)了 8031的內(nèi)核,,把Flash存儲(chǔ)器和加強(qiáng)型IO口融入進(jìn)去開(kāi)發(fā)出了AT89系列單片機(jī)。所有兼容8031指令和內(nèi)核相似的單片機(jī)統(tǒng)稱(chēng)為51單片機(jī),,它是 目前應(yīng)用最廣泛的8位單片機(jī)之一,。因51單片機(jī)結(jié)構(gòu)簡(jiǎn)單,指令易學(xué),,應(yīng)用廣泛,,因此是初學(xué)單片機(jī)首選機(jī)型。如果有人想不學(xué)51,,直接學(xué)AVR,,那么此人一 定會(huì)遇到很多難題,,困惑和郁悶將伴隨著學(xué)習(xí)過(guò)程。如果學(xué)了51再學(xué)AVR和其他單片機(jī),,人們會(huì)發(fā)現(xiàn)“所謂單片機(jī)都不過(guò)如此”,。
2 性能
根據(jù)任務(wù)具體需要選擇最合適的單片機(jī),使單片機(jī)資源充分利用,,使系統(tǒng)性?xún)r(jià)比達(dá)到最高,,同時(shí)兼顧未來(lái)擴(kuò)展需要,不一味追求高性能單片機(jī),,這就是選單片機(jī)的原則。
AT89S51有4K的Flash程序存儲(chǔ)器,,128字節(jié)的RAM,,32條IO口,中斷系統(tǒng)具有6個(gè)中斷源,、5個(gè)終端矢量,、2個(gè)中斷優(yōu)先級(jí)的中斷結(jié)構(gòu); 串行口是一個(gè)全雙工的串行通信口,;AT89S51的電源電壓為4.0-5.5V,,AT89LS51的電源電壓為2.7-4.0V;振蕩器頻率 0-33MHz(AT89S51),,0-16MHz(AT89LS51); 有ISP 在線(xiàn)編程功能,,這個(gè)功能的優(yōu)勢(shì)在于改寫(xiě)單片機(jī)存儲(chǔ)器內(nèi)的程序不需要把芯片從工作環(huán)境中剝離。是一個(gè)強(qiáng)大易用的功能,。
AT89S52程序儲(chǔ)存器容量為8KB,,還有AT89S55,ROM容量更大,。
有很多公司生產(chǎn)了很多擴(kuò)展型51系列單片機(jī),,有的帶有AD轉(zhuǎn)換器,有的帶有比較器,,有的帶有PWM,,讀者可以根據(jù)自身需要選擇合適的51單片機(jī),但要注意他們的管腳定義和編程方式,。
3 使用方法
AT89S51 適于做單片機(jī)學(xué)習(xí)板,、電子時(shí)鐘、超聲波測(cè)距儀等不需要采集模擬量和控制大功率外部元件的電路,。S51與過(guò)去的C51的區(qū)別在于S51支持ISP在線(xiàn)編程,, 即C51需要幾百元的編程器編程,而S51僅需一條25針并口線(xiàn)和非常簡(jiǎn)單的轉(zhuǎn)換電路即可接在臺(tái)式電腦打印機(jī)接口燒程序,,下載燒程序小軟件即實(shí)現(xiàn)可對(duì) S51單片機(jī)編程,。對(duì)51單片機(jī)編程一般選用Keil軟件,,可采用C語(yǔ)言或者匯編語(yǔ)言,編完程后選擇輸出HEX文件,,然后用燒程序小軟件讀取HEX文件,, 再燒寫(xiě)到單片機(jī)中。
4 實(shí)踐經(jīng)驗(yàn)
A 剛開(kāi)始看書(shū)時(shí),,按照書(shū)上的電路圖連線(xiàn)然后通電調(diào)試,,但總不成功,將自己的電路和書(shū)上的電路仔細(xì)對(duì)照發(fā)現(xiàn)不了問(wèn)題,。原因在于很多書(shū)上的電路圖都是“簡(jiǎn)化 圖”,,即省略了一些電路,而這些被省略的電路卻關(guān)乎系統(tǒng)的運(yùn)行,。比如,,當(dāng)單片機(jī)書(shū)講到AD轉(zhuǎn)換電路,給出的電路圖多省略了晶振和復(fù)位電路,,按照AD轉(zhuǎn)換電 路圖搭出來(lái)的系統(tǒng)自然不能運(yùn)行,。
B 51單片機(jī)P0口輸出信號(hào)時(shí)需要上拉電阻,我經(jīng)常忘記加電阻,,導(dǎo)致電路不好使,。
C 51單片機(jī)31引腳需要接正極,以選擇采用內(nèi)部程序存儲(chǔ)器,。如果忘記給這個(gè)引腳以正確的電壓,,你的單片機(jī)可能不能執(zhí)行程序。
4 應(yīng)用舉例