單片機設計經驗設計技巧集錦

一、機器人常用的單片機使用經驗

一 學習單片機的捷徑是什麼?

所謂捷徑就是少走彎路。我剛開始學單片機時走了不少彎路,很多朋友和我都有相似的經歷,剛開始接觸單片機,面對琳琅滿目的圖書教材,不知選擇哪本;想實踐時不知到哪買單片機;不知如何編程下載程序„„

A 對於初學者仔細看本文就是學習單片機的捷徑之一。

B 到圖書館或者書店在數十本單片機書中選一本你能看懂,而且覺得案例有趣的“實在、生動、活潑”的單片機書做爲你的入門讀物。

C 建議先從51單片機學起。掌握51後再學AVR,然後學ARM、DSP等。

D 在學習過程中實踐非常必要。你需要一臺電腦。如果是臺式電腦,你可以花十幾元購買25針並口下載線,如果是筆記本電腦,你只能購買幾十元到幾百元的USB ISP編程器。   E 用萬用板自己焊一個單片機最小系統,或者購買開發板。沒有必要使用昂貴的仿真器。   F 你需要上網下載單片機編程軟件,比如51用Keil編程,AVR用CVAVR編程,在編程軟件中編好程序,然後生成HEX文件,再上網下載並口燒程序軟件或者USB ISP燒程序軟件,用燒程序軟件加載HEX文件,然後將編程線查到你的單片機電路板上,即可把程序燒到單片機中。

G 拔下編程線,然後接通單片機板電源,你可以看到單片機系統在運行。

H 如果系統不能正常運行,首先檢查電路是否接錯,然後檢查程序是否燒錯,如果以上都沒毛病,研究程序是否編錯。有時系統不能正常運行並不意味着有什麼地方錯了,只是某些參數沒設置好,你需要不斷運行、修改程序、調試參數、再運行如此往復,直到你對系統運行滿意爲止。有時這是一個非常艱苦的重複勞動,調整數百次上千次,你無法迴避,只能堅定信念,勇往直前。

I 到淘寶網上買東西更方便、更便宜。

二 在單片機誕生前人們用什麼控制機器人

1 模擬計算機

在數字計算機誕生前,人們用電子管、電容器和電感線圈、電阻搭建模擬計算機,能夠完成許多簡單的計算和控制任務。所謂模擬計算機就是其計算採用的信號不是1、0數字信號,而是電壓連續變換的模擬信號,類似於自動控制原理中的各種控制器採用的運算。別小看了模擬計算機,上世紀80年代中東戰爭時,阿拉伯國家使用的蘇制全自動自行防空炮內採用模擬計算機實現計算飛機軌跡並控制火炮射擊目標。


2 齒輪和凸輪組成的控制器

在模擬計算機誕生前,也就是蒸汽機時代,有些機械天才硬是用數百個齒輪和凸輪搭建出機械計算機,人們通過轉動印有數字的各種齒輪,另一些齒輪就將運算結果顯示出來。機械計算機在人類史上上曾經是高科技產品,第二次世界大戰時,德國著名的密碼機就是一種機電混合式計算機,它當時是最保密的通信工具。



3 發條和秒錶和繼電器組成的控制器

在電氣時代開始時,人們用鐘錶內機械的旋轉分時控制一些繼電器的通斷,從而控制一些機牀和生產線的運行。這種裝置類似於早期洗衣機內的定時器。


三 入門首選 AT89S51系列單片機

1 簡介

1980,英特爾公司開發出一種簡易的8031CPU,在當時該CPU性能不比8086差很多,但價格較便宜,因此被很多低端應用選中。由於市場看好,ATMEL公司購買了8031的內核,把Flash存儲器和加強型IO口融入進去開發出了AT89系列單片機。所有兼容8031指令和內核相似的單片機統稱爲51單片機,它是目前應用最廣泛的8位單片機之一。因51單片機結構簡單,指令易學,應用廣泛,因此是初學單片機首選機型。如果有人想不學51,直接學AVR,那麼此人一定會遇到很多難題,困惑和鬱悶將伴隨着學習過程。如果學了51再學AVR和其他單片機,人們會發現“所謂單片機都不過如此”。

2 性能

根據任務具體需要選擇最合適的單片機,使單片機資源充分利用,使系統性價比達到最高,同時兼顧未來擴展需要,不一味追求高性能單片機,這就是選單片機的原則。

AT89S51有4K的Flash程序存儲器,128字節的RAM,32條IO口,中斷系統具有6箇中斷源、5個終端矢量、2箇中斷優先級的中斷結構;串行口是一個全雙工的串行通信口;AT89S51的電源電壓爲4.0-5.5V,AT89LS51的電源電壓爲2.7-4.0V;振盪器頻率

0-33MHz

(AT89S51),0-16MHz(AT89LS51); 有ISP 在線編程功能,這個功能的優勢在於改寫單片機存儲器內的程序不需要把芯片從工作環境中剝離。是一個強大易用的功能。   AT89S52程序儲存器容量爲8KB,還有AT89S55,ROM容量更大。

有很多公司生產了很多擴展型51系列單片機,有的帶有AD轉換器,有的帶有比較器,有的帶有PWM,讀者可以根據自身需要選擇合適的51單片機,但要注意他們的管腳定義和編程方式。

3 使用方法

AT89S51 適於做單片機學習板、電子時鐘、超聲波測距儀等不需要採集模擬量和控制大功率外部元件的電路。S51與過去的C51的區別在於S51支持ISP在線編程,即C51需要幾百元的編程器編程,而S51僅需一條25針並口線和非常簡單的轉換電路即可接在臺式電腦打印機接口燒程序,下載燒程序小軟件即實現可對S51單片機編程。對51單片機編程一般選用Keil軟件,可採用C語言或者彙編語言,編完程後選擇輸出HEX文件,然後用燒程序小軟件讀取HEX文件,再燒寫到單片機中。

