- 基于Proteus和Keil C51的單片機(jī)設(shè)計與仿真
- 杜樹春編著
- 2747字
- 2018-12-27 10:36:22
1.7 工程的設(shè)置
在建立工程項目后,要對工程進(jìn)行設(shè)置。用鼠標(biāo)右鍵單擊“Target 1”,在彈出的菜單中選擇“Options for Target ‘Target 1’”,如圖1-17所示。

圖1-17 選擇工程設(shè)置
此時會彈出“Options for Target ‘Target 1’”對話框,如圖1-18所示。

圖1-18 “Options for Target ‘Target 1’”對話框
說明 進(jìn)入工程設(shè)置對話框的另一方法是執(zhí)行菜單命令“Project”→“Options for Target ‘Target 1’”。
“Options for Target‘Target 1’”對話框共有10個選項卡,這些復(fù)雜的選項大部分都可以采取默認(rèn)值,只有如下幾個與實際相關(guān)的選項要設(shè)置。
1)“Target”選項卡
Xtal(MHz):單片機(jī)的工作頻率。默認(rèn)為24.0MHz,如果單片機(jī)的晶振頻率為11.059 2MHz,則在此欄輸入“11.059 2”(單位是MHz)。
Use On-chip ROM(0x0-0x1FFF):使用片上的Flash ROM。AT89C52有8KB的Flash ROM。是否選中此選項取決于用戶的應(yīng)用系統(tǒng),如果單片機(jī)的EA引腳接高電平,應(yīng)選中這個選項;如果單片機(jī)的EA引腳接低電平,表示使用外部ROM,則不要選中該選項。本例選中此選項。
Off-chip Code memory:在片外接的ROM的開始地址和大小。在此假設(shè)使用一個片外的ROM,地址從0x8000開始(注意,不要輸入“8000”,否則會被當(dāng)做十進(jìn)制數(shù);此處要輸入十六進(jìn)制數(shù)), Size為外接ROM的大小,假設(shè)接了一個0x1000字節(jié)的ROM,應(yīng)在“Eprom”后面的“Start:”欄輸入“0x8000”,在“Size:”中輸入“0x1000”。最多可以外接3塊ROM。如果沒有外接程序存儲器,就不要輸入任何數(shù)據(jù)。
Off-chip Xdata memory:外接Xdata(外部數(shù)據(jù)存儲器)的起始地址和大小。本例指定Xdata的起始地址為0x2000,大小為0x8000,因此應(yīng)在“Ram”后面的“Start:”欄中輸入“0x8000”,在“Size:”欄中輸入“0x1000”。如果沒有外接數(shù)據(jù)存儲器,就不要輸入任何數(shù)據(jù)。
Code Banking:使用Code Banking技術(shù)。Keil可以支持程序代碼超過64KB的情況,最大可以有2MB的程序代碼。如果代碼超過64KB,就要使用Code Banking技術(shù),以支持更多的程序空間。Code Banking是一個高級的技術(shù),支持自動的Bank切換,是建立一個大型系統(tǒng)的必要技術(shù)。例如,要在單片機(jī)里實現(xiàn)漢字字庫,實現(xiàn)漢字輸入法,都要用到該技術(shù)。在這里不選它。
Memory Model:用鼠標(biāo)單擊“Memory Model”欄的下拉箭頭,會出現(xiàn)如圖1-19所示的3個選項。
? Small: variables in DATA變量存儲在內(nèi)部RAM。
? Compact: variables in PDATA變量存儲在外部RAM,使用8位間接尋址。
? Large: variables in XDATA變量存儲在外部RAM,使用16位間接尋址。

