Keil C51詳細設定

2021-07-06 09:39:32 字數 4438 閱讀 1077

2013-12-10 19:41

251人閱讀收藏 

舉報2010-12-30 19:54:39

|  分類:

常用eda軟體|字型大小

訂閱 一.target名更改

開啟keil後,左側project workspace中的target可改,方法:右擊target——manage compnents——雙擊待修改項即可,若要新增,使用對話方塊內對應工具欄。

二.option for target 設定之target項

1 memary model

small:變數儲存在內部ram裡.

compact:變數儲存在外部ram裡,使用頁8位間接定址

large:變數儲存在外部ram裡,使用16位間接定址. 

我們一般使用small來儲存變數,就是說微控制器優先把變數儲存在內部ram裡,如果內部ram不夠了,才會存到外部去.compact的方式要自己通過程式來指定頁的高位位址,程式設計比較複雜,如果外部ram很少,只有256個位元組,那麼對該256個位元組的讀取就比較快,用movx @ri,a 或movx a,@ri指令.

如果超過256位元組,那麼要不斷地進行切換的話,就比較麻煩.compact模式適用於比較少的外部ram的情況.large模式,是指變數會優先分配到外部ram裡,用movx a,@dptr或movx @dptr,a來讀取.要注意的是,3種儲存方式都支援內部256位元組和外部64k位元組的ram.區別是變數的優先(或缺省)儲存在**的區別.除非你不想把變數儲存在內部ram,才使用後面的compact,large模式.因為變數儲存在內部ram裡,運算速度比儲存在外部ram要快的多,大部分的應用都是選擇small的模式.使用small的方式:也不是說變數就不可以儲存在外部,一樣可以儲存在外部,只是你要指定,比如:

unsigned char xdata a;那麼變數a就儲存在外部的ram.

unsigned char a;變數儲存在內部ram.

假如用large的模式:

unsigned char xdata a;那麼變數a就儲存在外部的ram.

unsigned char a;變數儲存在外部ram.

這就是區別,就是說這幾個選項只是影響沒有特別指定變數的儲存空間的時候,預設儲存在**,比如上面的變數定義unsigned char a .

2. code rom size

small: program 2k or less ;適用於89c2051這些晶元,2051只有2k的**空間,所以跳轉位址只有2k,編譯的時候會使用acall ajmp這些短跳轉指令,而不會使用lcall,ljmp指令.如果你的**跳轉超過2k,那麼會出錯. 

compact:2k functiongs ,64k program:表示每個子函式的程式大小不超過2k,整個工程可以有64k的**.就是說在main()裡可以使用lcall, ljmp指令,但在子程式裡只會使用acall,ajmp指令.除非你確認你的每個子程式不會超過2k,否則不要用compact方式.

large:64k program:表示程式或子函式都可以大到64k.使用code bank還可以更大.通常我們都選用該方式.code rom size選擇large方式速度不會比small慢很多,所以一般沒有必要選擇compact和small的方式.我們這裡選擇large方式.

3. operating

none:不適用作業系統

rtx51-tiny:使用tiny作業系統

rtx-full:使用full作業系統

keil c51 提供了tiny多工作業系統,使用定時器0來做任務切換,效率很低,無實用價值。full需要使用者使用外部ram,且需要單獨購買執行庫,不能使用,預設選none。

4. 儲存器選擇

1. use on-chip rom(0x0-0x1fff)

這個選項是使用片上的flash rom,我們知道at89c52有8k的flash rom.取決於你的應用系統,你的微控制器的ea接高電平的話,請選中這個選項,如果你的微控制器的ea接低電平,表示使用外部rom,那麼不要選中該選項.我們在這裡選中它

2. off-chip co

de memory

表示你在片外接的rom的開始位址和大小,如果你沒有外接程式儲存器,那麼不要填任何資料.我們在這裡假設使用乙個片外的rom,位址從0x8000開始(不要填成8000,如果是8000,是10進製的數,一般填16進製制的數),size為外接rom的大小.假設接了一塊0x1000位元組的rom.最多可以外接3塊rom,如果你還用了別的位址,那麼就添上.

3. off-chip xdata memory 