4 實踐經驗

A 剛開始看書時,按照書上的電路圖連線然後通電調試,但總不成功,將自己的電路和書上的電路仔細對照發現不了問題。原因在於很多書上的電路圖都是“簡化圖”,即省略了一些電路,而這些被省略的電路卻關乎系統的運行。比如,當單片機書講到AD轉換電路,給出的電路圖多省略了晶振和復位電路,按照AD轉換電路圖搭出來的系統自然不能運行。

B 51單片機P0口輸出信號時需要上拉電阻,我經常忘記加電阻,導致電路不好使。

C 51單片機31引腳需要接正極,以選擇採用內部程序存儲器。如果忘記給這個引腳以正確的電壓,你的單片機可能不能執行程序。


4 應用舉例



如此高性能的單片機價格居然和51單片機差不多,比如ATmega8價格爲8元左右,ATmega16在13元左右,這是AVR有極高性價比的真實寫照。


2 性能

AVR家族人丁興旺,包括ATinyAVR(微小型)、低功耗類、ATmegaAVR高中低檔5類單片機。它們都基於同一核心技術,但在內部集成的電路多少上有不同。不論你要做電子手錶還是視頻處理,都有一款合適的AVR單片機能滿足你的需要。

本文只列出ATmega16中檔單片機的性能:

16KB的FLASH程序存儲器;512B的EEPROM;1KB的SRAM;32個快速寄存器;32個大功率IO口;20箇中斷;2個外部中斷口;有SPI、SUART、I2C總線接口;2個8位定時器;1個16位定時器;3個PWM通道;有實時時鐘RTC;8個10位AD通道;電壓比較器;看門狗;內置時鐘振盪器;JTAG接口;ISP在線編程;電壓範圍爲2.7V-5.5V;外部時鐘晶振0-16MHz;有PID和多種貼片封裝。

AVR的IO口能輸出20mA和吸收40mA的電流,不僅可直接驅動LED,甚至可直接驅動微型直流減速電機。而且AVR的IO口可編程設置成輸入、輸出、高阻態狀態,是真正的3態IO口。和51相比使用AVR開發產品你會發現前所未有的方便和自由。

AVR單片機可上操作系統,比如UCOS2、Linux等,自主編程實現操作系統功能也很容易。

根據任務具體需要選擇最合適的單片機,使單片機資源充分利用,使系統性價比達到最高,同時兼顧未來擴展需要,不要一味選用高性能單片機,這就是選單片機的原則。

用ARM+操作系統做超聲波測距儀——殺雞用了牛刀。用AVR中檔單片機做機器視覺——有些吃不消。如果把它們調換一下,一切就恰到好處了。

3 使用方法

學AVR單片機的好書是《AVR單片機嵌入式系統原理與應用實踐》,封面見下圖。


AVR一般採用CVAVR編程軟件編程,也可用GUN GCC AVR、AVR Studio軟件編程。可採用匯編或C語言編程。燒程序前先輸出HEX文件,然後用SLISP(雙龍ISP)軟件加載,再通過ISP編程線或者25針並口連接線燒入AVR單片機,支持在線編程。

由於AVR單片機最小系統很簡單,就是電源+晶振(可不用)+LED+ISP接口(通電就運行,斷電就停止,不用復位電路),因此任何初學者都可以用麪包板搭出AVR最小系統,並且編程實踐。

4 實踐經驗

使用AVR單片機時注意要正確設置熔絲位,SLISP軟件就可設置,熔絲位可決定單片機是採用外部晶振還是採用內部時鐘振盪器,如果熔絲位設置爲採用外部晶振,而電路中沒有接入晶振,則AVR程序不能運行。很多初學者忽視了這一點,他們的AVR系統不能運行卻找不到原因。再有就是AVR的IO口在使用前需先編程設置其狀態,否則你將發現程序在運行,但IO口沒信號。


4 應用舉例



五 高級機器人控制器 ARM

1 簡介

ARM是一個公司名,他們基於同一內核設計了很多高性能處理器,這些處理器都叫ARM。該技術被很多公司購買後生產出了集成很多功能電路的ARM芯片,使得ARM成爲高性能單片機。ARM一般爲32位單片機,適於處理大量複雜數據,很多ARM裝上了UCOS2、Windows CE、Linux操作系統,能夠同時運行多個程序。ARM廣泛應用於手機、MP3、GPS導航儀、吸塵機器人等產品上。


六 音頻視頻處理首選 DSP

1 簡介

DSP數字信號處理(Digital Signal Processing,簡稱DSP),它是一種獨特的微處理器,是以數字信號來處理大量信息的器件。其工作原理是接收模擬信號,轉換爲0或1

的數

字信號,再對數字信號進行修改、刪除、強化,並在其他系統芯片中把數字數據解譯回模擬數據或實際環境格式。它不僅具有可編程性,而且其實時運行速度可達每秒數以千萬條複雜指令程序,遠遠超過通用微處理器,是數字化電子世界中日益重要的電腦芯片。它的強大數據處理能力和高運行速度,是最值得稱道的兩大特色。

在高速小車巡線、語音識別等領域DSP被廣泛應用。但如果僅用DSP檢測幾個碰撞開關、控制幾個電機顯得大材小用。

七 新興控制器 FPGA

1簡介

