① 單片機學習的建議,初學者的我
樓主,
單片機的定義:
就是相當於電腦CPU的簡化版。根據CORE(內核)可分為:
如8051內核稱為51系列單片機;
如arm7內核稱為ARM7系列單片機;
如arm920T.940T/926內核稱為ARM9系列單片機;
因為現在所有8/16/32位(51系列,MSP430系列,ARM系列;
此外還有MSP430和AVR、PLC等
學習方法:
1,你首先要學習C語言基礎,就相當於80%會單片機了,因為現在所有8/16/32位(51系列,MSP430系列,ARM系列)都是使用C語言。
2,先看內核8051的單片機:台灣宏晶的STC89C51-DIP40/或其它如新茂,到網上買一個開發板,價格不會超過200元。
3,看一下單片機功能:包換內部FLASH、RAM、TIMER、INT、ADC、USB、ISP/IAR等。
4,編譯環境、編程軟體KEIL。
5,打開開發板的例子程序,在KEIL編譯,下載到板,看結果和說明是不是相符,達到這樣效果時,你心裡肯定很激動,這時你真正學會了單片機,你成功了!!!!!。
6,單片機C語言舉例:
sbit SPEAK = P1^5; //IO口定義為蜂鳴器控制
如果蜂鳴器正極接電源,SPEAK =0;蜂鳴器就會響,你看就是這么簡單。
unsiggne char temp;//定義TEMP為單位元組變數。
sfr PORTA P1;//將P1口定義為PORTA
7,當你過渡到ARM時,你就要學習LINUX和WINCE這兩個最基本的操作系統運用在單片機上。
8,同樣的理,你也要買ARM2410/2440為代表的開發板,慢慢按照說明書一步一步地操作,練習,不停地做實驗,就學會。
9,當然,你得打一份工作,關於我上所說的,開始工資不要要求太高,等你做完幾個項目後,你真正學會了,才跟老闆或上司提,這樣繼續或或另尋高就才有資本。
10,你也抽點時間看看《郭天祥十天學會單片機和c語言編》一書,鞏固一下理論知識。
總結:多做開發板上的實驗,你要多參與這樣的項目開發,慢慢就會了。
② 單片機應用設計中提高系統可靠性的措施有哪些
這個問題太籠統,這個需要具體問題具體分析。多的就不說,以我的經驗和一般情況說下面幾點。
1、中斷問題。
中斷函數要寫得盡量短,而且要保證是順序執行,一定不能在中斷中有等待的語句,比如在中斷函數中要等待某個標識位置位while(Flag == 0);之類的語句是不可取的,因為會在中斷中執行的時間過長導致長時間不能進入別的中斷,程序會跑飛現象。
2、敏感代碼問題。
可能某些代碼的地方,我們不希望執行某部分代碼過程被中斷給打斷,那麼我們會在執行該部分代碼時禁止中斷,執行完畢後再開啟中斷。那麼必須要保證該部分代碼執行的時間要盡可能的短,保證短到什麼程度由CPU特性決定。
3、阻塞問題。
如果應用比較大,要實現的功能和執行的任務很多,那麼程序中盡量避免使用等待阻塞之類的語句,如while()判斷標識位的語句,最好是用if()語句判斷,如果if()條件不成立會接著往後執行,看有沒有別的事情做,如果沒有則再返回接著進行if判斷。
4、中斷優先順序問題。
有些CPU支持中斷嵌套,而有些CPU不支持中斷嵌套,不管CPU支不支持中斷嵌套,要合理安排中斷優先順序關系,比如51單片機中使用定時器中斷刷新LED(或LCD)顯示,同時串口中斷接收數據,默認狀態下定時器比串口中斷優先順序更高,那麼最好把串口中斷優先順序設置得比定時器更高更保險一些,相比之下漏掉一個串口數據比少刷新一次LED(或LCD)後果更嚴重。
5、代碼框架結構問題。
其實這才是最核心的問題,如果你的CPU要實現很龐大的功能,如CPU要完成串口收發、I2C數據存儲、LCD顯示、Flash讀寫、USB介面通訊、按鍵識別、IO口電平監測等等等等的功能,那麼自己直接裸機寫程序那是不太現實的,必須要選擇移植一個成熟的代碼架構或操作系統,如選擇狀態機代碼架構,操作系統如uCos、eCos、RT-thread等等。這種方法對CPU的處理速度、Flash空間、RAM空間的需求是挺高的,如果是51、52之類的單片機那就不要考慮算了。51、52之類的單片機那就根據自己的需要自己設計一個簡單的代碼架構即可。
③ 單片機開發要注意什麼
一、 如何提高C語言編程代碼的效率
鄧宏傑指出,用C語言進行單片機程序設計是單片機開發與應用的必然趨勢。他強調:「如果使用C編程時,要達到最高的效率,最好熟悉所使用的C編譯器。先試驗一下每條C語言編譯以後對應的匯編語言的語句行數,這樣就可以很明確的知道效率。在今後編程的時候,使用編譯效率最高的語句。」
他指出,各家的C編譯器都會有一定的差異,故編譯效率也會有所不同,優秀的嵌入式系統C編譯器代碼長度和執行時間僅比以匯編語言編寫的同樣功能程度長5-20%。他說:「對於復雜而開發時間緊的項目時,可以採用C語言,但前提是要求你對該MCU系統的C語言和C編譯器非常熟悉,特別要注意該C編譯系統所能支持的數據類型和演算法。雖然C語言是最普遍的一種高級語言,但由於不同的MCU廠家其C語言編譯系統是有所差別的,特別是在一些特殊功能模塊的操作上。所以如果對這些特性不了解,那麼調試起來問題就會很多,反而導致執行效率低於匯編語言。」
二、 如何減少程序中的bug?
對於如何減少程序的bug,鄧宏傑給出了一些建議,他指出系統運行中應考慮的超范圍管理參數有:
1.物理參數。這些參數主要是系統的輸入參數,它包括激勵參數、採集處理中的運行參數和處理結束的結果參數。合理設定這些邊界,將超出邊界的參數都視為非正常激勵或非正常回應進行出錯處理。
2.資源參數。這些參數主要是系統中的電路、器件、功能單元的資源,如記憶體容量、存儲單元長度、堆疊深度。在程式設計中,對資源參數不允許超范圍使用。
3.應用參數。這些應用參數常表現為一些單片機、功能單元的應用條件。如E2PROM的擦寫次數與資料存儲時間等應用參數界限。
4.過程參數。指系統運行中的有序變化的參數。
三、如何解決單片機的抗干擾性問題
鄧宏傑指出:防止干擾最有效的方法是去除干擾源、隔斷干擾路徑,但往往很難做到,所以只能看單片機抗干擾能力夠不夠強了。單片機干擾最常見的現象就是復位;至於程序跑飛,其實也可以用軟體陷阱和看門狗將程序拉回到復位狀態;所以單片機軟體抗干 擾最重要的是處理好復位狀態.一般單片機都會有一些標志寄存器,可以用來判斷復位原因;另外你也可以自己在RAM中埋一些標志。在每次程序復位時,通過判斷這些標志,可以判斷出不同的復位原因;還可以根據不同的標志直接跳到相應的程序。這樣可以使程序運行有連續性,用戶在使用時也不會察覺到程序被重新復位過。
四、 如何測試單片機系統的可靠性
有讀者希望了解用用什麼方法來測試單片機系統的可靠性,鄧宏傑指出:「當一個單片機系統設計完成,對於不同的單片機系統產品會有不同的測試項目和方法,但是有一些是必須測試的:
1.測試單片機軟體功能的完善性。這是針對所有單片機系統功能的測試,測試軟體是否寫的正確完整。
2.上電、掉電測試。在使用中用戶必然會遇到上電和掉電的情況,可以進行多次開關電源,測試單片機系統的可靠性。
3.老化測試。測試長時間工作情況下,單片機系統的可靠性。必要的話可以放置在高溫,高壓以及強電磁干擾的環境下測試。
4、ESD和EFT等測試。可以使用各種干擾模擬器來測試單片機系統的可靠性。例如使用靜電模擬器測試單片機系統的抗靜電ESD能力;使用突波雜訊模擬器進行快速脈沖抗干擾EFT測試等等。
鄧宏傑強調:「還可以模擬人為使用中,可能發生的破壞情況。例如用人體或者衣服織物故意摩擦單片機系統的接觸埠,由此測試抗靜電的能力。用大功率電鑽靠近單片機系統工作,由此測試抗電磁干擾能力等。」
④ 51單片機系統的不足之處及進一步改進措施能具體地列舉幾個不足點及其解決措施嗎
相對於早期的51單片機,如今增強型的晶元包括速度、功能都有了大幅度的提升,甚至已經出現了單時鍾周期指令的51晶元,與其它非51核單片機相比並無明顯差異,雖說許多非51核晶元理論上速度快些,但精簡指令集從某種意義上講,還不如51單片機來得簡潔。從程序匯編的角度講,51單片機易讀性更強。所以我反而覺得,在功能和速度相同的情況下,非51核的單片機在指令系統方面倒有必要進行提升。本人拙見僅供參考
⑤ 單片機高手們給個建議
以下,是我回答另一位單片機初學者的問題,可能不全針對你的問題,但是,提供的是一種思路,希望你能從我的回答中提取到一種學習單片機的思路,而不僅僅在表象:
,一個資深的高級單片機工程師,也不能完全記住液晶,模數數模轉換,液晶借口,IIC匯流排,但是這不影響他們成為高級單片機工程師.
因為他們明白了,受人之魚,不如受人之漁.
他們不用記住具體的某個單片機的個AD怎麼編寫,因為每個單片機的AD可能不一樣,比如,今天你學會了STC51的AD,以後讓你做AVR的怎麼辦?所以,一個單片機工程師所要做到的是,給你一個單片機,你能迅速找到單片機的資料,你想用哪個功能,就去看這個功能外設的寄存器,瞭然於胸之後,就能寫出具體的底層.
他們也不用記住液晶介面怎麼寫,因為今天你可能是這種電路,明天又是另一種電路,他們要做的,是知道這種的液晶的時序是什麼,或者是控制晶元是什麼,然後根據PDF資料寫出程序.
所以,你要做的是,不要完全按照書上寫的實驗,你在寫過一次之後,要回過頭去看你的單片機資料,去看你的液晶資料,去看IIC匯流排的時序,然後憑借這些資料給你提供的信息,完全摒棄開發板的資料,自己從0做起,開發一次,只有這樣,你才能真正掌握單片機的內含.
有個領導曾經說過,別人咀嚼過的饃饃沒味道,所以你要自己做到了解單片機,了解你的外設,了解一些匯流排的時序,然後根據這些自己開發,這樣,你才會遇到很多的困難,才能在困難中成長起來.
按照書上寫的去做,也許你思考了,但是,同時,你也失去了犯錯的機會,要知道,對於初學者,能犯些錯誤是很可貴的.
所以,針對你提出的問題,我發表一下我的見解:
我建議你,自己去做個簡單的板子,買點元件,自己來做,現在的元件,板子等等成本也不是非常的貴,大概300左右能做一塊不錯的板子,當然,比買現成的開發板是貴的,但是,你從做電路,自己寫程序這一過程中所收獲的東西,也是比你買現成開發板學習中要多的,因為你會有自己的思考,而不在有依賴性,因為你會在開發的過程中,犯一些錯誤,這將加深你的印象.
所以,我贊成你的想法.
另外,我不建議你去搜羅網上給出的什麼原理圖,你要學會自己設計原理圖,自己寫程序,當然,這一過程會很慢,但是,你能從中學習到很多很多的東西.借鑒別人的東西,你得到的最多的是印象,而自己設計過程中,你得到的是本質.
⑥ 一個老工程師給單片機初學者的幾點建議
這個搜一下啊就能找到。
在錯誤的道路上日夜兼程,最終也無法成功。所有,方法和思路絕對是第一重要的。一些學技術的同學,往往看到這類章節會直接跳過去,因為大多數類似章節都是廢話連篇。但是,今天在這里我可以很負責任的告訴你,本章節講到的學習單片機的方法,都是我們學習單片機的無數經驗和教訓總結出來的瑰寶。因為我們披荊斬棘,開辟了道路,所以可以告訴你路在何方;也因為我們摸過燒紅的鐵塊,燙了手,所以可以把教訓告訴你。希望各位都能站在我們的肩膀上,成為巨人。
注意事項
在錯誤的道路上日夜兼程,最終也無法成功。因此,方法和思路絕對是第一重要的。
⑦ 談談對單片機課程的理解認識意見和建議
單片機又稱單片微控制器,它不是完成某一個邏輯功能的晶元,而是把一個計算機系統集成到一個晶元上。
概括的講:一塊晶元就成了一台計算機。它的體積小、質量輕、價格便宜、為學習、應用和開發提供了便利條件。同時,學習使用單片機是了解計算機原理與結構的最佳選擇。
單片機內部也用和電腦功能類似的模塊,比如CPU,內存,並行匯流排,還有和硬碟作用相同的存儲器件,不同的是它的這些部件性能都相對我們的家用電腦弱很多,不過價錢也是低的,一般不超過10元即可......用它來做一些控制電器一類不是很復雜的工作足矣了。我們現在用的全自動滾筒洗衣機、排煙罩、VCD等等的家電裡面都可以看到它的身影!......它主要是作為控制部分的核心部件。 它是一種在線式實時控制計算機,在線式就是現場控制,需要的是有較強的抗干擾能力,較低的成本,這也是和離線式計算機的(比如家用PC)的主要區別。
單片機是靠程序的,並且可以修改。通過不同的程序實現不同的功能,尤其是特殊的獨特的一些功能,這是別的器件需要費很大力氣才能做到的,有些則是花大力氣也很難做到的。
一個不是很復雜的功能要是用美國50年代開發的74系列,或者60年代的CD4000系列這些純硬體來搞定的話,電路一定是一塊大PCB板!但是如果要是用美國70年代成功投放市場的系列單片機,結果就會有天壤之別!只因為單片機的通過你編寫的程序可以實現高智能,高效率,以及高可靠性!
由於單片機對成本是敏感的,所以目前占統治地位的軟體還是最低級匯編語言,它是除了二進制機器碼以上最低級的語言了,既然這么低級為什麼還要用呢?很多高級的語言已經達到了可視化編程的水平為什麼不用呢?原因很簡單,就是單片機沒有家用計算機那樣的CPU,也沒有像硬碟那樣的海量存儲設備。
一個可視化高級語言編寫的小程序裡面即使只有一個按鈕,也會達到幾十K的尺寸!對於家用PC的硬碟來講沒什麼,可是對於單片機來講是不能接受的。 單片機在硬體資源方面的利用率必須很高才行,所以匯編雖然原始卻還是在大量使用。
一樣的道理,如果把巨型計算機上的操作系統和應用軟體拿到家用PC上來運行,家用PC的也是承受不了的。 可以說,二十世紀跨越了三個「電」的時代,即電氣時代、電子時代和現已進入的電腦時代。
不過,這種電腦,通常是指個人計算機,簡稱PC機。它由主機、鍵盤、顯示器等組成。還有一類計算機,大多數人卻不怎麼熟悉。這種計算機就是把智能賦予各種機械的單片機(亦稱微控制器)。顧名思義,這種計算機的最小系統只用了一片集成電路,即可進行簡單運算和控制。因為它體積小,通常都藏在被控機械的「肚子」里。
它在整個裝置中,起著有如人類頭腦的作用,它出了毛病,整個裝置就癱瘓了。現在,這種單片機的使用領域已十分廣泛,如智能儀表、實時工控、通訊設備、導航系統、家用電器等。
各種產品一旦用上了單片機,就能起到使產品升級換代的功效,常在產品名稱前冠以形容詞——「智能型」,如智能型洗衣機等。
現在有些工廠的技術人員或其它業余電子開發者搞出來的某些產品,不是電路太復雜,就是功能太簡單且極易被仿製。究其原因,可能就卡在產品未使用單片機或其它可編程邏輯器件上。
⑧ 單片機實驗注意事項
單片機開發規則與注意事項
隨著大規模集成電路技術的發展,單片微型計算機也隨之大發展,各種新穎的單片機層出不窮。單片機具有體積小、重量輕、應用靈活且價格低廉等特點,廣泛地應用於人類生活的各個領域,成為當今科學技術現代化不可缺少的重要工具。
單片機系統的開發融合了硬體和軟體的相關技術。要完成單片機系統的開發,用戶不僅需要掌握編程技術,還需要針對實際應用選擇合理的單片機晶元和外圍器件,以此為基礎,設計硬體電路。
正確估計單片機的能力,知道單片機能做什麼,最大程度的挖掘單片機的潛力對一個單片機系統設計者來說是至關重要的。單片機的能力的關鍵就在軟體設計者編寫的軟體上。只有充分地了解到單片機的能力,才不會做出「冗餘」的系統設計。而採用許多的外圍晶元來實現單片機能實現的功能。這樣做,即增加了系統成本,也可能會降低了系統的可靠性。
要完成單片機系統的開發,用戶不僅需要掌握編程技術,還需要針對實際應用選擇合理的單片機晶元和外圍器件,以此為基礎,設計硬體電路。
單片機開發規則與注意事項
設計滿足要求的最精簡的系統
正確估計單片機的能力,知道單片機能做什麼,最大程度的挖掘單片機的潛力對一個單片機系統設計者來說是至關重要的。單片機的能力的關鍵就在軟體設計者編寫的軟體上。只有充分地了解到單片機的能力,才不會做出「冗餘」的系統設計。而採用許多的外圍晶元來實現單片機能實現的功能。這樣做,即增加了系統成本,也可能會降低了系統的可靠性。
看門狗電路通常是一塊在有規律的時間間隔中進行更新的硬體。更新一般由單片機來完成,如果在一定間隔內沒能更新看門狗,那看門狗將產生復位信號,重新復位單片機。更新看門狗的具體形式多是給看門狗晶元相關引腳提供一個電平上升沿或讀寫它的某個寄存器。使用看門狗電路將在單片機發生故障進行死機狀態時,重新復位單片機,像EN8F154本身就帶有看門狗。
確定系統的復位信號可靠
一般在單片機的數據手冊(Datasheet)中都會提到該單片機需要的復位信號的要求。一般復位信號的寬度應為。復位電平的寬度和幅度都應滿足晶元的要求,並且要求保持穩定。還有特別重要的一點就是復位電平應與電源上電在同一時刻發生,即晶元一上電,復位信號就已產生。不然,由於沒有經過復位,單片機中的寄存器的值為隨機值,上電時就會按PC寄存器中的隨機內容開始運行程序,這樣很容易進行誤操作或進入死機狀態。
確定系統的初始化有效
系統中的晶元以及器件從上電開始到正常工作的狀態往往有一段時間,程序開始時延時一段時間,是讓系統中所有器件到達正常工作狀態。究竟延時多少才算合適?這取決於系統的各晶元中到達正常工作狀態的時間,通常以最慢的為准。一般來說,EN8F154的延時20-100毫秒已經足夠。對於系統中使用嵌入式MODEM等「慢熱」型的器件來說,則應更長。當然,這都需要在系統實際運行中進行調整。
當然,模擬是單片機開發過程中非常重要的一個環節,除了一些極簡單的任務,一般產品開發過程中都要進行模擬,模擬的主要目的是進行軟體調試,當然藉助模擬機,也能進行一些硬體排錯。一塊單片機應用電路板包括單片機部份及為達到使用目的而設計的應用電路,模擬就是利用模擬機來代替應用電路板(稱目標機)的單片機部份,對應用電路部份進行測試、調試。模擬有CPU模擬和ROM模擬兩種,所謂CPU模擬是指用模擬機代替目標機的CPU,由模擬機向目標機的應用電路部份供給各種信號、數據,進行調試的辦法。
⑨ 單片機項目實踐中會遇到那些問題,怎麼解決呢
初用單片機注意的幾個問題
1:時間處理的建議:
單片機處理的最多的事情是時間問題.每個模塊,建議用時間去管控,在每段程序的入口處給一個時間監測的標志,一定的時間到才放行.這樣處理可以提高系統的時效性,對系統各個模塊進行時效性安排.需要及時處理的事情可以將時效級別提高,即在同一段時間內循環進入該程序段查詢的次數會多,分配的時間多.然後看門狗只在主程序循環.
⑩ 如何提高單片機,
單片機控制大部分是面向硬體的,關於這些物理硬體的控制,最重要的就是調節速度和精度,表現在單片機內部演算法上,我認為就是時間和空間的合理運用,而這些對演算法的要求是什麼呢,或者說作為單片機開發者來說,應該怎麼樣考慮自己的單片機程序呢?
第一,程序結構
我知道你肯定不會想去仔細研究數據結構,那太抽象了。在這里我直接告訴你,基於「狀態機」的程序結構更加適合單片機,確切的說是有限狀態機。狀態機編程技術將直接促使你解決程序的時間問題,並且程序結構可大可小,普通狀態機和層次式狀態機能讓你對絕大多數項目手到擒來。當然狀態機編程技術也是需要學習的,但這比你直接去學數據結構要輕松的多。
第二,使用適合的演算法
我們編程時要明白一個道理,再多復雜的演算法也不能證明你的程序是一個好程序,那什麼才是呢?是簡潔明了和可靠穩定。大道至簡放在編程上不是一句空話,同樣一個冒泡排序演算法,有的人寫出來死板的很,有的人卻能獨具效率,這是對演算法的理解高度不同。我認為與其學習更為復雜的控制演算法,不如加深自己對現有演算法的理解。通樣的PID演算法程序,有的人能加上積分分離,有的人能用上環境自適應,這裡面差別不可謂不大啊。
最後希望你能早日從自己的工作中形成自己獨到的理解,精益求精。