❶ 51單片機的優缺點
一、51單片機
應用最廣泛的8位單片機當然也是初學者們最容易上手學習的單片機,最早由Intel推出,由於其典型的結構和完善的匯流排專用寄存器的集中管理,眾多的邏輯位操作功能及面向控制的豐富的指令系統,堪稱為一代「經典」,為以後的其它單片機的發展奠定了基礎。
51單片機之所以成為經典,成為易上手的單片機主要有以下特點:
特性
1、從內部的硬體到軟體有一套完整的按位操作系統,稱作位處理器,處理對象不是字或位元組而是位。不但能對片內某些特殊功能寄存器的某位進行處理,如傳送、置位、清零、測試等,還能進行位的邏輯運算,其功能十分完備,使用起來得心應手。
2、同時在片內RAM區間還特別開辟了一個雙重功能的地址區間,使用極為靈活,這一功能無疑給使用者提供了極大的方便。
3、乘法和除法指令,這給編程也帶來了便利。很多的八位單片機都不具備乘**能,作乘法時還得編上一段子程序調用,十分不便。
缺點
(雖然是經典但是缺點還是很明顯的)
1、AD、EEPROM等功能需要靠擴展,增加了硬體和軟體負擔
2、雖然I/O腳使用簡單,但高電平時無輸出能力,這也是51系列單片機的最大軟肋
3、運行速度過慢,特別是雙數據指針,如能改進能給編程帶來很大的便利
4、51單片機保護能力很差,很容易燒壞晶元
應用范圍:目前在教學場合和對性能要求不高的場合大量被採用。
使用最多的器件:8051、80C51
❷ 51單片機的四種工作方式
1 工作方式0
定時器/計數器T0工作在方式0時,16位計數器只用了13位,即TH0的高8位和TL0的低5位,組成一個13位定時器/計數器。
1)、工作在定時方式
2)、工作在計數方式
2 工作方式1
定時器T0工作方式1與工作方式0類同,差別在於其中的計數器的位數。工作方式0以13位計數器參與計數,工作方式1則以16位計數器參與計數。
1)、工作在定時方式
2)、工作在計數方式
工作方式1是16位計數器。這是工作方式1與工作方式0在計數方式時唯一差別。
3 工作方式2
定時器T0在工作方式2時,16位的計數器分成了兩個獨立的8位計數器TH0和TL0。
1)、工作在定時方式
2)、工作在計數方式
工作方式2與工作方式0、方式1的差別,在於工作方式2是一個8位的計數器。
4 工作方式3
工作方式3僅對定時器T0有效。當定時器T0工作在方式3時,將16位的計數器分為兩個獨立的8位計數器TH0和TL0。
當定時器T0工作在方式3時,定時器T1隻能工作在方式0~2,並且工作在不需要中斷的場合。
❸ 51單片機 的實際應用有哪些范圍廣嗎
51系列單片機是目前應用最為廣泛的一類微處理器,它以低廉的價格和強大的功能,受到廣大電子設計愛好者和工程師的歡迎。
51系列單片機內部具有豐富的硬體資源,例如定時器/計數器、中斷系統、串列介面,並且它還提供了詳盡的指令操作系統,可以供程序員很方便地進行程序設計。
在51系列單片機的開發過程中,程序設計是重點也是難點。初學者往往很難快速掌握單片機指令的應用、各個功能部件的編程方法及程序設計思路。
由於單片機有許多優點,因此其應用領域之廣,幾乎到了無孔不入的地步。
單片機應用的主要應用領域有:
1)智能化家用電器:各種家用電器普遍採用單片機智能化控制代替傳統的電子線路控制,升級換代,提高檔次。如洗衣機、空調、電視機、錄像機、微波爐、電冰箱、電飯煲以及各種視聽設備等。
2)辦公自動化設備:現代辦公室使用的大量通信和辦公設備多數嵌入了單片機。如列印機、復印機、傳真機、繪圖機、考勤機、電話以及通用計算機中的鍵盤解碼、磁碟驅動等。
3)商業營銷設備:在商業營銷系統中已廣泛使用的電子稱、收款機、條形碼閱讀器、IC卡刷卡機、計程車計價器以及倉儲安全監測系統、商場
保安系統、空氣調節系統、冷凍保險系統等都採用了單片機控制。
4)工業自動化控制:工業自動化控制是最早採用單片機控制的領域之一。如各種測控系統、過程式控制制、機電一體化、PLC等。在化工、建築、冶金等各種工業領域都要用到單片機控制。
5)智能化儀表:採用單片機的智能化儀表大大提升了儀表的檔次,強化了功能。如數據處理和存儲、故障診斷、聯網集控等。
6)智能化通信產品:最突出的是手機,當然手機內的晶元屬專用型單片機。
7)汽車電子產品:現代汽車的集中顯示系統、動力監測控制系統、自動駕駛系統、通信系統和運行監視器(黑匣子)等都離不開單片機。
8)航空航天系統和國防軍事、尖端武器等領域:單片機的應用更是不言而喻。
51單片機在今後的電子產品發展中仍會占據著一席之地。
❹ 基於51單片機的數字電壓表總結與體會
通過與同學的討論與認真計算設計分析所完成的,課程設計的任務是設計、組裝並調試一個數字電壓表測量系統。需要我們綜合運用單片機等課程的知識,通過查閱資料、方案論證與選定;設計和選取電路和元器件;分析指標及討論,完成設計任務。
在這次課程設計中,我學會了怎樣去根據課題的要求去設計電路和調試電路。動手能力得到很大的提高。從中我發現自己並不能很好的熟練去使用我所學到的高頻電路知識。在以後學習中我要加強對使用電路的設計和選用能力。但由於電路比較簡單、定型,而不是真實的生產、科研任務,所以我們基本上能有章可循,完成起來並不困難。把過去熟悉的定型分析、定量計算逐步,元器件選擇等手段結合起來,掌握工程設計的步驟和方法,了解科學實驗的程序和實施方法。這對今後從事技術工作無疑是個很好的訓練。通過這種綜合訓練,我們可以掌握電路設計的基本方法,提高動手組織實驗的基本技能,培養分析解決電路問題的實際本領,為以後畢業設計和從事電子實驗實際工作打下基礎。
還有就是每次在組團做試驗都會感覺特別的充實,我們可以按照自己設計的電路去完成,老師也不是死板的要求我們怎麼怎麼,而是給了我們盡可能大的自己決定的餘地,這次的元器件都是按照我們設計出來的電路參數給定的,而且每位老師都很耐心的為我們解決試驗中所出現的問題,最後真心的感謝老師對我們課程設計的建議和幫助,我們才得以圓滿的完成這次課程設計!
❺ 單片機工作總結
單片機工作總結
總結是對過去一定時期的工作、學習或思想情況進行回顧、分析,並做出客觀評價的書面材料,它可以促使我們思考,因此十分有必須要寫一份總結哦。我們該怎麼去寫總結呢?下面是我幫大家整理的單片機工作總結,希望對大家有所幫助。
單片機是一門應用性和綜合性很強的學科,它綜合了電子技術中的模擬電路和數字電路方面的知識,特別是數字電路,因為數字電路在裡面的應用很多。學習單片機最好先從匯編語言入手,雖然匯編語言是低級語言 ,編程效率低,但它比C語言佔用內存小,執行速度快等優點,在剛接觸單片機時更容易學習。由於單片機涉及的知識很多,所以我們只能循序漸進的學習,逐步的積累,沒有什麼捷徑可循。
剛開始學習的時候,對單片機沒有什麼認識,不知道什麼是單片機,更不知道它有什麼作用。通過學習才大體知道了單片機的一些知識。由中央處理器CPU、隨機存儲器RAM、只讀存儲器ROM、I/O介面、定時器/計數器以及串列通信介面等集成在一塊晶元上,構成了一個單片微型計算機,簡稱為單片機。它的應用范圍很廣,在工業自動化中應用有數據採集、測控技術。在智能儀器儀表中應用有數字示波器、數字信號源、數字萬用表、感應電流表,自動取款機等。在消費類電子產品中應用有洗衣機、電冰箱、空調機、電視機、微波爐、手機、IC卡、汽車電子設備等。在通訊方面應用有數據機、程式控制交換技術、手機、小靈通等。在武器裝備方面應用有飛機、軍艦、坦克、導彈、太空梭、魚雷制導、智能武器等。剛開始學習是總覺得指令語句太過復雜,怎麼也記不住,這時只能多練、多記,剛開始連一個最簡單的控制一盞小燈的亮滅的程序都不會寫,只能抄寫別人做成功的程序,一遍一遍的寫,直到能熟練的獨自將程序寫出來,從簡單的入手,逐步的積累,對單片機就會有新的認識,能夠自己獨立的寫一些小的程序,能夠將小的程序結合到一起,拼接成較為復雜一些的程序。剛接觸KEIL時確實很讓人頭疼,使用 KEIL不會建項目、不會使用實驗板。遇到困難要一件件攻克,不會建項目,就到教學視頻里找,仔細看一下,做幾次就懂了。然後可以參考已經成功的程序,抄過來,寫一個最簡單的,讓它運行起來,先培養一下自己的感覺,知道寫程序是怎麼一回事,無論寫大程序還是小程序,要做的工序不會差多少,總得建個項目,再配置一下項目,然後建個程序,加入項目中,再寫代碼、編譯、生成HEX,刷進單片機中、運行。
我的英文得到了提高,自己也愛上了單片機,下面是我學習單片機中的一些經驗總結:
1. 萬事開頭難,要勇敢的邁出第一步。開始時候是有點難度,但不要為自己找借口,要勇敢的邁出第一步,以後的路就會慢慢地順起來了。
2. 知識點用到才學,不用的暫時放在一邊。這個世界,如果每樣東西都學,自己就會太累,但這並不是說有些東西可以不學,像在哪裡都可以用到的時序圖等就要好好的研究一下了。
3. 程序不要光看別人的而不寫,一定要自己看了別人怎麼寫後自己再寫一遍,最好這時什麼都不要參考,憑自己的印象去寫,遇到錯誤時再好好看下,可以收到事半功倍效果。
4. 必須學會掌握調試程序的方法,自己的程序遇到錯誤時一定要自己慢慢的把它調出來,有些人寫好程序後發現問題,就到q群里或論壇上發表帖子,等著別人來回答,這對自己是沒有好處的。
5. 找到解決問題的思路比找到代碼更重要,世界上的事情千變萬化,就像不可能找到兩片相同的葉子一樣,世界上也找不到使用同一個代碼的項目,所以要學會自己分析問題,找出解決問題的方案。
6. 開動腦筋,運用多種方法,不斷優化自己的程序,這是鍛煉你寫程序能力的一個很好的方法,這對於提高元器件執行的效率也是很重要的。
7. 看別人的代碼,學習別人的思路。這是一種很有用的方法,可以把別人的思路與自己的相比較,發現自己的優缺點。
8. 著重培養自己解決問題的能力,而不是看自己寫過多少代碼或者做過什麼,這個最好的方法就是做一些具體的項目,從中培養自己解決問題的能力。
9. 嘗試寫一下綜合應用的程序,這個是很重要的,因為獨立可以的綜合在一起後並不一定可以正常工作。
10. 如果有可能,多學習一下計算機專業的課程,例如數據結構,畢竟單片機與程序的設計也是不能分開的,這是一個綜合的科目。
11. 面對一個新的項目,要先自己想下怎麼做,而不是單單地找別人的代碼,這是很重要的,因為只有這樣做,自己才能獨立去思考一個新的東西,也更有可能創造出一個更好的程序。 有時候單片機的學習很單調,有些知識學起來很抽象,不容易理解,只能慢慢適應,一邊學習理論知識,一邊編寫程序,將程序刷入單片機進行調試,通過這種方式才能更快速的學習單片機。同事也會從學習中體會成功的喜悅。
好了,自己的單片機的學習心得也就這么幾句,若有不對的地方,請多包涵,也願學習單片機的人能學有所成。
作為一個剛剛從事單片機工作不久的我來說,對於單片機我了解了一段時間,但總感覺無從入手,理論性的東西看了幾遍也不會把它用到實處,通過這次彩燈控制實驗,我也對單片機有了一定的了解。單片機是一門非常重視實踐的技術,不能總是看書,但要學習它首先應看書,對單片機引腳、內部結構、寄存器和原理有一定地了解和感官認識,它的是怎樣工作的,能幹些什麼?以前看學長做的流水燈我還不知道原理,現在總算清楚了。
在短短的幾周工作時間里,真的學了很多,對我來說,編程是個問題,但我知道這是任重而道遠的。我上的第一節課是關於流水燈左右循環移動在實驗箱上的實現,這個程序老師教了但還是搞不懂,後來通過同學之間相互探討,終於理解了,最重要的還是C語言沒學好,二進制轉換為十六進制是很普通的但我還是不會,現在已經掌握了。『紙上得來終覺淺,絕知此事要躬行。』在短暫的學習過程中,我深深感覺到自己在實際應用中的專業知識的匱乏,總以為自己還可以,一旦接觸到實際,才知道自己知道的是多麼少,這時才真正領悟到「學無止境」的含義。
「千里之行,始於足下。」這是一個短暫而充實的話。每看懂一個程序自己試著學人家編,去修改,去記錄,終於能略懂,這確實讓人深有體會。興趣是最好的老師,這樣才能堅持,要在以後積累很多經驗。主要肯不恥下問,那就會學到很多東西。最後一句:基礎很重要,實踐也同樣重要。必須要有學習單片機的熱情,這樣才能學好單片機。謝謝老師幾周以來的指導。
經過一周的課程設計,我收獲頗多,有深刻的心得體會。實訓讓我們受益匪淺。首先是關於單片機方面的。我們學到了許多關於單片機系統開發的知識,從最開始選題到最後的結題,更使我們得到了充分的鍛煉。其次,它讓我體會到了什麼才是teamworkspirit。一如:團隊管理的經驗、團隊意識的提升和協調能力等等,這些都會讓我們終身受益。
通過此次課程設計,使我更加扎實的掌握了有關電子線路單片機方面的知識,在設計過程中雖然遇到了一些問題,但經過一次又一次的思考,一遍又一遍的檢查我終於找出了問題所在,也暴露出了前期我在這方面的知識欠缺和經驗不足。實踐才能出真知,實踐才是檢驗真理的唯一標准,唯有通過親自動手製作,才能令我們掌握的知識不再是一些紙上談兵的東西。
在這次的課程設計中,我們遇到了很多困難,過程很艱難,但是我們都克服了,這是對我們自己的肯定。我們不斷發現錯誤,不斷改正,不斷領悟,不斷獲取。我們也曾灰心,也曾茫然,也曾不知所措,從一開始的自信滿滿,到最後的緊張繁雜,所有的這些都令我們回味無窮,這已經成為了我們人生的一個寶藏。我想今後的學習和工作也是這樣的,汗水見證著成功,我想十年過後,但我們都已經走入了社會,在某個陽光明媚的夏日,午後醒來,突然想起大學經歷的時候,最先映入腦海里的就是這門課程吧,就是這些為了一個共同的目標,相互合作,共同奮斗的日子吧。
不可否認,單片機是一門比較難的專業學科。但是經過這一學期的學習,我們覺得單片機這門課很好,讓我們在設計中掌握課程,具有很強的實用性。在社會上,單片機也應用極其廣泛。通過這次課程設計,我掌握了常用元件的識別和測試;熟悉了常用儀器、儀表;了解了電路的連線方法;以及如何提高電路的性能等等。我相信在接下來的日子裡,我會更深刻地去研究它,發掘它。
在這次的實訓里,我覺得過得很充實。實訓,不僅培養了我們獨立思考、動手操作的能力,在各種其它能力上也都有了提高。更重要的是,在實驗課上,我們學會了很多學習的方法。而這是日後最實用的,真的是受益匪淺。要面對社會的挑戰,只有不斷的學習、實踐,再學習、再實踐。這對於我們的將來也有很大的幫助。以後,不管有多苦,我想我們都能變苦為樂,找尋有趣的事情,發現其中珍貴的事情。汗水,是我們努力的過程,更是成功的使者。它是希望的凝聚。
回首此次實訓,我們真的學到了很多很多。鞏固了以前所學過的知識,將理論與實際結合起來,不斷提高自己的實際動手能力和獨立思考的能力,並學會去使用知識。當然不僅僅是這些課本上的知識,更重要的是一些課本上沒有但是也很重要的知識,像是團隊合作精神等。當我們都已經走入了社會,在某個陽光明媚的夏日,午後醒來,突然想起大學經歷的時候,回憶起這些泛著汗水的時光的時候,定然會被我們的團隊感動。
成功後會很喜悅,但過程一樣令我們回味無窮。此次設計也讓我明白了思路即出路,學問學問,有學必問。只要認真鑽研,動腦思考,動手實踐,就沒有弄不懂的知識。親歷親為,親手實踐才是硬道理。希望這樣的實訓能夠繼續下去,並不斷地前進,幫助更多的學生更好地學習單片機,並能夠在使用中發現它的無窮魅力!
從剛開始接觸單片機,到現在已經有4年的時間了,在這期間學習和使用了51單片機、飛思卡爾單片機,lpc2138,pic16f887等系列的單片機,每接觸一款單片機,都會經歷熟悉其基本開發,然後將其用於項目中的過程,對於如何學習一款單片機,自己做了如下的總結。
大家都知道,51單片機是最容易入門的,不僅因為其編程簡單,更重要的是網上的資料非常豐富。所以一般學習單片機開發的都將51單片機作為入門開發的首選。我學習51單片機的時候是採用這樣的一個步驟進行學習的:
第一步(熟悉的過程):買了一款51單片機開發板,然後就開始了我的學習之旅,剛開始的時候沒有去看視頻教程,而是對著一本實驗教材進行學習,那本實驗教材的名字記不清楚了,但是其內容就是圍繞單片機的led燈進行控制,將51單片機內部的各個功能部件全部都使用到了,這樣就能使我在很短的時間內,通過控制led燈的亮、滅熟悉了51單片機的內部的各種資源,這時對51單片機也就沒有感到陌生了。所以,個人覺得,學習單片機,要從實驗入手,先熟悉單片機再說,開發語言開始使用的是c語言。
第二步(進階的過程):有了第一步的基礎之後,接下來的便是進階的過程,當時,我看的是郭天祥十天學會單片機的視頻教程,因為這個教程從基礎到復雜的編程慢慢深入,講的比較的全面,而且也生動,所以那一階段,也是我學習單片機進步最快的階段,每次聽課的時候,按照上面的實驗,以及課堂上面調試程序時出現的一些問題,自己認真的在電腦上進行調試,並分析產生故障的原因,讓我有了一定的開發基礎。在看完了視頻教程之後,後面又對基礎的知識進行了下補習,主要是看單片機原理性的教材,因為有些細節性的東西還是要從教材上面獲得。
第三步(項目實戰的階段):學習單片機的時候,雖然也編寫了一些程序,但是那些都是一些很小的模塊程序,並沒有起到綜合應用的目的,所以在這之後,我和另外一個學習硬體的同學一起組成了一個小的團隊,進行項目實踐開發,那時候,實驗室的條件比價好,有很多的器件可以自己使用。所以,我們就設計了我們的第一個作品,基於單片機的`液體點滴監控系統。做這個系統時,就將以前單片機所學的知識,做了一個綜合的應用,包括有lcd1602控制,串口的控制等。
經過以上三個步驟的學習之後,對於51單片機的開發基本上就算入門了。而對於其他類型的單片機,如飛思卡爾單片機,lpc2148arm7單片機,pic16f887等,雖然每個系列的功能不一樣,但是最基本的編程思想還是一樣的,不同的可能就是編譯器,程序下載的軟體等差別,所以有了51單片機的開發基礎之後,學習其他單片機所採用的方法就是一個差異化的學習,學習各種單片機不同的地方,這樣,就能很快的熟悉一款新的型號的單片機。
如在學習pic16f887這個系列的單片機時,我首先做的工作不是去閱讀數據手冊,而是先拿著demo代碼,在編譯軟體中編譯、鏈接、生成hex文件,然後將其下載到開發板中跑起來,這個過程主要就是學習其軟體的基本操作,有了這個基礎之後,就能自己進行編程、測試。之後就是熟悉其編程的模式,所謂其編程模式,就是寄存器的控制,中斷程序的編寫,熟悉了這個操作,也就能控制其他的功能模塊了,如串口的控制、i2c硬體控制器的控制。這些基本的開發熟悉了之後,接下來便是學習差異的部分,例如pic單片機c語言中,其堆棧深度不能超過8級,超過了之後,將會使得程序出現跑飛的現象。而且內存的分配完全要靠自己來控制,分成了4個bank的數據,bank0,bank1,bank2,bank3等。這些就是每個系列單片機所獨有的一些東西,這些東西需要詳細的了解,因為它們可能為你的編程帶來很大的便利。
以上就是我學習單片機的總結,如果大家有更好的學習方法,希望大家能夠提出來,一起討論,共同進步。
單片機系統學習總結[篇2]
人的一生是一個不斷學習、不斷成長的過程。轉眼間,研究生的學習生涯結束了,走上新的工作崗位。回頭看看,發現自己不知不覺已經走過了五年的單片機學習之旅。
在20xx年最初接觸單片機的時候,在我心中覺得51就是單片機,單片機就是51,根本不知道還有其他單片機的存在。那時候老師只教會了我們匯編語言,根本不知道用c語言也可以進行單片機開發。幸運的是,我加入了單片機興趣小組,在老師的指導下,做了一系列實驗,有「基於ds18b20的溫度採集系統」、「有基於164的移位寄存器的燈光控制系統」、「有步進電機和直流電機的控制系統」。這時候我才發現,這是學習單片機的一個最好途徑——在實踐中領悟理論,用理論指導實踐。在上課的整整一個學期中,雖然老師講得很詳細,但是大部分概念都是到了實際動手做東西的時候才弄明白的。而且在經歷了迷惑之後再搞清楚,印象就特別深刻。直到現在我對那些概念和介面都非常清晰。其實我也很慶幸學習和使用了兩年多的匯編語言。由於有這些鍛煉,我對單片機底層結構和介面時序就弄得很清楚。在使用c語言開發的時候,優化代碼和處理中斷也就不會太費勁。我覺得,雖然現在絕大部分單片機開發都使用c語言,甚至有些公司還推出了圖形化編程的工具,這樣對於項目的開展從時間上快了很多,在管理上也規范了不少,但是從學習和想深入掌握單片機精髓的角度來說,還是需要熟練掌握匯編語言的使用。
機會總是青睞於有準備的人。也許有了前面一段時間的理論和實踐的積累,我才慢慢得到了一些參加科技競賽和參與科研項目的機會。在參加第一屆浙江省機械設計競賽的時候,我們設計的由多單片機系統協調控制的「月球車」機器人奪得了唯一的一個特等獎。這個競賽給我最大的收獲是我對單片機的認識改變了,它不再僅僅是一門學科了,它是一個可以讓你的創意得到充分發揮的平台。後來參與了「基於視頻分劃技術的鋼捲尺自動切零位機」、「電能表渦杠渦輪嚙合深度檢測系統」、「基於公共電話網的水表集抄數據路由器」、「高精度電感微位移測量系統」等一些實際的項目。在這些過程中,我發現只是精通單片機技術還不能很好的解決問題。體會最深的是,單片機只有融合到各種應用領域中,才能展現它的最大活力。然而單片機僅僅是一個工具而已,要做好單片機系統還需要各種應用領域的專業知識的支持。例如,在「基於視頻分劃技術的鋼捲尺自動切零位機」中,就需要搞清楚全電視信號的時序,弄明白鋼捲尺切零位機的工作原理,懂得怎麼利用疊加在視頻信號中的橫豎線來進行刻度的瞄準等。沒有這些專業知識,就算單片機技術再厲害也不可能做好這個項目。脫離應用背景的單片機開發,就像一個沒有靈魂的軀體一樣。
隨著arm的出現,我曾經認為,8位單片機可能在32位單片機的沖擊下就此走進歷史,可是很快就認識到我是錯誤的。隨著技術的革新和時間的推移,各大單片機公司紛紛將單片機朝著片上系統這個方向發展,集成了現在各種流行的技術和常用的模塊。我相信,在當前國內和國外的這個市場中,8位單片機應用的市場仍然是充滿生機,活力無限。在市場的不斷變化和技術的不斷更新過程中,8位單片機也會順應潮流不斷革新。
從我五年走過的路來看,單片機學習的過程應該是一個循序漸進、不斷學習、不斷積累的過程,可以分為三個階段。
第一階段:掌握開發單片機的必備基礎知識。首先是熟練掌握單片機的基本原理,其實各家各門的單片機其基本結構和原理都差不多,特別是共有的知識需要好好理解和掌握。例如,內核結構、內存分配、中斷處理、定時計數、串列通信、埠復用等一些最基本的概念和原理。除此之外,我們還需要具備模擬電子、數字電子、c語言程序開發知識以及原理圖和pcb設計等一些技能。在進行系統開發的時候,進行原理設計、pcb布板、程序編寫、系統聯調這些工作都是在所難免的。
第二階段:在掌握好一款單片機原理和應用的基礎上,開始學習其他各家單片機的獨有技術,學不了那麼多也要多了解了解。同時盡可能多地掌握單片機的一些外圍器件和常用電路,以備不時之需。有時候客戶要求低成本,那我們只好選用合鈦、義隆、華邦等這類那個島晶元;如果客戶要求工業級的性能,那麼我們就得從pic、nec、飛思卡爾、nxp等這些歐美和日式單片機中選擇;若要進行功耗的開發,選用msp430系列應該有一定優勢;在進行測量儀器設計的時候,c8051和ac842這類數模混合晶元就顯得比較方便。所以說最好每個類型的單片機都會一兩款,在實際項目選型中可以更加靈活。另外,要注意平時的技術積累。比如,在項目開發過程中將一些常用的介面程序和控制演算法整理成模塊或者函數,在其他的項目開發中,有同樣或者接近的需求時馬上就可以使用,又快又好。
第三階段:在實際的項目開發過程中,不斷深化單片機應用技術,不斷積累應用行業的專業知識。例如,我完成了「高精度電感微位移測量系統」,就會對電感感測器的測量機理和信號特性、測量電路的設計、電磁兼容處理、誤差修正和非線性處理等測控方面的專業技術有很深的認識。以後碰到類似的項目時,很多東西就可以直接利用了。有了扎實的單片機應用相關的基礎知識,並且熟悉掌握了幾款不同類型單片機的開發方法,再結合實際的應用背景,那麼就可以隨心所欲,設計出性能最優、結構最合理的單片機應用系統。這是我最大的奮斗目標,我覺得這也應該是單片機應用的最高境界吧。
在這五年的學習中,有感慨、有遺憾、有憧憬、有希望,更重要的是我對單片機應用這個領域充滿熱情。由於才疏學淺、涉世未深,希望能與行業里的各位老師多多交流,不斷學習,不斷成長。
單片機系統學習總結[篇3]
基於本人學習單片機的痛苦經歷,特編寫本教程,以此獻給廣大的單片機初學者,希望您能從中受益。
作者提示:本教程乃最通俗易懂之單片機教材也,如果您還是看不懂,請千萬不要涉足此行,以免誤入歧途,耽誤您的前程*_*
拿到這本教程您首先就會想,什麼是iap教學法?是不是一種什麼全新的教學方法?當然不是,我可沒有那麼大的本事,其實這只是我杜撰的一個新名詞,意思就是inapplicationsprogram(在應用中編程),當然這只是針對單片機教學,說法是否正確,還得您說了算。
至於為什麼要提這種說法,那我倒想說幾句。大家都知道,學習電子技術是一件非常無聊和枯燥的事情,為什麼會有這種想法,就是因為我們傳統的教學方法只重理論而忽略了實踐,要一個人記住那些空洞而有無聊的理論知識實在不是一件容易的事,好在我們總算熬過來了,不管如何,也多多少少的學習了一些電子基礎知識。
接下來我們應該進一步掌握些什麼知識呢,凡涉足此行的朋友都知道,那就是單片機。不過這可不是一件容易的事,倒不是因為單片機很難學,而實在是我們身邊很難找到一本專為單片機入門者而編寫的教材。翻一下傳統的單片機教材,都好象是為已經懂單片機的人而寫的,一般總是以單片機的結構為主線,先講硬體原理,然後是指令,接著講軟體編程,再是系統擴展和外圍器件,最後舉一些實例(隨
,很少涉及單片機的基礎知識,如果按照此種學習方法,想便說一點:很多書中的實例都是有錯誤的)
進行產品開發,就必須先把所有的知識全部掌握了才可以進行實際應用。孰不知,單片機不象模擬電路和數字電路那樣,只要搞懂了電路原理,再按照產品要求設計好相應的電路就可以了。它是一種以簡單的硬體結構,復雜而有靈活的軟體系統來完成設計的通用性產品,不同的設計者只會使用其不同的功能,幾乎沒有人會把它的全部指令都使用起來,所以學習使用單片機只能靠循序漸進的積累,而不可能先把
。它全部掌握了再去做產品開發(當然天才就例外了*_*)
基於以上原因,本人想嘗試一種全新的單片機教學方法,打破傳統的循序漸進式的教學方法,以單片機的應用為藍本,結合基本的工業控制系統和實踐工作中的具體應用,不分先後順序,將各條指令貫串於一個又一個的實驗中,通過所見即所得的實驗來講解各種指令的編程方法,順便講解相關的基本概念,使您盡快地熟悉單片機應用的基本步驟,掌握軟體編程的基本方法。
如果您學完了就能成為單片機的入門者,完全可以進行一般產品的開發;下冊部分是單片機應用的提高部分,主要學習單片機的系統擴展(比如:rom和ram存儲器的擴展,並行口的擴展,串列口的擴展,a/d和d/a與單片機的介面)以及相關開發工具和軟體的使用(包括kellc51的應用與調試技巧,硬體模擬器的使用)等等,如果您學完了下冊部分,那就得恭喜您成為了單片機開發的高手了,不過單片機的技術是在不斷的發展和提高的,您也不要太驕傲哦!
為了盡量把最新的單片機知識和應用成果收錄進我們的教程,希望您能不吝賜教,共同來努力把我們的教程不斷的改進和完善。還是那句題外話,技術是靠不斷的積累和交流才會進步的,固封自守只會更加落後。
由於時間和精力的限制,我還是希望在您學習本教程之前,自己先熟悉一點相關的電子技術知識,特別是數字電路基礎,這對您學習中碰到的相關概念會有很大的幫助。
;❻ 簡述51單片機的工作原理
單片機的工作原理與計算機CPU的工作原理是一樣的,主要是利用片內的半導體存儲器存放用戶的程序和數據,單片機的核心中央微處理器CPU中有指令寄存器、指令解碼器,程序計數器等部件,由程序計數器尋找下一條要執行的指令,找到後,將指令送給指令寄存器,再由指令解碼器翻譯執行該指令,完成對指令功能的操作。 一句話:單片機的工作就是不斷地取指令、分析指令、執行指令的循環過程。按預先編寫的程序執行,以達到用戶期待的結果。 單片機主要用途是做生產設備的控制器,做智能儀表的核心部件,由於單片機體積微小,可以植入任何一個設備和儀表當中,因此它也是嵌入式技術的核心部件。
它一般由嵌入式微處理器、外圍硬體設備、嵌入式操作系統以及用戶的應用程序等四個部分組成.嵌入式系統是以應用為中心,以計算機技術為基礎,並且軟硬體可裁剪,適用於應用系統對功能、可靠性、成本、體積、功耗有嚴格要求的專用計算機系統。它一般由嵌入式微處理器、外圍硬體設備、嵌入式操作系統以及用戶的應用程序等四個部分組成,用於實現對其他設備的控制、監視或管理等功能。嵌入式系統一般指非PC系統,它包括硬體和軟體兩部分。硬體包括處理器/微處理器、存儲器及外設器件和I/O埠、圖形控制器等。軟體部分包括操作系統軟體(OS)(要求實時和多任務操作)和應用程序編程
❼ 51單片機應該掌握哪些
任何一款mcu,其基本原理和功能都是大同小異,所不同的只是其外圍功能模塊的配置及數量、指令系統等。對於指令系統,雖然形式上看似千差萬別,但實際上只是符號的不同,其所代表的含義、所要完成的功能和定址方式基本上是類似的。因此,對於任何一款mcu,主要應從如下的幾個方面來理解和掌握:
* mcu的特點:要了解一款mcu,首先需要知道就是其ROM空間、RAM空間、IO口數量、定時器數量和定時方式、所提供的外圍功能模塊(Peripheral Circuit)、中斷源、工作電壓及功耗等等。
* 了解這些mcu Features後,接下來第一步就是將所選mcu的功能與實際項目開發的要求的功能進行對比,明確那些資源是目前所需要的,那些是本項目所用不到的。對於項目中需要用到的而所選mcu不提供的功能,則需要認真理解mcu的相關資料,以求用間接的方法來實現,例如,所開發的項目需要與PC機COM口進行通訊,而所選的mcu不提供UART口,則可以考慮用外部中斷的方式來實現;
* 對於項目開發需要用到的資源,則需要對其Manua*進行認真的理解和閱讀,而對於不需要的功能模塊則可以忽略或瀏覽即可。對於mcu學習來講,應用才是關鍵,也是最主要的目的。
* 明確了mcu的相關功能後,接下來就可以開始編程了。對於初學者或初次使用此款mcu的設計者來說,可能會遇到很多對mcu的功能描述不明確的地方,對於此類問題,可以通過兩種方法來解決,一種是編寫特別的驗證程序來理解資料所述的功能;另一種則可以暫時忽略,程序設計中則按照自己目前的理解來編寫,留到調試時去修改和完善。前一種方法適用於時間較寬松的項目和初學者,而後一種方法則適合於具有一定mcu開發經驗的人或項目進度較緊迫的情況;
* 指令系統千萬不要特別花時間去理解。指令系統只是一種邏輯描述的符號,只有在編程時根據自己的邏輯和程序的邏輯要求來查看相關的指令即可,而且隨著編程的進行,對指令系統也會越來越熟練,甚至可以不自覺地記憶下來;
mcu的基本功能:
對於絕大多數mcu,下列功能是最普遍也是最基本的,針對不同的mcu,其描述的方式可能會有區別,但本質上是基本相同的:
* Timer(定時器):Timer的種類雖然比較多,但可歸納為兩大類:一類是固定時間間隔的Timer,即其定時的時間是由系統設定的,用戶程序不可控制,系統只提供幾種固定的時間間隔給用戶程序進行選擇,如32Hz,16Hz,8Hz等,此類Timer在4位mcu中比較常見,因此可以用來實現時鍾、計時等相關的功能;另一類則是Programmable Timer(可編程定時器),顧名思義,該類Timer的定時時間是可以由用戶的程序來控制的,控制的方式包括:時鍾源的選擇、分頻數(Prescale)選擇及預制數的設定等,有的mcu三者都同時具備,而有的則可能是其中的一種或兩種。此類Timer應用非常靈活,實際的使用也千變萬化,其中最常見的一種應用就是用其實現PWM輸出(具體的應用,後續會有特別的介紹)。由於時鍾源可以自由選擇,因此,此類Timer一般均與Event Counter(事件計數器)合在一起;
* IO口:任何mcu都具有一定數量的IO口,沒有IO口,mcu就失去了與外部溝通的渠道。根據IO口的可配置情況,可以分為如下幾種類型:
** 純輸入或純輸出口:此類IO口有mcu硬體設計決定,只能是輸入或輸出,不可用軟體來進行實時的設定;
** 直接讀寫IO口:如MCS-51的IO口就屬於此類IO口。當執行讀IO口指令時,就是輸入口;當執行寫IO口指令則自動為輸出口;
** 程序編程設定輸入輸出方向的:此類IO口的輸入或輸出由程序根據實際的需要來進行設定,應用比較靈活,可以實現一些匯流排級的應用,如I2C匯流排,各種LCD、LED Driver的控制匯流排等;
** 對於IO口的使用,重要的一點必須牢記的是:對於輸入口,必須有明確的電平信號,確保不能浮空(可以通過增加上拉或下拉電阻來實現);而對於輸出口,其輸出的狀態電平必須考慮其外部的連接情況,應保證在Standby或靜態狀態下不存在拉電流或灌電流。
* 外部中斷:外部中斷也是絕大多數mcu所具有的基本功能,一般用於信號的實時觸發,數據采樣和狀態的檢測,中斷的方式由上升沿、下降沿觸發和電平觸發幾種。外部中斷一般通過輸入口來實現,若為IO口,則只有設為輸入時其中斷功能才會開啟;若為輸出口,則外部中斷功能將自動關閉(ATMEL的ATiny系列存在一些例外,輸出口時也能觸發中斷功能)。外部中斷的應用如下:
** 外部觸發信號的檢測:一種是基於實時性的要求,比如可控硅的控制,突發性信號的檢測等;而另一種情況則是省電的需要;
** 信號頻率的測量;為了保證信號不被遺漏,外部中斷是最理想的選擇;
** 數據的解碼:在遙控應用領域,為了降低設計的成本,經常需要採用軟體的方式來對各種編碼數據進行解碼,如Manchester和PWM編碼的解碼;
** 按鍵的檢測和系統的喚醒:對於進入Sleep狀態的mcu,一般需要通過外部中斷來進行喚醒,最基本的形式則是按鍵,通過按鍵的動作來產生電平的變化;
* 通訊介面:mcu所提供的通訊介面一般包括SPI介面,UART,I2C介面等,其分別描述如下:
** SPI介面:此類介面是絕大多數mcu都提供的一種最基本通訊方式,其數據傳輸採用同步時鍾來控制,信號包括:SDI(串列數據輸入)、SDO(串列數據輸出)、SCLK(串列時鍾)及Ready信號;有些情況下則可能沒有Ready信號;此類介面可以工作在Master方式或Slave方式下,通俗說法就是看誰提供時鍾信號,提供時鍾的一方為Master,相反的一方則為Slaver;
** UART(Universal Asynchronous Receive Transmit):屬於最基本的一種非同步傳輸介面,其信號線只有Rx和Tx兩條,基本的數據格式為:Start Bit + Data Bit(7-bits/8-bits) + Parity Bit(Even, Odd or None) + Stop Bit(1~2Bit)。一位數據所佔的時間稱為Baud Rate(波特率)。對於大多數的mcu來講,數據為的長度、數據校驗方式(奇校驗、偶校驗或無校驗)、停止位(Stop Bit)的長度及Baud Rate是可以通過程序編程進行靈活設定。此類介面最常用的方式就是與PC機的串口進行數據通訊。
** I2C介面:I2C是由Philips開發的一種數據傳輸協議,同樣採用2根信號來實現:SDAT(串列數據輸入輸出)和SCLK(串列時鍾)。其最大的好處是可以在此匯流排上掛接多個設備,通過地址來進行識別和訪問;I2C匯流排的一個最大的好處就是非常方便用軟體通過IO口來實現,其傳輸的數據速率完全由SCLK來控制,可快可慢,不像UART介面,有嚴格的速率要求。
* Watchdog(看門狗定時器):Watchdog也是絕大多數mcu的一種基本配置(一些4位mcu可能沒有此功能),大多數的mcu的Watchdog只能允許程序對其進行復位而不能對其關閉(有的是在程序燒入時來設定的,如Microchip PIC系列mcu),而有的mcu則是通過特定的方式來決定其是否打開,如Samsung的KS57系列,只要程序訪問了Watchdog寄存器,就自動開啟且不能再被關閉。一般而言watchdog的復位時間是可以程序來設定的。Watchdog的最基本的應用是為mcu因為意外的故障而導致死機提供了一種自我恢復的能力。
mcu程序的編寫:
mcu的程序的編寫與PC下的程序的編寫存在很大的區別,雖然現在基於C的mcu開發工具越來越流行,但對於一個高效的程序代碼和喜歡使用匯編的設計者來講,匯編語言仍然是最簡潔、最有效的編程語言。對於mcu的程序編寫,其基本的框架可以說是大體一致的,一般分為初始化部分(這是mcu程序設計與PC最大的不同),主程序循環體和中斷處理程序三大部分(見圖1 a 和 b),其分別說明如下:
* 初始化:對於所有的mcu程序的設計來講,出世化是最基本也是最重要的一步,一般包括如下內容:
** 屏蔽所有中斷並初始化堆棧指針:初始化部分一般不希望有任何中斷發生;
** 清除系統的RAM區域和顯示Memory:雖然有時可能沒有完全的必要,但從可靠性及一致性的角度出發,特別是對於防止意外的錯誤,還是建議養成良好的編程習慣;
** IO口的初始化:根據項目的應用的要求,設定相關IO口的輸入輸出方式,對與輸入口,需要設定其上拉或下拉電阻;對於輸出口,則必須設定其出世的電平輸出,以防出現不必要的錯誤;
** 中斷的設置:對於所有項目需要用到的中斷源,應該給予開啟並設定中斷的觸發條件,而對於不使用的多餘的中斷,則必須給予關閉;
** 其他功能模塊的初始化:對於所有需要用到的mcu的外圍功能模塊,必須按項目的應用的要求進行相應的設置,如UART的通訊,需要設定Baud Rate,數據長度,校驗方式和Stop Bit的長度等,而對於Programmer Timer,則必須設置其時鍾源,分頻數及Reload Data等;
** 參數的出世化:完成了mcu的硬體和資源的出世化後,接下來就是對程序中使用到的一些變數和數據的初始化設置,這一部分的初始化需要根據具體的項目及程序的總體安排來設計。對於一些用EEPROM來保存項目預制數的應用來講,建議在初始化時將相關的數據拷貝到mcu的RAM,以提高程序對數據的訪問速度,同時降低系統的功耗(原則上,訪問外部EEPROM都會增加電源的功耗)。
* 主程序循環體:大多數mcu是屬於長時間不間斷運行的,因此其主程序體基本上都是以循環的方式來設計,對於存在多種工作模式的應用來講,則可能存在多個循環體,相互之間通過狀態標志來進行轉換。對於主程序體,一般情況下主要安排如下的模塊:
** 計算程序:計算程序一般比較耗時,因此堅決反對放在任何中斷中處理,特別是乘除法運算;
** 實時性要求不高或沒有實時性要求的處理程序;
** 顯示傳輸程序:主要針對存在外部LED、LCD Driver的應用;
* 中斷處理程序:中斷程序主要用於處理實時性要求較高的任務和事件,如,外部突發性信號的檢測,按鍵的檢測和處理,定時計數,LED顯示掃描等。一般情況下,中斷程序應盡可能保證代碼的簡潔和短小,對於不需要實時去處理的功能,可以在中斷中設置觸發的標志,然後由主程序來執行具體的事務——這一點非常重要,特別是對於低功耗、低速的mcu來講,必須保證所有中斷的及時響應。
* 對於不同任務體的安排,不同的mcu其處理的方法也有所不同。例如,對於低速、低功耗的mcu(Fosc=32768Hz)應用,考慮到此類項目均為手持式設備和採用普通的LCD顯示,對按鍵的反應和顯示的反應要求實時性較高,應此一般採用定時中斷的方式來處理按鍵的動作和數據的顯示;而對於高速的mcu,如Fosc>1MHz的應用,由於此時mcu有足夠的時間來執行主程序循環體,因此可以只在相應的中斷中設置各種觸發標志,並將所有的任務放在主程序體中來執行;
* 在mcu的程序設計中,還需要特別注意的一點就是:要防止在中斷和主程序體中同時訪問或設置同一個變數或數據的情況。有效的預防方法是,將此類數據的處理安排在一個模塊中,通過判斷觸發標志來決定是否執行該數據的相關操作;而在其他的程序體中(主要是中斷),對需要進行該數據的處理的地方只設置觸發的標志。——這可以保證數據的執行是可預知和唯一的。
總之,對於mcu開發來講,必須記住一點:「條條大路通羅馬」,沒有做不到的事,關鍵是看方法是否正確!再就是多做多動手和多想。