FPGA(Field-Programmable Gate Array),即現場可編程門陣列,它是在PAL、GAL、CPLD等可編程器件的基礎上進一步發展的產物。它是作爲專用集成電路(ASIC)領域中的一種半定製電路而出現的,系統設計師可以根據需要通過可編輯的連接把FPGA內部的邏輯塊連接起來,就好像一個電路試驗板被放在了一個芯片裏。簡單說,如果使用者想開發一個用簡單數字邏輯電路就能控制的小車,又嫌搭電路麻煩,他就可用軟件給一個FPGA編程讓它實現數字電路功能去控制小車。即FPGA可被用來模擬各種電路。有的FPGA甚至能模擬51單片機的運行。因FPGA通過編程即可修改它模擬的電路結構,因此在系統實驗、調試中很方便,很多愛好者嘗試用FPGA做機器人控制器。

八 更多可供選擇的單片機

我們選擇學一款單片機前首先要考慮自己面對的實際任務需要什麼性能的單片機,然後在衆多性能滿足要求的單片機中作出選擇。此時我們還要考慮不同單片機的“應用廣泛程度”,比方說:當我們要做一個電子大賽智能小車,有AVR單片機和PIC單片機可滿足任務需要,如何在兩者中作出選擇需要考慮哪種單片機學起來比較容易、學習資料容易獲取、可供參考的程序和案例更加豐富、哪種單片機更容易獲得編程軟件和下載器等。筆者感覺要想做智能小車,AVR單片機的資料比較豐富。

世界上有種類繁多的單片機,它們當中絕大多數都可用來控制機器人,但存在一個是否合適的問題。比如PLC是可編程控制器,當然可以用來控制愛好者手中的機器人,但PLC多用於工業控制領域,設備龐大價格昂貴,同時不易獲得用PLC控制小型機器人的資料。愛好者選擇學一種單片機前,首先得明確自己要用單片機幹什麼,然後再選最合適的單片機學習。學單片機重在學精一兩種單片機,如果有人泛泛地學ARM、PLC、PIC、凌陽、DSP、FPGA等所有有名的單片機,那麼他將無法擁有真正的深度開發能力。所謂深度開發,以AVR單片機爲例,初學者可以用它實現小燈交替閃爍,中級技術人員可以用它控制參加比賽的機器人,而真正的高級開發人員可以用AVR實現機器視覺、無人機自動駕駛、坦克火控系統„„   AVR單片機過時了嗎?

有初學者甚至中級開發人員認爲因ARM性能一般比AVR性能高,因此ARM將代替AVR,AVR將退出歷史舞臺,或者MSP430將代替51系列單片機,或者FPGA將取代所有單片機等。這種看法不對,因爲不同單片機都有各自的特點和優點,沒有哪種單片機是完美的,在不同場合用最合適的單片機,發揮它們各自的特長,而不存在ARM一統天下,取代所有其他型號單片機的可能性。試想,原本十幾元的電子錶因爲採用ARM控制買到幾百元,誰能受得了?

因此不要覺得AVR已經過時,學完51就直接學ARM,或者覺得學51沒用,直接學ARM,否則你將碰壁。

MSP430系列單片機:比較適於機器人開發,是美國德州儀器推向市場的一種16位、具有精簡指令集的、超低功耗的混合信號處理器。具有Flash存儲器,中斷源較多,並且可以任意嵌套,使用時靈活方便。MSP430系列單片機的電源電壓採用的是 1.8~3.6V 電壓。因而可使其在1MHz的時鐘條件下運行時,芯片的電流會在200~400uA左右,時鐘關斷模式的最低功耗只有0.1uA。MSP430系列單片機的各成員都集成了較豐富的片內外設。它們分別是看門狗、模擬比較器、定時器、串口0、1、硬件乘法器、液晶驅動器、10位/12位ADC、16位Sigma-Delta AD、直接尋址模塊(DMA)、IO端口、基本定時器(Basic Timer)等的一些外圍模塊的不同組合。MSP430 系列單片機引進了JTAG技術,不僅使開發工具變得簡便,而且價格也相對低廉,並且還可以實現在線編程。

PIC單片機:可用於機器人開發,是8位單片機,產品種類豐富,採用精簡指令集,有不錯的開發環境,引腳驅動能力強,可直接連接繼電器控制強電。自帶看門狗,有睡眠和低功耗模式。很多性能不如AVR和MSP430系列單片機,但因其有特殊優點,也被廣泛應用。   凌陽單片機:比較適於機器人開發,以16位計算機爲核心,集成不同規模的RAM、ROM和其他豐富的功能電路,使用者可以根據自己需要選擇集成了特定功能電路的凌陽單片機。凌陽單片機指令系統提供出具有較高運算速度的16位,16位的乘法運算指令和內積運算指令,爲其應用添加了DSP功能,因此凌陽適合進行語音識別。在我國凌陽單片機在學校比較常見,應用實例較多,可作爲機器人愛好者選用的單片機。

九 實例:用AVR單片機創造機器生命

1 什麼是機器生命

機器生命就是一個能自主生存的機器,一個自動爲生存下去而奮鬥的機器。對於機器生命來說,生存的含義就是不斷電,繼續運行。機器生命具有完全自主決策、自主行動、活動於未知世界、不需人類參與就能持續運行並且自我維護等特徵。影片《終結者》中的天網就是超級機器生命。《霹靂5號》描述了一個機器人從無生命到有生命的過程。