圖1-19 “Memory Model”欄的下拉菜單
一般使用Small方式來存儲變量,即單片機(jī)優(yōu)先把變量存儲在內(nèi)部RAM,如果內(nèi)部RAM不夠了,才會存到外部RAM。
Compact方式要用戶通過程序來指定頁的高位地址,編程比較復(fù)雜。如果外部RAM很少,只有256B,那么對256B的讀/取就比較快,用MOVX@Ri,A或MOVX A,@Ri指令即可。如果超過256B,就要不斷地進(jìn)行切換,這就比較麻煩。Compact模式適用于外部RAM比較少的情況。
Large模式是指變量會優(yōu)先分配到外部RAM,用MOVX A,@DPTR或MOVX@DPTR,A來讀取。要注意的是,3種存儲方式都支持內(nèi)部256B和外部64KB的RAM,區(qū)別是變量的優(yōu)先(或默認(rèn))存儲位置不同。除非不想把變量存儲在內(nèi)部RAM,才會使用Compact或Large模式。因為變量存儲在內(nèi)部RAM的運(yùn)算速度比存儲在外部RAM的運(yùn)算速度要快得多,大部分的應(yīng)用都選擇Small模式。使用Small模式,也不是說變量就不可以存儲在外部RAM,只是需要做如下指定:
unsigned char xdata a變量a存儲在外部RAM。 unsigned char a變量a存儲在內(nèi)部RAM。
Code Rom Size:單擊“Code Rom Size”欄的下拉箭頭,會出現(xiàn)如圖1-20所示的3個選項。

圖1-20 “Code Rom Size”欄的下拉菜單
? Small:program 2K or less適用于AT89C2051。AT89C2051只有2KB的代碼空間,所以跳轉(zhuǎn)地址只有2KB,編譯時會使用ACALL、AJMP這些短跳轉(zhuǎn)指令,而不會使用LCALL、LJMP指令。如果代碼跳轉(zhuǎn)超過2KB,則會出錯。
? Compact:2K functions,64K program表示每個子函數(shù)程序的大小不超過2KB,整個工程可以有64KB的代碼。就是說在main()里可以使用LCALL、LJMP指令,但在子程序里只會使用ACALL、AJMP指令。除非確認(rèn)每個子程序不會超過2KB,否則不要用Compact方式。
? Large:64K program表示程序或子函數(shù)都可以大到64KB(使用Code Bank時還可以更大),通常都選用該方式。Large方式的速度不會比Small的慢很多,所以一般沒有必要選擇Compact或Small方式。本例選擇Large方式。
Operating:單擊“Operating”欄的下拉箭頭,會出現(xiàn)如圖1-21所示的3個選項。

圖1-21 “Operating”欄的下拉菜單
? None表示不使用操作系統(tǒng)。
? RTX-51 Tiny表示使用Tiny操作系統(tǒng)。
? RTX-51 Full表示使用Full操作系統(tǒng)。
Keil C51提供了Tiny系統(tǒng)(Demo版沒有Tiny系統(tǒng),正版軟件才有),Tiny系統(tǒng)是一個多任務(wù)操作系統(tǒng),使用定時器0來做任務(wù)切換。一般用11.059 2MHz時,切換任務(wù)的速度為30ms。如果有10個任務(wù)同時運(yùn)行,那么切換時間為300ms。同時,不支持中斷系統(tǒng)的任務(wù)切換,也沒有優(yōu)先級。因為切換的時間太長,實時性大打折扣,多任務(wù)情況下(如5個),完成一輪切換就要150ms,150ms才處理一個任務(wù),連鍵盤掃描任務(wù)都無法實現(xiàn),更不要說串口接收、外部中斷等。同時切換需要大概1 000個機(jī)器周期,對CPU資源的浪費(fèi)很大,對內(nèi)部RAM的占用也很厲害。實際上用到多任務(wù)操作系統(tǒng)的情況少之又少。多任務(wù)操作系統(tǒng)一般適合于16位或32位的CPU,不適合于8位的CPU。
Keil C51 Full Real-Time OS是比Tiny要好一些的系統(tǒng),支持中斷方式的多任務(wù)和任務(wù)優(yōu)先級,但需要使用外部RAM。Keil C51不提供該運(yùn)行庫,需要另外購買。
Keil的多任務(wù)操作系統(tǒng)的思想值得學(xué)習(xí),特別是任務(wù)切換的算法,如何切換任務(wù)和保存堆棧等有一定的研究價值。如果熟悉了其切換的方法,可以編寫更好的切換程序。本書不推薦大家使用多任務(wù)操作系統(tǒng),本例選擇“None”。Target工程設(shè)置完成后的“Options for Tar-get ‘Target 1’”對話框如圖1-22所示。

