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