N.維納(Norbert Wiener,1894~1964)寫《控制論》時創造出第一個機器生命Wiener龜,這個機器龜僅有2個電子管組成的模擬計算機,但它卻能實現真正的烏龜覓食、睡覺、探索、逃避等行爲,其表現如同一個有生命的生物一樣。機器龜上面有太陽能電池,當自身電池快用完前,機器龜樂於尋找一個光線充足的地方充電,充滿電後可能找個地方睡懶覺,或者探索未知世界,它有避免碰撞和避免到傾斜地方的趨向,我們無法預知它的行蹤,因爲它不是按照程序運行的,就如同我們自己一樣。後來維納在他的機器龜上又加了一個電子管,三個電子管連接成簡單的神經網絡,通過對機器龜訓練,維納通過搖鈴可控制機器龜的行爲。正如有生物學家訓練狗使得狗聽到搖鈴聲後就流口水。

這個機器生命的技術含量相當於20世紀70年代國際機器人領域的先進水平。當時已經有很多非常精密和複雜的工業機器人被應用,但這種簡單的機器人怎麼能稱作先進呢?因爲技術的複雜和技術的先進不是一個概念,複雜+精密不一定等於先進。先進的東西不一定複雜和精密。


A 尋光

我們可以用光電二極管來檢測光線強弱。當然也可以用光敏電阻。將光敏電阻和一個固定電阻串聯接在電源正負極之間,光敏電阻靠近正極一側。從光敏電阻和固定電阻連接點引出導線接到ATmega16的AD轉換輸入口。當強光照在光敏電阻時,光敏電阻阻值變小,因此其壓降變小,而固定電阻分壓增多,引出的AD檢測電位升高,被單片機轉化爲數字量後判斷光線增強。機器生命有5個光電傳感器,其中4個面向機器人前後左右四個方向,另一個指向太陽能板所面對的方向。通過編程可以讓機器人自主移動到光線最強的地方。

B 充電

本設計採用4.8V鎳氫充電電池爲系統供電。太陽能電池板正負極通過一個三極管與電池正負極相連。有一個電壓比較器比較電池電壓與太陽能板的壓差,如果壓差高於某值,比較器控制三極管導通,太陽能電池板對充電電池充電。充電電池電壓上升,當高於某值時控制三極管關斷,結束充電。爲使太陽能板能對電池組充電,要求太陽能板在陽光直射下輸出電壓高於8V。



C 語音識別

用AVR單片機的高速AD檢測功能能實現簡單的語音識別。聲音信號被駐極體電容話筒接收後送至LM386音頻功放芯片放大和過濾後送至單片機AD轉換口,單片機對音頻信號幅值採樣轉化爲一組數字,然後對這組進行取方差運算,得出一個特徵值,該特徵值可以用於簡單的語音識別。比如你發一個“e”,方差應該比較小,如果你發“p”爆破音,方差應該較大。當然,如果你用更復雜的數據處理,會得到更好的識別效果。本設計使用了2路聲音信號,目的是讓單片機判斷出聲源的大體方位。

D 超聲波測距

用AVR的1個IO口輸出40KHz信號送至超聲波發射電路,當超聲波遇到障礙物返回後,被超聲波接收頭接收,信號經CX20106A解碼芯片處理,得到一個低電平脈衝,用該脈衝引發AVR單片機中斷,AVR通過檢查發波和收到回波之間的時間差即可算出障礙物距離。   E 電機驅動

本設計採用2片LG9110電機驅動芯片驅動兩臺直流減速電機。LG9110輸出最大電流爲800mA,僅需要2條控制線與單片機IO口直接相連即可控制一臺電機正反轉或者停止。LG9110僅有8個引腳,使用非常方便。

F 讓機器生命更聰明

我的這個機器生命設計方案能實現最酷的效果是:白天,陽光明媚,機器生命跑到陽光底下曬太陽,太陽光會隨着時間變化,機器生命能自動跑到最合適的位置享受日光浴。到了晚上,機器生命會找個安靜的地方閉目養神,等待明天太陽升起。你可以訓練機器生命,讓它知道自己的名字叫什麼。比如你叫着它的名字,同時站在它面前用強光照射它的太陽能電池板,如此反覆訓練,會使機器生命聽到自己名字後向聲源方向跑去,

在距離聲源一定遠處

停止,因爲以往這樣做它都能享受強光照射並充電。這就如同真正的寵物狗,你叫它名字它就跑到你跟前希望能獲得食物。這一切都是完全能夠實現的,關鍵就在於編程序實現它。   G 想象無極限,你的機器寵物將無所不能

以上方案中,ATmega16的功能被發揮到極致,以至於沒有空閒的IO口,系統不能再擴展了。如果你用ATmega128單片機做,那麼它擁有53個IO口,30多箇中斷,128Kb的程序存儲器,4Kb的RAM,使得你能編寫更復雜的程序、儲存更多的動態數據、連接更多的外設,你的機器生命將變得非常有生命力。比如加入三軸加速度傳感器、地磁傳感器、GPS定位、雨水傳感器甚至攝像頭、無線通信模塊等,重新設計一個堅固和強勁的底盤,你的機器生命就可以在室外自由探索了。

以上芯片外設來源說明:在淘寶上購買很容易

底盤:340元的高級履帶式1:16電動坦克模型

加速度傳感器、地磁傳感器:美國AD公司的40元ADXL330加速度傳感器

GPS定位:幾十元的車載外置GPS天線

最後,我想說,機器人是非常好玩的,只要你有想象力,有毅力,努力研究實踐就能創造奇蹟。

二、工程師分享的單片機學習步驟

