2005年8月13日

狂寫8051程式中~~

我的指導教授要我當助教,接微處理機實習的課程,把 8051板子、8051 ICE 還有三本書丟給我就開始了狂寫 8051 的生活......

說起來,8051也好久沒寫了,主要寫8051還是在高職,二專時候寫過,不過僅僅只是寫個紅綠燈,比在高職寫的還要簡單的多,算起來,到現在也有5,6年沒碰8051了,不過既然寫到這裡,表示一定有些新的想法出現啦~~~

8051很久沒寫了,不過重拿板子、ICE,卻發現除了 ICE 的程式改用了 WINICE 之外,其他的東西一點都沒改變,連附的compiler、linker都還是和我高職用的一模一樣,傳說中的『A.D. shareware』的X8051 Assember,日期為1990年..........

我是不知道大家在 Windows 上用起來感覺怎麼樣啦,但是我對它在 Windows 2000 上的使用很有些意見,經常會出現『程式出現異常錯誤強制結束』還有就是每次執行之後,命令提示字元的分頁碼就會跳掉......看起來很醜,對於使用上,也沒有任何的help可以查看,用起來,感覺很差~~

基於上面的原因,我就到網路上找,看看有沒有代用品,最好是我最喜歡的,便宜又大碗的OpenSource的.... :D
果然被我找到了,網址如下:
http://www.pjrc.com/tech/8051/

這個網址直接將 8051 的 Compiler 和 Assember 打包成安裝檔,很方便就能安裝,而它的 Assember 叫做 AS31,授權是使用 BSD 授權;而 Compiler 叫做 SDCC,授權是 GPL 授權.......

而且提供你在 Linux 和 Windows 上都能使用,從此後,會看到有瘋子在 Linux 寫 8051 程式...... :p

ok......我從上面的事件來帶出另一件事情,這件事情主要是從下面這個網址得到的體會:
http://www.lairy.com/8051c.htm

這個網址的作者我還在不知不覺中,買過他的書說..... :p
他在這篇文章提到的觀點非常漂亮,非常合我的胃口,我想說的事情和他說的差不多,說說自己的感想.........

8051,是世界上最成功的微處理器(你要說我定義錯誤,它叫微電腦.....ok...我只是帶一下名稱而已....)之一,雖然它是 8 位元的 處理器,但是卻被應用在非常非常多的場合;雖然它非常好用,可是,它的出現到現在,有沒有20年了?
儘管它非常強,但過了20年,它還是8051,學校教的,還是自走車、警報器.........
有沒有更新一點的想法,更新一點的應用?

答案似乎頗讓人失望,難道 8051 在這 20 年沒有進步嗎?
8051在全世界的傳奇,難道只因為它能夠做自走車、警報器嗎?
這些答案都是否定的,既然答案是否定的,那麼我們就該有新的想法、新的創意,看看文章裡提到的觀點,8051已經不再是那個很大顆的IC,現在訪間已經有非常多變種的8051,不但價格便宜,而且在不同的場合,會有不同種類的8051可以使用,例如他提到了大量IO的場合,又例如他提到高速的場合,都是8051現在的樣貌.............

除此之外,他也提到,8051寫了20年,為啥還是組合語言?
去網路上用google搜尋看看,8051有C Compiler、BASIC Compiler....等,而且傳統上認為,組合語言速度快、程式小,但是當8051速度變快時,C和組合語言的差異性其實降低了,然而用C語言來開發8051,程式的複雜度卻能提高;舉個例子,現在常看到機器人的實習,在益眾這些公司來說,都還是最新的東西,機器人的複雜度這麼高,用組合語言來寫,雖然也會動,但可以預料的是,會寫的很辛苦、很複雜,而且效率不好,因為它太複雜了,用組合語言來寫,很容易陷入程式碼堆中,要在寫出些花俏的動作,每個都是大工程~~
用C寫,可以直接預料得到,彈性會大一些,用來寫這樣的大系統,相對會容易些~~