那麼可以填上你外接的xdata(外部資料儲存器的起始位址和大小,一般的應用是接乙個62256,我們在這裡特殊的指定xdata的起始位址為0x2000,大小為0x8000;

5. co

de banking

使用code banking技術.keil可以支援程式**超過64k的情況,最大可以有2兆的程式**.如果你的**超過64k,那麼就要使用code banking技術,以支援更多的程式空間.code banking是乙個高階的技術,支援自動的bank的切換,是建立乙個大型系統的需要,比如你要在微控制器裡實現漢字字型檔,實現漢字輸入法,都要用到該技術.我們會在以後的文章裡論述bank技術.我們在這裡不選中它.

二.option for target 設定之output項

select folder for object:選擇編譯之後的目標檔案所存放的目錄,預設存放在工程資料夾中。

name of executable:設定生成的目標檔案的名字,預設是工程名。

creat executable:生成omf和hex檔案,omf檔名同工程檔名但沒有副檔名。

creat hex file:選中該項編譯後生成可以少些的hex檔案。

creat library:生成lib庫檔案,預設不選。

after make :1.beep when complete:編譯完成後提示聲響

2.start debugging:編譯完成後馬上啟動除錯(軟體**或硬體**),預設不選中

3.run user program1,run user program2:根據需要設定編譯之後的應用程式,比如自己編寫的燒寫晶元的程式,或呼叫外部**程式。

3.listing

select folder for listings:選擇列表檔案存放的目錄,預設為工程檔案所在的目錄。

*.lst,*.m51檔案對了解程式用到了哪些idata、data、bit、xdata、code、ram、rom、stack等有很重要的作用。

assembly code生產彙編的**,根據需要決定是否選擇。

4.c51

用於對keil的c51編譯器編譯過程進行控制,其中比較常用的是「code optimization」組,該組中level是優化等級,c51在對源程式進行編譯時可以對**多至9級優化,預設使用8級,一般不必修改。如果在編譯中出現一些問題可以降低優化級別試一試。

emphasis是選擇編譯優先方式,第一項是**量優化(最終生成的**量小),第二項是速度優先(最終生成的**速度快),第三項是預設的,是速度優先,可根據需要更改。

5.bl51 locat

使用keilc51軟體,可以很方便地將**或者資料絕對定位到某個位址。

1、**定位:

方法1:使用偽指令cseg。比如要將myfunc1定位到**區c:0x1000,則新建乙個a51檔案,新增以下內容:

public  myfunc1

cseg at 1000h

myfunc1:

;其它**

ret在其它原始檔中,就可以呼叫myfunc()函式了。需要注意的是,編譯器不檢測傳遞引數的數目,僅檢測函式是否有返回值。

方法2:使用bl51 locate選項。比如在main.c中定義了乙個myfunc2函式,並且要將該函式定位到**區c:0x2000,則從選單中選擇project->options for target 'target1',在彈出的對話方塊中選擇bl51 locate頁,在下面的code欄中寫上?pr?myfunc2?main(0x2000)即可。

如果想定位多個函式,也可以使用*萬用字元。 

2、變數定位:

只有全域性變數可以絕對定位,區域性變數無法實現絕對定位。

方法1:使用_at_關鍵字。宣告乙個全域性變數unsigned char data mybuf1[8] _at_ 0x20;

方法2:使用bl51 locate選項。比如將main.c中定義的所有data型的全域性變數定位到資料區d:0x28開始的空間,則從選單中

選擇project->options for target 'target1',在彈出的對話方塊中選擇bl51 locate頁,在下面的data欄中寫上?dt?main(0x28)即可。

如果是idata,則使用?id?main(0x28),如果是xdata,則使用?xd?main(0x28),如果是pdata,則使用?pd?main(0x28)

3、堆疊定位:

在startup.a51檔案中定義了堆疊區?stack,其起始位址同樣可以在bl51 locate頁中設定,在stack欄寫上?stack(0x80)

Keil C51詳細設定

一.target名更改 開啟keil後,左側project workspace中的target可改,方法 右擊target manage compnents 雙擊待修改項即可,若要新增,使用對話方塊內對應工具欄。二.optionfor target 設定之target項 1 memary model...

KEIL C51 程式編譯

1.keil目錄 asm 放置組合語言的標頭檔案,格式為xx.inc。inc是include的簡寫。inc 放置c語言的標頭檔案,格式為xx.h。hlp 幫助檔案。help的簡寫。example 例子。rtxtiny2 keil自帶的rtx51作業系統。flashmon,mon51,mon390 目...

KEIL C51 和 ANSI C 的區別

不同系列的嵌入式系統的c編譯器,根據它所對應的不同晶元系列有其各自的特點,在這裡,以keil公司的針對51系列的keilc51編譯器為例,簡要說明它與ansi c的主要區別,其它的編譯系統與ansi c的差別,可具體參照指定編譯系統手冊,找出它們的不同之處。清楚嵌入式系統的c編譯器與標準 ansi ...