有了單片機學習板之後你就要多練習,把學習板和電腦連好,打開調試軟件坐在電腦前,先學會怎麼用調試軟件,然後從最簡單的流水燈實驗做起,等你能讓那八個流水燈按照你的意願隨意流動時你已經入門了,你會發現單片機是多麼迷人的東西啊,太好玩了,這不是在學習知識,而是在玩,當你編寫的程序按你的意願實現時你比做什麼事都開心,你會上癮的,真的。做電子類的人真的會上癮。然後讓數碼管亮起來,這兩項會了後,你已經不能自拔了,你已經開始考慮你這輩子要走哪一行了。就是要這樣練習,在寫程序的時候你肯定會遇到很多問題,而這時你再去翻書找,或是問別人,當得到解答後你會記住一輩子的,知識必須用於現實生活中,解決實際問題,這樣才能發揮它的作用。另外我再說說用匯編和C語言編程的問題。很多同學大一二就開設了C語言的課 ,我也上過,我知道那時天天就是幾乘幾,幾加幾啊,求個階乘啊。學完了有什麼用?讓你用C語言編單片機的程序你是不是就傻了?書上的東西我們必須要會運用。單片機編程用C語言或彙編語言都可以,但是我建議用C語言比較好,如果原來有C語言的基礎那學起來會更好,如果沒有,也可以邊學單片機邊學C語言,C 語言也挺簡單,只是一門工具而已,我勸你最好學會,將來肯定用得着,要不你以後也得學,你一點彙編都不會根本無所謂,但你一點C語言都不會那你將來會吃苦頭。彙編寫程序代碼效率高,但相對難度較大,而且很羅嗦,尤其是遇到算法方面的問題時,根本是麻煩的不得了,現在單片機的主頻在不斷的提高,我們完全不需要那麼高效率的代碼,因爲有高頻率的時鐘,單片機的ROM也在不斷的提高,足夠裝得下你用C語言寫的任何代碼,C語言的資料又多又好找,將來可移植性非常好,只需要變一個IO口寫個溫度傳感器的程序在哪裏都能用,所以我勸大家用C語言。總結上面,只要你有信心,做事能堅持到底,有不成功不放棄的強烈意志,那學個單片機來說就是件非常容 易的事。

步驟:

1.找本書大概瞭解一下單片機結構,大概瞭解就行。不用都看懂的。

2.找學習板練習編寫程序,學單片機就是練編程序,遇到不會的再問人或查書。

3.自己網上找些小電路類的資料練習設計外圍電路。焊好後自己調試,熟悉過程。

4.自己完全設計具有個人風格的電路,產品,。。。你已經是高手了

^_^。 。。。。

學習單片機的八大步驟

學習使用單片機就是理解單片機硬件結構,以及內部資源的應用,在彙編或C語言中學會各種功能的初始化設置,以及實現各種功能的程序編制。

第一步:數字I/O的使用

使用按鈕輸入信號,發光二極管顯示輸出電平,就可以學習引腳的數字I/O功能,在按下某個按鈕後,某發光二極管發亮,這就是數字電路中組合邏輯的功能,雖然很簡單,但是可以學習一般的單片機編程思想,例如,必須設置很多寄存器對引腳進行初始化處理,才能使引腳具備有數字輸入和輸出輸出功能。每使用單片機的一個功能,就要對控制該功能的寄存器進行設置,這就是單片機編程的特點,千萬不要怕麻煩,所有的單片機都是這樣。   第二步:定時器的使用

學會定時器的使用,就可以用單片機實現時序電路,時序電路的功能是強大的,在工業、家用電氣設備的控制中有很多應用,例如,可以用單片機實現一個具有一個按鈕的樓道燈開關,該開關在按鈕按下一次後,燈亮3分鐘後自動滅,當按鈕連續按下兩次後,燈常亮不滅,當按鈕按下時間超過2s,則燈滅。數字集成電路可以實現時序電路,可編程邏輯器件(PLD)可以實現時序電路,可編程控制器(PLC)也可以實現時序電路,但是隻有單片機實現起來最簡單,成本最低。定時器的使用是非常重要的,邏輯加時間控制是單片機使用的基礎。   第三步:中斷

單片機的特點是一段程序反覆執行,程序中的每個指令的執行都需要一定的執行時間,如果程序沒有執行到某指令,則該指令的動作就不會發生,這樣就會耽誤很多快速發生的事情,例如,按鈕按下時的下降沿。要使單片機在程序正常運行過程中,對快速動作做出反應,就必須使用單片機的中斷功能,該功能就是在快速動作發生後,單片機中斷正常運行的程序,處理快速發生的動作,處理完成後,在返回執行正常的程序。中斷功能使用中的困難是需要精確地知道什麼時候不允許中斷髮生(屏蔽中斷)、什麼時候允許中斷髮生(開中斷),需要設置哪些寄存器才能使某種中斷起作用,中斷開始時,程序應該幹什麼,中斷完成後,程序應該幹什麼等等 。

中斷學會後,就可以編制更復雜結構的程序,這樣的程序可以幹着一件事,監視着一件事,一旦監視的事情發生,就中斷正在乾的事情,處理監視的事情,當然也可以監視多個事情,形象的比喻,中斷功能使單片機具有吃着碗裏的,看着鍋裏的功能。 以上三步學會,就相當於降龍十八掌武功,會了三掌了,可以勉強護身。

第四步:與PC機進行RS232通信

單片機都有USART接口,特別是MSP430系列中很多型號,都具有兩個USART接口。USART接口不能直接與PC機的RS232接口連接,它們之間的邏輯電平不同,需要使用一個MAX3232芯片進行電平轉換。

USART接口的使用是非常重要的,通過該接口,可以使單片機與PC機之間交換信息,雖然RS232通信並不先進,但是對於接口的學習是非常重要的。正確使用USART接口,需要學習通信協議,PC機的RS232接口編程等等知識。試想,單片機實驗板上的數據顯示在PC機監視器上,而PC機的鍵盤信號可以在單片機實驗板上得到顯示,將是多麼有意思的事情啊!

