SDCC – Small Device C Compiler,一套功能強大而且免費的C語言編譯器,它小巧(僅2MB)、它超強、沒有程式碼大小的限制、也沒有起始位置必須在0×0800的限制、但它只認識C語言!
不過就因為它體積小,所以是採用Command的方式運行(一分錢一分貨啊),不過這也沒有關係~因為總是有許多好心人幫忙弄出一些不同的東西,那就是MIDE-51啦!!
接下來將介紹如何利用MIDE-51來做8051 C語言的編譯!
我想我還是做點MIDE-51的視窗介紹好了
ToolBar group:工具列,就…工具列啊
Line Number..:行號,方便好用的東西
File Workspace:檔案工作區,你所開啟的檔案列表
Outputmessage:輸出訊息,所有編譯的結果、錯誤、警告…等都在此顯示
【軟體名稱】:Mide-51
【軟體語言】:英文
【軟體性質】:免費軟體、程式編譯
【支援環境】:Windows(含Vista)
【軟體網站】:http://www.opcube.com/home.html
File(檔案):
New: 開新檔案
Open:開啟舊檔
Recent Files:最近使用的檔案
Save:儲存 Save As:另存新檔
Close:關閉檔案 Close All:關閉所有檔案
Print Previews:預覽列印 Print:列印
Exit:離開程式
Edit(編輯):
Undo:復原
Redo:重做
Cut:剪下
Copy:複製
Paste:貼上
Select: All:全選
Find:尋找 Replace:取代 Find next:找下一個
Line number:行號(開啟/關閉)
Preference:偏好設定
Selection(選擇):
字型大小設定
Device(裝置):
選擇晶片類型,用於模擬
Build(建立):
Build:編譯/組譯
Build and Sim:編譯/組譯然後模擬(有內建的程式,但是我不會用)
Build and Burn:編譯/組譯然後燒(須先設定燒錄程式,但是我不會設定)
Windows(視窗):
調整視窗的排列方式
Help(幫助):
裡面有ASEM-51以及SDCC的使用手冊,英文。
而那些快捷按鈕就對照英文就好了,不另外再介紹,造成不方便請見諒!
介紹玩了常用工具列與中文翻譯之後,相信大家對MIDE-51應該有了初步的認識,接下來我們就要進入正題!
SDCC與Keil C的使用定義有些不同,而且它的定義有些怪怪的,所以我參考8052.tw的影片,自己弄了一個Header檔,內容如下:
(2010/01/30發現:已可使用如Keil C下的語法撰寫程式)
// Header file for SDCC IO define #ifdef SDCC #define P0_0 0x80 #define P0_1 0x81 #define P0_2 0x82 #define P0_3 0x83 #define P0_4 0x84 #define P0_5 0x85 #define P0_6 0x86 #define P0_7 0x87 #define P1_0 0x90 #define P1_1 0x91 #define P1_2 0x92 #define P1_3 0x93 #define P1_4 0x94 #define P1_5 0x95 #define P1_6 0x96 #define P1_7 0x97 #define P2_0 0xA0 #define P2_1 0xA1 #define P2_2 0xA2 #define P2_3 0xA3 #define P2_4 0xA4 #define P2_5 0xA5 #define P2_6 0xA6 #define P2_7 0xA7 #endif
請把這些程式碼複製下來,然後用記事本存成一個名為51port.h的檔案。
再來請把這隔Header檔放到C:\MIDE\sdcc\include\mcs51\(安裝程式的路徑),這樣就成為了新的include~
這個Heade對寫程式有很大的幫助喔,請各位別客氣,趕快收下它吧!
使用方法與範例:
/*Single.9 example*/#include "8051.h" /*SDCC的8051設定*/#include "51port.h" /*剛剛的Header檔,新版可忽略*/sbit at P1_0 led; /*定義8051的P1.0識別名稱為led, 在SDCC的原始設定中是要這樣打的 sbit at 0×90 led;*//*-------延遲-------*/delay(int d) { int x, y; for(x=0; x<d;x++); for(y=0; y<100; y++); } /*-------LED閃爍-------*/led() { int i; for(i=0; i<2; i++) { wled=0; delay(50); wled=1; delay(50); } } /*-------主程式-------*/main() { while(1) led(); /*一直閃爍*/}
View Comments
難得可以碰到這種東西 實在是萬分感謝
不客氣 =D
不錯,這樣算是初步認識了MIDE 51,也可以藉由你的範例來測試一下,謝謝。
範例好像有點問題...XD
謝謝您的分享!無論有無問題都是一個學習.
:)
有組譯低皆組合語言軟體?Win7版