Keil C51詳細設定

2021-07-04 15:37:10 字數 4305 閱讀 3172

一.target名更改

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

二.optionfor 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.

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

2. code rom size

small: program 2k or less ;適用於89c2051這些晶元,2051只有2k的**空間,所以跳轉位址只有2k,編譯的時候會使用acallajmp這些短跳轉指令,而不會使用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 code 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. code banking

使用code banking技術.keil可以支援程式**超過64k的情況,最大可以有2兆的程式**.如果你的**超過64k,那麼就要使用codebanking技術,以支援更多的程式空間.codebanking是乙個高階的技術,支援自動的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 userprogram2:根據需要設定編譯之後的應用程式,比如自己編寫的燒寫晶元的程式,或呼叫外部**程式。

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 fortarget '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詳細設定

2013 12 10 19 41 251人閱讀收藏 舉報2010 12 30 19 54 39 分類 常用eda軟體 字型大小 訂閱 一.target名更改 開啟keil後,左側project workspace中的target可改,方法 右擊target manage compnents 雙擊待修...

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 ...