第五步:學會A/D轉換

MAP430單片機帶有多通道12位A/D轉換器,通過這些A/D轉換器可以使單片機操作模擬量,顯示和檢測電壓、電流等信號。學習時注意模擬地與數字地、參考電壓、採樣時間,轉換速率,轉換誤差等概念。使用A/D轉換功能的簡單的例子是設計一個電壓表。   第六步:學會PCI、I2C接口和液晶顯示器接口

這些接口的使用可以使單片機更容易連接外部設備,在擴展單片機功能方面非常重要。   第七步:學會比較、捕捉、PWM功能

這些功能可以使單片機能夠控制電機,檢測轉速信號,實現電機調速器等控制起功能。   如果以上七步都學會,就可以設計一般的應用系統,相當於學會十招降龍十八掌,可以出手攻擊了。

第八步:學習USB接口、TCP/IP接口、各種工業總線的硬件與軟件設計

學習USB接口、TCP/IP接口、各種工業總線的硬件與軟件設計是非常重要的,因爲這是當前產品開發的發展方向。

三、電子電路設計之C51單片機常見問題

筆者在工作中實際使用過AT89C2051、AT89C51、AT89C52等51單片機,後來應用臺灣新茂、華邦等廠家的51單片機。實踐中遇到許多問題,都是書本上沒有的。我印象中,書本上的知識只有一頁插圖了,就是cpu的時序圖。最初直接用匯編寫程序,然後是C51嵌套匯編。編譯器曾用偉福系列編譯器,後來使用keil等,感覺這些編譯器大同小異。需要熟練的C語言基礎,加上單片機應用的特殊性。

本文就51單片機應用中一些常見問題作個總結,這都是我實際碰到過的,因爲文章篇幅所限,這些問題遠遠不足以表達單片機的常見問題。希望對初學者有所幫助,文中不完善的地方務請指點。謝謝!

1:C51編譯器如何區分位地址和字節地址

c:上面的語句,執行順序是把0x11給R7,然後跳轉子程序,子程序將它加1後送回。   d:函數跳轉到彙編程序時,本區的R0-R7,A,B,PSW,DPTR等寄存器可以供子程序使用,不必考慮調用後是否要恢復這些常規資源。上例中,A的值被函數使用了,編程者不必恢復調用前的值。

3:51單片機的P0口特殊之處

許多新手都碰到這個問題,其實很簡單,這涉及到芯片的io腳是怎麼做出來的。這對硬件工程師來說十分重要。TTL的io腳模型:


P1,P2,P3口都可以理解成左圖,注意vcc下面有個電阻,因此可以理解成:引腳輸出1的能力弱。地那邊沒有電阻,可以理解成引腳吸入電流能力強。而P0口,可以理解成右圖。這就是集電極開路輸出,也叫OC輸出。可以看出,當CTR=1時,三極管導通,引腳被接地;當ctr=0時,三極管截止,引腳浮空,也叫三態。這個端口這麼做的目的是考慮P0口肩負讀寫數據和地址複用,這個關係要仔細看懂cpu時序圖。因此,P0口要加合適的上拉電阻,絕不要加下拉電阻。上拉電阻的選擇要看外部負載情況。

4:P1-3口如何輸入輸出

從上節的左圖可以看出。做輸出時,ctr=1則輸出強信號0,ctr=0則輸出弱信號1。當io腳做輸入時,應使ctr=0,這樣三極管截止。外部信號如果是1,則上拉電阻加強了這個1,單片機就會讀到1。當外部信號爲0時,注意,必須將上拉電阻的上拉作用全部抵消,才能在引腳上得到0。

因此,對於程序來說,把io腳置1就處於接收狀態,當然也是輸出1狀態。程序置io口爲1,讀取的信號是不是1就依靠外部電路了,如果外部電路沒有“吃掉”上拉電阻的電流,則讀取得到1,反之,雖然程序置io腳爲1,但是讀取得到的就是0。

因此,如果用io腳的高電平驅動外部電路時,要小心外部電路把這個1“吃掉”從而輸出不了1。而作爲輸入時,爲0電平的外設必須足夠有能力將io腳拉低。所以,用io

直接點亮led的時候,最好用反邏輯,就是輸出0,讓led亮。這樣能保證驅動能力。就是io腳接led的負端,led的正端過電阻接vcc。

因此,io腳輸出1時,外部電路將它強行接地是沒有關係的,而io腳輸出0的時候,外部電路強行接電源就會把io腳損壞。所以,程序加電之後,一般把所有io口都寫成1:MOV P0,0FFH。

P3口引腳複用,必須引腳都處於輸出1狀態。例如,把RXD腳輸出0,則它什麼數據都讀不進來了,筆者早期曾調試一整天才發現串口收不到數據是沒有把RXD置1的原因,把時間都浪費在外圍了,當時很是汗顏。

5:有關晶振

單片機的晶振在內部可以簡化成一個反向器。當晶振輸入腳XI剛過坎壓、被認爲是1的一瞬間,輸出腳XO就輸出0,這個0會帶動晶振使XI電壓下降,當降低到坎壓被認爲是0的一瞬間,輸出腳XO就輸出1。這樣周而復始。

因此,用示波器觀察正常工作的晶振輸入腳XI時,得到的是一個不高不低的近似水平線。而XO則是幅值很大的正弦波。測量晶振輸入腳XI時,示波器表筆要打在X10檔上,否則,表筆就能把晶振弄停。

因此佈線時,晶振輸入腳XI要儘量靠近晶振,而XO腳可稍遠。同時XO具有一定的驅動能力,某些芯片可以用它驅動其它時序電路(不推薦這麼做,因爲系統可靠性下降)。   寫到這裏,才發覺51單片機的問題太多了,這篇文字簡直就是滄海一粟。以後再補充吧,另行成文。

