我想用一種門外漢的角度,來寫篇單晶片的入門文章。非相關科系的人要學單晶片最大的問題是,不知從何著手。網路上找到的資訊通常都蠻零散的,只能靠自己一點一點慢慢拼湊;而市面上的書籍內容通常較為專一,很難獲得較全面的訊息。這篇文章算不上是教學吧?不過我儘量把我在學的時候遇到的問題作個整理,想學的人看一看也許能夠有個方向。
.關於單晶片
CPU(Central Processing Unit, 中央處理器)相信大家都知道這是什麼。比較小,比較遜的CPU就叫作MPU(Micro Processing Unit, 微型處理器)。今天的主角叫作MCU(Micro Control Unit, 微型控制器), 又稱作單晶片微電腦(Single Chip Microcomputer),在台灣習慣稱作「單晶片」,在大陸則管他叫「單片機」。MCU跟MPU一樣可以看作是一種微型處理器,但不同的是MCU通常會將CPU、RAM、ROM、I/O介面等全都包含在同一顆晶片上。也就是說一顆MCU晶片就可以看作是一部超迷你型的電腦。
MCU通常是拿來作一些小型的控制,像是家電、自動控制、玩具等等,需要作一些電腦控制,但又不可能把一台電腦放進去的那種場合,就非常的好用。在業界很多人是靠這個吃飯,但喜歡的話可以拿來作點小玩具玩,比如沒事可以來作個CD-Pro2,或是小機器人之類的,也蠻不錯的。
.認識8051
學單晶片一定會聽過「8051」。8051是Intel在1980年發表的一顆單晶片處理器,和早期個人電腦的CPU 8086/8088是差不多年代(1978/1979)的東西。8086/8088現在我們可能很少用到了,他後來變成了大家比較熟悉的80286、386、486、Pentium等等等;但8051從2x年前一直到今天他都還是8051,而且一直被廣泛使用著。Intel的8051家族還有一些兄弟姊妹,包含8031/8051/8751和8032/8052/8752等等,他們只差別在於ROM的型式、容量,或是功能的擴充,其它基本的功能和內部指令都是相同的。這些與8051指令集相容的MCU,通稱作MCS-51。
8051因為發展的早,使用的廣,幾乎可說是單晶片入門的代名詞。學校的單晶片課程大都以8051作為教學內容,市面上的參考書籍、網路上的參考資料,全都是以8051最多。尤其在台灣,其它單晶片的資料相較之下簡直是少的可憐。另外和程式開發有關的,像整合編輯器(IDE)、編譯器(Compiler)、軟體模擬器(Simulator)等等的,也都是以8051的數量最多。所以8051在學習和使用上有著極大的優勢。
.MCS-51的變種
許多Intel以外,像是Atmel/DALLAS/Philips/STC/Winbond等等等的一堆廠商,也生產了許多MCS-51的相容晶片。他們和8051的指令集相同,但是功能可能更強大。所以學會8051不止是可以用8051而已,也等於同時也能夠使用這些8051的相容/變種晶片。像現在市面上能買到的”標準”8051,幾乎都是Ateml生產的AT89C51/AT89S51系列。又例如8051的標準運作時脈只有12MHz,嫌不夠快怎辦?Winbond有出一堆40MHz的MCS-51,甚至還可找到其它縮短指令週期,或是更高頻率的版本。而標準的8051是40pin,若覺得40pin的IC體積太大,又用不到那麼多IO port,也可以找到更小的版本,像Atmel 2051系列,包含89C1051/89C2051/89C4051和89S1051/89S2051/89S4051,刪除了兩個IO port,只剩下20pin,小小一顆可愛多了。
那怎樣找這些變種51的資訊呢?方法是,先想辦法知道那些廠商有生廠51相容晶片(像是上面已經提到好幾家了),然後去他們網站,把規格表抓下來一個一個看,就會知道有那些東西可以用,慢慢的就會認識越來越多型號了。
.其它的單晶片
51系的好處前面有提到,相關資料超多、開發環境較成熟、相容晶片多,真的是好學好用。但是,這世界上並不是只有MCS-51而已,去看看其它的單晶片我想也不是什麼壞事。問題又來了,要去那裏看?怎麼知道有那些可以看?
好吧,單晶片百百種,但簡單講,除了51系之外,一般比較常見有人在討論/比較容易找到資料的小型單晶片,其實只有Atmel的AVR系列,和Microchip的PIC系列,就這兩種而已。至於其它的嘛,光是為了找資料大概都會搞死人,我想以非專業用途來講可以不太需要管他們了。所以不想侷限只用51系的話,AVR/PIC都是不錯的選擇。雖然他們的相關資源跟51比起來可能差了一大截,但也還算的上是豐富的了。
學51以外的單晶片雖然可能會比較困難,但AVR/PIC有些特點是51沒有的:
– 接腳數的選擇:51系就我現在知道的,最少接腳數是20pin,如果想用在空間很小的場合可能較不適用。AVR就我所知最小作到8pin,PIC則是6pin。
– AVR/PIC的架構和51比較起來可能會比較先進,畢竟51也算是很有歷史的一顆單晶片了。51系使用的是複雜指令集(CISC),AVR/PIC則是使用精簡指令集(RISC)。
– AVR/PIC大都有ISP(線上下載)功能,可以不經由專用燒錄器燒錄,在開發電路板上不需要拔MCU,直接經由傳輸線傳輸燒錄即可。
– AVR/PIC大都內建RC振盪線路(雖然內建的速度可能不快),可以省掉石英振盪器的外接線路用起來更方便。
舉些例子,像是最近熱門的Wii改機晶片,用的其實就是Microchip的PIC12F629,小小一顆,只有8支腳又內建振盪線路,完全不需外接其它電路,所以把程式燒錄進去後直接丟進Wii就可以用了,連燒錄器都可以很容易的自製。另外像Atmel的ATtiny2313,腳位和80251完全相容,可以直接取代80251使用,但速度快了大概十倍,且有ISP,也內建RC振盪,唯一的差別就是他是AVR系列,指令和51完全不相容,程式需要重新寫過。
.單晶片的選擇
一開始得先選定其中一種單晶片來學,才有個方向,所以需要知道每家單晶片的特點。
– MCS-51系列
資源多,找資料容易。變種多,學一種可以用一百種。開發環境成熟,可以找到很多的相關工具。
– Atmel AVR系列
AVR跟其它單晶片比起來,特異功能特別多。像是內建A/D轉換、PWM輸出之類的,都是其它家比較缺乏的。
AVR八位元系列又分為mega系列和tiny系列。顧名思義,mega系列就是長的比較大的,tiny系列就是小小一顆的。大的功能特多,小的體積小但功能也不簡單。此外還有90系列,現在多屬USB、PWM之類的專門用途。
– Microchip PIC系列
PIC系列最厲害的就是晶片的種類多的數不完,可以依不用需求來作選擇。
PIC又分為PIC10/12/14/16/18
依接腳數來看:
PIC10: 6pin / PIC12: 8pin /PIC16: 18~40pin / PIC18: 28pin以上
因為是使用RISC精簡指令集,指令數少,易記易學
例如:
12位元核心,如PIC12C5XX,指令數33個
14位元核心,如PIC16CXX, 指令數35個
16位元核心,如PIC18CXX, 指令數77個
但也因為PIC系列種類太多,各系列間指令不同無法互用是比較麻煩的地方。
可以依自己學單習晶片的目的來選擇比較適合的單晶片系列。要容易學的話可選51,需要用到PWM之類的話可考慮AVR,想作小東西的話PIC就蠻適合。另外51/AVR/PIC以外可能會用上的MCU也不是沒有,像作機器人的話可能會用到BASIC Stamp這類的MCU,這種的碰上的時候就會知道了。
.程式語言的選擇
單晶片的基本程式語言是組合語言。雖然以學習上來講不會很困難,但比較大的問題是每換一種單晶片,就得去重新瞭解他的指令集,程式要移植也不容易。用C語言來寫是一種不錯的選擇,複雜的程式比較容易寫,移植容易。現在的編譯器都作蠻不錯的了,用C寫的程式容量和執行速度都可和直接用組合語言寫的相當接近。所以除非是單晶片儲存容量超小、或是速度方向需要極斤斤計較的情況,不然一般來講用C寫會比較好些。
.C語言的開發環境
不過用C寫有一個問題,就是開發工具的選擇。原廠提供的開發工具通常都只有組合語言的版本,要用C寫的話得尋找其它第三方的整合編輯器(IDE )或編譯器(Compiler)。除了開發工具的額外花費以外,IDE有用的順不順手的問題,Compiler有編譯效率的問題;除此之外,C語言雖然有一定的標準,但是各家的編譯器對C語言的解釋都會有些不同;像是光就PC上來講,在Borland c可以跑的程式就不見得能在gcc上執行。所以選擇合用的C開發工具恐怕也是得多花些精神的。
.除錯工具
單晶片程式開發最陽春的辦法就是:寫完程式,用燒錄器將程式燒錄進MCU,把MCU插上電路板上測試。有錯誤的話,修改程式之後拔下MCU,放上燒錄器重新燒錄,插回電路板再作測試。這樣的反覆插拔MCU的過程很煩人,而且也容易造成損壞,得找些方便點的方法才行。
– 使用線上模擬器(In Circuit Emulator, 簡稱ICE):ICE是一種硬體的模擬器,可替代MCU插入電路板的插槽進行模擬,另一端則接上電腦下載程式,省去重覆插拔的麻煩,使用上很方便。但缺點是價格不便宜,且每換一種MCU都得搭配對應的ICE才行。另外也有結合燒錄功能的線上模擬器,可作測試也可燒錄MCU,這種的則稱作燒模器。
– 使用ISP燒錄:現在許多MCU有ISP燒錄功能,只要在電路板上多留一組接頭連接到電腦,就可以直接下載寫好的程式到MCU進行測試。和ICE不同的是,這些ISP的線路大都相當簡單,可自行製作,費用也不高。但這功能就必需要MCU本身有支援才行。
– 使用軟體模擬器(Software Simulator):軟體模擬器最基本的就是MCU模擬器。將編譯好的程式交給MCU模擬器執行,可以追蹤各暫存器的數值、IO腳位的電位高低變化等等。MCU模擬器經常會整合於程式開發的IDE介面上,像Atmel原廠提供於AVR開發的AVR Studio,或普遍使用於MCS-51開發的Keil,都內建有MCU模擬器供測試使用。Keil內的模擬器甚至還提供了像波形產生器等軟體工具,對軟體模擬開發有不少幫助。這種模擬器可以提供初步的MCU程式執行測試,但缺點則是是不容易看出整個電路的實際運作情況。
– 使用軟體電路模擬器:另外還有一種更進一步模擬整個電路的運作的軟體模擬器,像是以MCS-51為基礎的電路模擬器就可找到不少,例如「SIMLAB-8051」,用起來就像一般8051的實習套件一般,可以模擬LED、七段LED、單色/彩色點矩陣LED、鍵盤、喇叭、指撥開關等等。在AVR/PIC方面雖然比較找不到這方面的專用軟體,不過先前文章中曾提到過Proteus VSM這套電路模擬軟體,不單是可以模擬一般類比/數位電路的運作,他對MCS-51/AVR/PIC等眾多MCU晶片也支援了程式的執行,甚至在上面放上小型LCD顯示器執行Linux都不是問題。對設計來講是蠻方便的方法,可以先以軟體方式模擬,最終再燒錄進行實際電路測試。
.參考書籍的選擇
一開始要學單晶片,可能連「該買什麼書來看」都很頭痛。但能夠瞭解並確定了要用的單晶片類型、選用的程式語言、開發環境之後,再來要選本書來看不會那麼困難了。例如若選擇以MCS51+Keil+C來開發,那就去找本類似「8051單晶片設計:使用Keil C」這樣書名的書來看。不然萬一你去買了本「8051實作入門」,結果裏面講的全是組合語言,保證看完還是一樣茫茫然。不過組合語言的東西說實在看看是不賴啦,對認識單晶片的運作蠻有幫助的。
買本適合的書,用力的K,裏面的程式照著寫,電路照著作,再來….應該就不會有什麼大問題了。:p
--
現在還在寫blog分享資訊的人越來越少,如果覺得文章對您有幫助,歡迎在底下留言,這樣我也比較有動力繼續寫下去,謝啦!
我說大丙啊
這篇早個五年寫
我就會拉你到新竹這個大火坑了
我說大丙阿
完全看不懂!
我說大丙阿
你假日在家就是在搞這個啊!
你會沒有馬子啦!
大丙做任何一件事情都會是一個漫長的歷程.
我記得這件事情之前是說要玩電車吧…結果殼買了,甩尾胎買了…但是搞了半天還是沒有看到那輛BMW的英姿…
酸~~~
to mon,
要知道大計畫裏面會有小計畫,小計畫裏面還會有更大計畫,這叫平凡中見偉大
所以…咳咳,其實MCU是電車計畫裏面的電燈小計畫裏面的一個偉大計畫,依計畫分類是屬於電燈計畫的第三階段工程。這個很漫長是一定要的啦~
(不過BMW不是前幾篇就有貼照片了嗎?)
to horo,
有馬子就沒時間搞偉大計畫啦!
to J,
你如果說看的懂的話,本人一定是已經被外星人抓走了。
to Earvin,
新竹啊….
據說某人過年還不知能不能休假是吧?
喔喔喔…不能放假~~~
內科萬歲…大丙我們來去喝咖啡吧….
好文,小弟受教了
我也想搞個偉大的計畫…
可是我很差ㄝ….光速逃!!!
嘩….我以前上課就是用PIC的說(據說以前都是8051)
說真的這還滿好玩的,哈哈~
我們用的語言叫做Forth,老實說,真的是很冷門。
但是寫起來比組合語言親切一點點。
——
這篇我要是早看十年,上課應該就會認真一點XD
你是唸電子的喔?
醫工啦….要是念電機電子我就發達了XD
我們也有微電腦處理這種課,很有趣吧~
樣樣學、樣樣不精
要學學H3
大計劃搞完就結婚了 ..
結完繼續想大計劃..
門外漢還是看不太懂!
我還是有辦法學會PHP再說,
呵呵…
大大,我也在台北,學習AVR有沒有推薦的中文書呢?
其實中文書的選擇也不多啦
看你想用那種程式寫
如果要寫C的話還要留意開發工具的問題
IAR/GCC/ICC等等的C compiler,他們的程式寫法還都不太一樣,這個買書的時候也得注意才行
考慮這些之後,其實能挑的大概也只剩一、兩本而已,已經沒有推不推薦的問題了…XD
大大,
小弟有去弄本C Programming Book for Microcontrollers跟avr butterfly的版子,但也才剛入門,如果有開讀書會,記得通知一下,謝謝啦…
你決定好要用那種C了嗎?
IAR:國外好像很多人用,而且其它家的C都常在提說「和IAR相容」。不過缺點是很貴…。
ICC:大陸同胞好像大多是用這個,要找範例程式的時候就蠻方便的,也蠻多人在討論。
GCC:不用花錢,其實也還蠻好用的。
其它有的沒的: 比較少人用的就算了…書和資源都不好找。
書一定要用跟自己選的C開發環境一樣的,不然寫不出來哦
謝謝提醒啦,一開始也不知要買哪本書,上AMAZOM逛時剛好看到這一本,在加上這本書作者是用AVR STUDIO 加WinAVR來編寫的,軟體可以免費下載,所以就暫定用這來練習…
http://www.smileymicros.com/index.php?module=pagemaster&PAGE_user_op=view_page&PAGE_id=26
喔喔~那不錯
我也是用WinAVR~有什問題的話大家可以來討論一下 ^^
不論是 8051, PIC, AVR, ARM, x86, P4, PPC, SPARC, H8, SUPER…都一樣,只要把計算機概論第一章唸通,念懂了,真的了解了.就都會了,剩的只是動手實踐腦袋裡的觀念罷了,什麼組語,指令都一樣啦,萬法不離宗啦,希望有志者一起加油囉…
左手 HOLTEK, 右手 ARM9, 橫批 “O.S.湊熱鬧”
小弟學到不少東西,感恩!!
哈嚕您好:
很冒昧寫信給您
看到您寫了有關單晶片的知識
覺得您知識淵博
想請教您一些問題^^
小弟從小就對機器人很有興趣
可是一直都沒有機會可以朝相關的領域發展
大學研究所念的是半導體方面的科系
現在工作也是類似的方向
所以一直到現在
我都沒有接觸過程式
也不會寫韌體
只有一些最基礎的電子概念
直到最近 看到一些有關機器人的網站跟論壇
又看了一些單晶片的文章
才知道原來單晶片可以做這麼多的事情
現在的我想要自己製做一個機器人
順便利用這個機會 了解程式還有硬體之間的關係
想要請教大大的是
您是在學的時候就有接觸過電子方面跟單晶片的知識了嗎?
開始接觸機器人都是怎麼入門的呢??
我有點想去買機器人的套件來玩
不知道這樣對程式以及硬體的學習會不會有幫助呢??
我搞不太懂 一般的單晶片 如8051之類的 好像要用C語言來寫
跟那些公司發展的單晶片 要用他們自己的語言寫
有甚麼不一樣呢?
您有提到Basic Stamp,我是要先學C語言,或是先學這個語言呢??這種語言是不是只有發展機器人的單晶片會使用??跟C語言有甚麼樣的關聯性嗎??
請問您有沒有比較推薦的機器人套件
可以讓初學者了解單晶片怎麼樣運作 順便學習比較有用的程式語言(大家常用的)??
我在Lynxmotion網站 看到一台很酷的機器人
是一台六足仿生機器人 叫Phoenix
他的運動模式很酷
您會推薦這個套件嗎??
不過他買起來好像要好幾萬 而且我也不知道原廠有沒有提供整個套件的說明
您有沒有玩過甚麼類似的機器人套件呢??
您組的機器人都是用自己的單晶片 套件也是自己製作的嗎??
拉里拉雜的寫了這麼多
是因為我到現在三十歲了
才發現一個 可以實踐夢想的地方
所以有很多一直都有的問題就都寫出來了
希望您不要介意
也希望您可以給我一些建議
希望我可以展開我的機器人夢~~^^
打擾您了 感謝~~^^
希望您可以的話回到我的信箱,感謝您~~^^
可是你沒有留信箱…. XD
機器人我沒有玩耶
不過要簡單的話可以玩樂高那套NXT啦
比較不用煩惱零件的問題
程式不用先學C啦,看你要用那種程式就去學就行了~ ^^
你好
請問
使用ISP燒錄”只要在電路板上多留一組接頭連接到電腦……”
的意思是
電腦—(接頭)ISP電路板(接頭)—實習電路板
http://www.51hei.com/mcu/585.html看這篇文章對你這句話的了解
這學期上到8051實習課
看到你文章的介紹知道很多東西到底是做什麼的
EX:ICE、ISP
Hello, 51系的不一定有ISP哦(原始是沒有的)
電路版上留一組接頭的意思是..
如果你是用麵包板,那就在麵包板上把ISP對應的腳位拉出來作成接頭
至於燒錄器(也就是你貼的那個電路板),剛開始作的話建議是買現成的,會容易許多~
Hello板大你好
我現在是一名資工大四的學生
因為專題需要以UART對8051做傳輸
所以想要買一本關於這方面的書
開發環境是IAR 用的語言是C
(之前寫過組合語言但是實在很不親切ˊ ˋ)
我想請問一下
市面上賣的 “單晶片8051 使用IAR C” 書
有比較推薦哪一本嗎?
或是說其實這方面的書都大同小異
挑本自己順眼的看就好?
另外哪些資訊是建議晚輩可以先自行閱讀的
有的話煩請告知
感謝你
hi OldYa,
要寫UART的話應該大部份的書都會提到
挑一本你喜歡的就行了~
至於資訊…這樣講我也說不上來耶
也許先去下載原廠MCU的spec下來看看?
好的
感謝版大回覆
to 李ㄚ白 大大
您是那所醫工的呀,竟有教forth
因不常上本站,請您回我email
tks
我最近想跳進自動控制
但電路知識=0
請問可以加你MSN嗎?希望能向你請較一些入門的相關問題
我的MSN:netsmail@pchome.com.tw
萬分感激 ^__^
感謝大大的文章.
小弟最近開始在玩 Arduino 還有 Teensy, 它就是用AVR的單晶片. 好處是GCC和IDE做得很好, library很多很好入手.
很適合像我這種連焊槍都用不好的初學者.
我說大丙 雖然不認識你 但謝謝指教了
歡迎光臨~~ ^^
感謝你的分享~開啟許多人的單晶片之路
謝謝,你的文章正好讓我連結了碎片
也謝謝你的留言 😀
大丙是唸什麼科系的阿…
我唸建築的~ 不過業界也沒待幾年啦,就跑去寫程式了