圖1-22 Target工程設(shè)置完成后的“Options for Target ‘Target 1’”對話框
2)“Output”選項卡
Select Folder for Objects:單擊這個按鈕可以選擇編譯之后的目標(biāo)文件存儲在哪個目錄里,如果不設(shè)置的話,就在工程文件的目錄里,如圖1-23所示。

圖1-23 “Output”選項卡
Name of Executable:設(shè)置生成的目標(biāo)文件的名字,默認(rèn)跟工程的名字是一樣的。目標(biāo)文件可以生成庫或obj、hex的格式。
Create Executable:生成OMF及HEX文件。
? Debug Information和Browse Information:一般要選中這兩個選項,這樣才有詳細(xì)調(diào)試所需要的信息。例如,要做C語言程序的調(diào)試,若不選中這兩項,調(diào)試時將無法看到高級語言程序。
? Create Hex File:要生成Hex文件,必須選中此選項。
? Create Library:選中此選項時,將生成lib庫文件。一般的應(yīng)用是不需要生成庫文件的。
After Make
? Beep When Complete:編譯完成后,發(fā)出“咚”的聲音。
? Start Debugging:馬上啟動調(diào)試(軟件仿真或硬件仿真)。一般不選中。
? Run User Program#1,Run User Program#2:可以設(shè)置編譯完成后運(yùn)行別的應(yīng)用程序,如有些用戶自己編寫的燒錄芯片的程序(編譯完便執(zhí)行將Hex文件寫入芯片),或者調(diào)用外部的仿真程序。根據(jù)自己的需要進(jìn)行設(shè)置。
3)“Listing”選項卡 Keil C51在編譯后除了生成目標(biāo)文件外,還生成*.lst和 *.m51的文件。這兩種擴(kuò)展名的文件對了解程序用到了哪些idata、data、bit、xdata、code、ram、rom、stack等有很重要的作用。有些用戶想知道自己的程序需要多大代碼空間,就可以從這兩個文件中尋找答案。一般應(yīng)按照圖1-24所示進(jìn)行設(shè)置。若不想生成某些內(nèi)容,可以取消相應(yīng)的選項。

圖1-24 “Listing”選項卡
Assembly Code:選中會生成匯編的代碼。
Select Folder for Listings:選擇生成的列表文件存放的目錄。若不選擇,則使用工程文件所在的目錄。
4)其他 除上述3個選擇卡外,“C51”、“A51”等6個選擇卡一般都不用設(shè)置,采用默認(rèn)值即可。
上述設(shè)置完成后,單擊“確定”按鈕回到主界面,工程設(shè)置完畢。
- 單片機(jī)基礎(chǔ)及應(yīng)用項目式教程
- TinyML:基于TensorFlow Lite在Arduino和超低功耗微控制器上部署機(jī)器學(xué)習(xí)
- 單片機(jī)應(yīng)用項目化教程
- 51單片機(jī)逆向?qū)W習(xí)實戰(zhàn)教程(電子設(shè)計與嵌入式開發(fā)實踐叢書)
- 單片機(jī)應(yīng)用基礎(chǔ)教程(第二版)
- 零起點學(xué)Proteus單片機(jī)仿真技術(shù)
- PIC單片機(jī)常用模塊與綜合系統(tǒng)設(shè)計實例精講
- ANSYS Workbench 17.0有限元分析從入門到精通
- STM32W無線射頻Zigbee單片機(jī)原理與應(yīng)用
- 嵌入式Linux軟硬件開發(fā)詳解:基于S5PV210處理器
- 單片機(jī)技術(shù)及應(yīng)用(第2版)
- STC 32位 8051單片機(jī)原理與應(yīng)用
- 案例解說組態(tài)軟件典型控制應(yīng)用
- 嵌入式通信系統(tǒng)
- 嵌入式系統(tǒng):基于項目的分析和設(shè)計