進一步來說,在網路上,許多人在討論的,是8051能不能上作業系統,討論的結論好像是uC/OSII 好像可以上,上了作業系統有啥好處?
假使上了作業系統,8051可以進行多工,可以將程式都分開寫、分開執行,而且可以進一步放一些像網路之類複雜的功能進去,它的彈性又比C語言開發傳統無作業系統的程式要來得更高,這些是現在8051在做的事~~

此外,8051 過了這麼多年,同學們學它是為了什麼?
之前在網路上討論 USB 的論壇看到一篇,得到了答案,那一篇的作者提到,它很喜歡用一顆飛利浦的USB2.0 chip,這顆USB2.0 chip它的底層是使用8051,所以要寫它的fireware,就直接是8051的語法~~

看到這裡,有沒有傻掉的感覺!?
事實上,學習8051的原因正是在此,它是全世界最成功的處理器之一,它背後代表的是,它有龐大的資源和應用,許多8051的變種出現,也有許多奇怪的場合,它的開發其實會是使用8051的開發方式;正因為如此,8051在現在甚至是未來,依舊都能夠生生不息持續的使用下去,而且事實上,現在VHDL、Verilog這些硬體描述語言發達的時代,網路上已經有許多免費的8051的IP Core可以免費使用,也可以預期到許多學校在學習開發VHDL、Verilog時,會以8051作為對象,進行第一顆處理器的實驗開發,由這些訊息,我們可以肯定一點,8051要在10年內淘汰,那是不可能的事情,隨著時代的進步,8051也會跟著時代的腳步,跟著時代進步~~

8 則留言:

ZuoMin 提到...

您好:

本人的OS是 Linux ,最近有打算要做8051 的程式開發。我瀏覽到您的文章,對於其中提到有關可以在Linux 的 OS 之下做 8051 程式的開發有興趣。想請教一下,如果我抓到了在Linux 之下的開發軟體、如assembler, linker,那麼,我要如何找到可以配合這些軟體的硬體呢??? 或是只要是買得到的硬體(如USB燒錄器),這些軟體就一定會支援呢???

阿呆 提到...

8051的開發跟平台不完全有關,主要是要看Assembler、Compiler、模擬器和燒錄機的平台相依狀況來決定。
文章中提到Assembler和Compiler支援Linux的意思是,目前8051的Assembler和Compiler有OpenSource的版本,這類版本有提供跨平台的支援,可以在Windows、Linux上執行;意思是,你可以在Linux上用記事本(gedit)寫8051的程式並且編譯。
要驗證程式的執行,往往會需要模擬器或燒錄機,模擬器的功用是讓你不用燒錄到8051,直接就可以模擬看結果,當然,模擬有些東西是做不到的,像UART的測試...。那要把8051的程式放到8051上執行,自然需要燒錄機。但不幸的是,模擬器和燒錄機大多是Windows寫的,如果要找Linux版本,可能還需要google一下,看看Linux下有沒有相對應的程式或驅動程式(可以操作燒錄機的程式)可以使用。

ZuoMin 提到...

謝謝您的回答

不好意思,那我再請問一下,我在 Source Forge 有找到若干種燒錄器 (8051 Programmer),如

* prog51 - 8051 programmer

* MCU 8051 IDE

* Software Driver for 8051 AVR Programmer

這些軟體是可以使用在 Linux 上沒有錯。然而,他卻沒有指明相對的硬體。我在想,如果他的燒錄器是自製、且軟體開發是針對他這自製的燒錄器的話,就應該會有詳細的燒錄器的說明,或至少有這燒錄器的型號、或廠牌,然而,好像都找不到這個資料。因此是否現有的燒錄器的設計都尊循著一些 「約定」使得燒錄器的軟體設計都可以通用呢???

阿呆 提到...

您提供的資訊相當不錯,都是很不錯的開發工具,也算是給我長了見識。哈~
我這幾個工具有去看了下。

prog51是8051的燒錄程式沒錯,至於這個燒錄程式相對應的硬體,是一個Printer Port的燒錄線,可以自己DIY,線的IO腳對應寫在README當中,不過我印象中,Printer Port的燒錄機好像沒看過... = =