四、單片機經驗之談

一、前言

很多單片機初學者在與我交流的時候總是的一句話是我現在是單片機初學者,我怎樣才能更快的學好單片機,學習單片機有市場不,對於這個問題現在就我自己如何學單片機,如何入門,如何熟練,整個過程談談自己的想法。先說說單片機,現在用的比較多的的MCS-51的單片機(但是考慮到成本及引腳資源在實際開發中用的單片機型號不一),它的學習資料非常多,且學習成本非常低,如果你聽說企業裏用的是什麼什麼芯片,但是不知道,你問過沒有,那個仿真器需要多少錢,51單片機對於智能控制入門來說是非常好的,一線下載程序,ARM太神祕,PLC太高貴,想來想去還是51。那怎樣才能更快更好的學好單片機呢?單片機這門課是一項非常重視動手實踐的科目,而且單片機也是一門集計算機編程與電子技術爲一身的學科,如果你是單片機高手,那麼說明你也是計算機編程和電子技術高手。

二、學習單片機時候一定要看書

不能總是看書,但是學習它首先必須得看書,那這不很矛盾。因爲從書中你需要大概瞭解單片機各個功能寄存器(比如引腳控制寄存器、定時、中斷、串口相關寄存器),控制單片機的核心是用程序去控制單片機的各個功能寄存器,給寄存器賦值二進制數據0或者1,這樣一來對於引腳寄存器單片機可以根據二進制數據0和1輸出高低電平控制外部設備,對