MCU 8051 IDE我個人大推~它應該能夠滿足你們大部分的需求,從介紹頁看起來。
1. 它是一套非常完整的開發工具,你可以想成是開發8051的Visual Studio,裡面的功能非常齊全,且有提供針對8051的編輯器,還有語法變色的效果
2. 這套工具支援的8051型號非常多,一般專科專題會用到的多半是AT89C51、AT89C2051它都支援,算是很方便
3. 這套裡面直接內建了模擬器,而且模擬器看起來功能很強,包括了LED、七段顯示器、4x4鍵盤、點矩陣LED似乎都有提供,而且好像可以模擬拉線,這真的很屌,當然,一般模擬器有的IO輸出顯示、單步執行、記憶體修改、查看都有
4. 這套工具有提供燒錄功能,但是它的燒錄功能是支援RS-232的燒錄機,並且它好像有提供這個RS-232燒錄機的電路設計,相當不錯,可以自己按照它電路做一台RS-232的8051燒錄機

缺點有:
1. 這套僅支援Linux,用了之後,開發就被綁死在Linux上,當然,我個人是很支持Linux的,這麼強的工具被綁死我也頗甘願,但問題是,Y拍、露天、學校的燒錄機和開發環境,不能擔保都是Linux,code是沒問題,反正都是純文字,但要模擬之類的可能就需要針對不同環境設定了
2. 這個IDE目前明確說了不支援任何USB的燒錄機,所以Y拍、露天賣的大陸製USB燒錄機很大機會是不能用的

Software Driver for 8051 AVR Programmer這套看起來,2004年就不再維護了,似乎不怎樣,沒細看~

最後,關於您提到的問題。
基本上,現在的8051您可以去找各型號的DataSheet,裡面非常可能會描述「如何燒錄」,通常會提供的資訊是,燒錄的腳位哪幾隻、燒錄的電壓,可能還會有資料傳輸的速度(燒錄資料時資料傳輸的時脈)之類的,原則上每顆8051(MCU)可能不完全一致,這很大程度要看出品的廠商和類別,因此市面上的「通用燒錄機」,通常會有一張支援表,列出所有支援的MCU型號,而韌體會更新,每次更新就可以增加支援的型號,因為它事實上就是根據不同8051的DataSheet去設定腳位、電壓和傳輸速度。
傳統RS-232或Painter Port的燒錄機比較好處理,因為它的格式是固定的,也不需要驅動程式,但因為速度慢,所以現在很多都改用USB。
USB的燒錄機,就我的認知,應該是用AVR之類的8051做成的,這類的8051通常直接提供USB的controler,可以讓你直接在8051上開發USB,通常也就當成RS-232開發。
不過目前USB的設備,因為需要相關的驅動程式,讓設備的操作差異性很大,所以比較少看到相關的支援,所以設計的確是通用的,都根據很多MCU的燒錄方式定義到程式,然後由燒錄機去燒錄,所以Open的RS-232、Printer Port燒錄線、機很多,但牽涉到USB之後,目前除了商業版之外,Open的很少看到支援。

ZuoMin 提到...

感謝阿呆提供的資訊,如此一來,我就比較知道我該要如何去著手打造 Linux 下的單晶片開發環境了,如果有什麼有趣的結論,我會再跟你說囉~~~

IvanKe 提到...

您在文中提到
『ok......我從上面的事件來帶出另一件事情,這件事情主要是從下面這個網址得到的體會:
http://www.lairy.com/8051c.htm』

不過那個網址失聯了耶!
請問您有替代的嗎?我想看看他裡面到底寫了些什麼。

謝謝~~

阿呆 提到...

抱歉,上班了,變得比較沒時間維護blog。

剛剛稍微找了一下,原作者是「賴老師影音工作室」,它現在搬家了,搬到了http://www.lairy.com.tw/yellowpage/index.html。

而它這篇文章,則搬到了:
http://www.lairy.com.tw/yellowpage/8051c.htm

我還買過他出的SoftICE破解的書哩...哈...

阿呆 提到...

附帶一題,書末提到的其他參考書籍中,提到的「益眾資訊有限公司出版的『8051 C語言寶典』,作者是鄧錦城老師,鄧老師可以說只要能寫8051的各種語言他都精通」。
鄧錦城老師還是我高職時候的老師哩...