於內部資源寄存器,單片機也通過二進制數據0和1使用單片機內部的功能。比如單片機引腳寄存器P1,語句P1=0xfe;(MOV P1,#0FEH)。說明現在控制單片機P1口的第一個引腳輸出低電平,其他引腳輸出高電平。比如中斷中斷允許寄存器IE,語句IE=0x81;(MOV IE,#81H) 則說明控制中斷打開總開關和外部中斷0的子開關。至於看書,只需大概瞭解單片機各管腳、各個特殊功能寄存器都是幹什麼的?能實現什麼樣的功能?這個非常重要,這也許是看書的最主要的目的。第一次,第二次你可能看不明白,但這不要緊,因爲還缺少實際的感觀認識。通過接下來的實驗就可以非常感觀的認識,在這個過程一定要花時間,學習程序不能硬背,但是學習寄存器一定要下功夫,理解他的功能所在。推薦一本書,就這一本就足夠了,書名是《例說8051》有彙編語言和C語言版本的,非常強悍的一本書,但是我用一個五一放假的時間看完了這本書,看完後,覺得自己已經是單片機高手了。書中圖文並茂,內容安排緊張有序,並非市面上很多說教的技術文檔式的書,什麼學完概念,學指令,學完指令學接口,學完接口才知道,原來學習單片機是學天書。根據書本的安排循序漸進的看完前兩章,然後一定是實踐,一定是實踐啊,這是非常關鍵的一步,在戰場上上紙上談兵的列子很多,在學習單片機也一樣,很多相關專業的研究生甚至博士生直到畢業都不清楚單片機的IO口的分佈,不知道分佈談何說開發呢?更有一些所謂的單片機高手只停留在編程,以爲了買了一塊高級學習板,練習完了裏面所有的程序,感覺自己排第二沒人敢拍第一,覺得下一步不知道如何學習單片機了。殊不知,他們中的很多人到最後單片機LED的電阻加多大都不清楚更不用說單片機的引腳分佈,你說,如果這樣去開發那不是“草菅人命”啊。不是紙上談兵是什麼啊。

三、學習單片機準備什麼所以啊?

學習單片機看書不夠,實踐也要從實際出發,現在的技術太模塊了,什麼都可以模塊,模塊的到最後,技術人員都成了只會用了,祖先的留下的知識,基礎的知識該知道還是一定要知道的啊。 畢竟學習單片機的最終目的是開發,是通過創造智能控制的實物,體現自己的價值。關於實踐有兩種方法可以選擇一種方法:購買一塊51單片機的實驗板,不要求功能太的,對於初學者來功能非常多的那種板子,上面有很多東西你這輩子都用不着,更有實驗板爲了增加功能,降低成本,實驗板上到處用的是貼片元件,雙面佈線,越複雜就越有水平,好像他們在設計的時候就想着,學習單片機只要根據我的提示下載程序就可以了,更有甚者將下載器和集成了實驗板上。很多初學者學完單片機還認爲,原來單片機不是一塊芯片,是老教材上經常提到的使用已經不到的單板機。我覺得初學單片機有這幾個模塊就夠了,剩下的得自己去開發。流水燈、數碼管、鍵盤、蜂鳴器、串口通訊、AD等這就差不多了。如果上面我提到的這些,你能熟練應用,那可以說對於單片機方面的硬件你已經入門了,剩下的就是自己練習設計電路,不斷的積累經驗。設計的電路的時候必須要學習下PCB板設計軟件,畢竟現在做開發要產品批量化還得電腦輔助設計啊,手工的效率太低了。但是在學習的過程中建議自己動手焊接。在焊接前一定要了解電路連接,網上隨便搜索可以找到很多電路原理圖,但是都不一定都能用,所以建議備一塊麪包板,有了它你在焊接電路前就可以先測試下了。如果在麪包板上測試成功,後來的焊接你就志在必得了,如果失敗,大不了重新再找一個。只要過了第一關,後面的路就好走,萬事起步難。方法二:你身邊如果有單片機入門者,動手能力比較強,請他幫忙,搭個簡單的單片機最下電路,哪怕是控制一個LED工作的電路。對於他們來說,做個單片機的最小系統板是輕而易舉,而對於初學者可就難多,這中間的一層窗戶紙破了就什麼都簡單了。因爲只有對硬件瞭解了,才能熟練運用。只有知道程序是和下載到單片機內部的,纔會清楚爲什麼要寫單片機程序,這個動力來自於哪裏,來至於心裏有底。單片機編程就是與單片機對話,如果不知道對方誰,有沒有再聽,你還會有說話的激情嗎。當然瞭如果沒有這樣的人,還是那句話,在網上多找幾個最小電路電路原理

圖,在麪包板上焊接就可以了。當然了這個也不會的,那建議你一定要買一塊實驗板,以後單片機的學習實驗及項目測試驗都用的上。

四、如何邁入單片機開發世界

有了單片機實驗板你就要多練習,最好是自己有臺電腦,少下載幾部電影,少網絡遊戲,把實驗板和電腦連好,安裝上必備的軟件,下載參考程序,並修改參考程序,從最簡單的交通燈實驗做起,等你發現你能控制交通燈,並瞭解交通的軟硬設計的時候你已經入門了,你會發現單片機是多麼迷人的東西啊,這不是在學習知識,而是在提升自我的價值。用途那麼廣的交通的設計都不在話下了,你還會覺得你沒有學到東西嗎。還會覺得自己什麼都不會嗎?計算機編程、電子技術的專業知識都用上了啊。

當你編寫的程序按你的意願實現時,你比做什麼事都開心,那種學習的收穫感和成就感還有充實感是非常難得的。然後讓數碼管亮起來顯示你所需要的數字。這兩部分會了以後,你已經不能自拔了,你已經開始考慮你這輩子要走哪一行了。就這樣學習,在寫程序的時候你肯定會遇到很多問題,而這時你再去翻書找,這其中你會找你之前學過的編程的書,還有數電模電的書,你會發現原來之前學的知識還是有用的。遇到不懂再去找以前學過的書本查閱這纔是 “溫故而知新,可以爲師矣”的大道理啊。

知識必須用於現實生活中,解決實際問題,用單片機設計個簡易的家電定時器、紅外遙控器什麼,這樣才能發揮它的作用,好好想想,上了這麼多年大學,探索了那麼久,猶豫徘徊,天天上課,在課堂上學到了什麼?是不是爲了期末60分的考試而忙碌,僥倖靠了90分,很高興啊,在別人面前吹自己專業知識如何如何學習的好,殊不知,大學考試不像高中考試啊,那了獎學金又怎樣。但是下學期開學回來一想,所學的知識已經忘記的一乾二淨。學到什麼了?爲什麼要推薦學習單片機,因爲單片機是工科生學的,集合計算機編程電子技術及多門控制語言爲一體的學科,與其說學習是在學習單片機,不如說是在學習一個大學科。

五、學習單片機是彙編編程還是C語言編程 關於用匯編和C語言編程的問題。這個問題困惱很多人,可能主要是學校教學和部分教材的教育引導引起的吧,大一開了C語言編程,沒等學生知道到底C語言有什麼實際的用途,馬上其他的語言一起來過來了。即使是開始了專門的單片機課程,但是課程的內容與技術文檔很相識,指令很多,但是完整的不多,所以學完了也不知道,到底爲什麼要學習編程。很多同學大一就開設了C語言的課,我也上過,但是那時候就是天天幾乘幾,幾加幾啊,求個階乘啊,用C語言去解決小學數學問題,每週兩次上機,對着書本不停的敲打,下課了也不知道自己到底掌握了什麼,掌握了這個有什麼用途。學完了有什麼用?如果在面試的時候,老闆問,你學過編程嗎,你腦子裏馬上是什麼“C語言,VC什麼VB。很多,什麼C語言是基礎是面向工程的,什麼VC是高級面向對象的”,但是老闆又問,你能將你所學習的C語言應用到實際中不,比如設計一個定時報警器的C語言。這下傻了,學校裏沒有學過啊。

單片機編程用C語言或彙編語言都可以,但是我建議用C語言比較好,模塊化管理編程方便,移植性強,適合編寫大程序。如果原來有C語言的基礎那學起來會更好,如果沒有,也可以邊學單片機邊學C語言。雖然很多人是從彙編語言開始接觸單片機的,但是寫小程序彙編語言還是簡單的,如果要實現一些算法,那彙編語言就不簡單了。雖說C語言編譯以後代碼量明顯比彙編長,而且執行效率也沒有彙編語言高,但是在以前單片機開發中芯片工藝的限制,及單片機主頻的限制,很多單片機內部存儲器小的可伶,主頻也小得可伶。但是現在不一樣了,芯片內部的存儲器根不不在乎這點差別。主頻也越來越高。

那彙編語言是不是不學了呢?不是的,一定要學習,有兩方面首先入門單片機的時候要用彙編語言,它的語法簡單。第二如果你要做單片機的程序的高級設計師,那彙編語言是非掌握不可的,很多像高級單片機ARM都是彙編語言作爲引導代碼的,還有就是很多新出品的單片機起先也是先有彙編語言編譯器之後纔有C語言編譯器。所以,我覺得對於單片機學習彙編語言入門,C語言精通,彙編語言再精通。最後,對於單片機的學習,入門爲先,入門了以後就要去關注市場,關注企業,企業需要什麼樣的人才,我想有了基礎以後在面試之前瞭解下企業所需要的單片機類型,很快就上手了,畢竟學習是相同的。

轉載自:http://www.doczj.com/doc/e1dff2f5c8d376eeaeaa31f7.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章