1. 程式人生 > >Keil C51詳細設定

Keil C51詳細設定

一.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個位元組的讀取就比較快,用
[email protected]
,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)
4.函式定位:
假如要把C原始檔 tools.c 中的函式
int BIN2HEX(int xx)
{
  ...
}
放在CODE MEMORY的0x1000處,先編譯該工程,然後開啟該工程的M51檔案,在
* * *   C O D E   M E M O R Y   * * *
行下找出要定位的函式的名稱,應該形如:
CODE    xxxxH     xxxxH    UNIT         ?PR?_BCD2HEX?TOOLS
然後在:
Project->Options for Target ...->BL51 Locate:Code
中填寫如下內容:
?PR?_BCD2HEX?TOOLS(0x1000)
再次Build,在M51中會發現該函式已放在CODE MEMORY的0x1000處了
2、賦初值的變數定位:
要將某變數定位在一絕對位置且要賦初值,此時用 _at_ 不能完成,則如下操作:
在工程中建立一個新的檔案,如InitVars.c,在其中對要處理的變數賦初值(假設是code變
量):
char code myVer = {"COPYRIGHT 2001-11"};
然後將該檔案加入工程,編譯,開啟M51檔案,若定義的是code型,則在
* * *   C O D E   M E M O R Y   * * *
下可找到:
CODE    xxxxH     xxxxH    UNIT         ?CO?INITVARS
然後在:
Project->Options for Target ...->BL51 Locate:Code
中填入:
?CO?INITVARS(0x200)
再次編譯即可。
相應地,如為xdata變數,則InitVars.c中寫:
char xdata myVer = {"COPYRIGHT 2001-11"};
然後將該檔案加入工程,編譯,開啟M51檔案,在
* * *  X D A T A   M E M O R Y  * * *
下可找到:
XDATA   xxxxH     xxxxH    UNIT         ?XD?INITVARS
然後在:
Project->Options for Target ...->BL51 Locate:Xdata
中填入:
?XD?INITVARS(0x200)
再次編譯即可。相應地,若定義的是data/idata等變數,則相應處理即可。
3、若有多個變數或函式要進行絕對地址定位,則應按地址從低到高的順序排列。

相關推薦

Keil C51詳細設定

一.target名更改        開啟Keil後,左側Project Workspace中的target可改,方法:右擊Target——Manage Compnents——雙擊待修改項即可,若要新增,使用對話方塊內對應工具欄。 二.optionfor target 設定

利用keil c51生成hex如何設定ROM

我使用at89s52(256RAM,8K的ROM),程式編譯後顯示program Size: data=56.0 xdata=0 code=3529。我的電路中無外部ROM,為了使生成的hex程式碼只儲存在該片at89s52,我怎麼設定呢?選small肯定不行,因為我的程式碼大於2K;若選compact,程

Keil、uVision、RealView、MDK、Keil C51之間的區別

cortex-m 發的 都是 工具集 vision arm 不能 因此 單片機 Keil、uVision、RealView、MDK、Keil C51之間的區別 我們要區別的概念:KEIL uVision,KEIL MDK,KEIL For ARM,RealView M

keil c51軟體安裝教程

一、將軟體進行加壓 二、選擇其中的c51v954.exe檔案並執行 三、選擇其中的mdk523.EXE檔案並執行 四、啟動設定安裝路徑中的UV4.exe檔案執行 五、點選此處新增一些檔案   六、進行破解,點選編譯器的這個按鈕

Keil C51 中使用Printf()進行串列埠輸出。

       如何使用printf在串列埠顯示資訊,有兩種辦法,因為在keil C51中 printf函式是呼叫putchar進行資料傳送的,而putchar應該是先判斷TI是否為1,不為1則等待為1。 如果為1則清0,然後送出一個字元。因此如果你直

vim狀態列詳細設定

" 設定狀態行顯示常用資訊 " %F 完整檔案路徑名 " %m 當前緩衝被修改標記 " %m 當前緩衝只讀標記 " %h 幫助緩衝標記 " %w 預覽緩衝標記 " %Y 檔案型別 " %b ASCII值 " %B 十六進位制值 " %l 行數 " %v 列數 " %p 當前行數佔總行數的的百分比 " %L 總

idea超詳細設定之類註釋模板和方法註釋模板

設定類註釋模板 1.選擇File–>Settings–>Editor–>File and Code Templates–>Includes–>File Header. 2.在右邊空白處,編寫自己的模板即可,注意Scheme是模板的生效範圍,可選變數在

詳細設定 Idea 類註釋模板和方法註釋模板

網上找了一下,沒有很詳細且正確介紹Idea配置註釋模板的,於是結合多篇文章自己琢磨整理出如下。 設定類註釋模板 1.選擇File–>Settings–>Editor–>File and Code Templates–>Includes–>File Header.&n

Python視覺化中Matplotlib(3.線條的詳細樣式及線性、儲存圖片、plot的詳細風格和樣式)、背景色、點和線的詳細設定

1.修改線條的樣式: linestyle、color、marker(標記) ''' 顏色 color:修改顏色,可以簡寫成c 樣式 linestyle='--' 修改線條的樣式 可以簡寫成 ls 標註 marker : 標註 線寬 linewidth: 設

termios結構體的詳細設定

termios結構體內容: 成員 描述 ------------------------------------------- c_cflag 控制模式標誌 c_lflag 本地模式標誌 c_iflag 輸入模式標誌 c_oflag 輸出模式標誌 c_line line discipline c_

Windows Server 2012 R2桌面化詳細設定圖解

工作列左下角啟動伺服器管理器,然後進行設定。 登入不顯示伺服器管理器 本地伺服器,看到右邊的IE增強的安全配置,如圖所示,關閉兩項內容。這樣就關閉了IE增強安全提示框。 3、“工具”選單,啟動“服務”,啟動兩項聲音服務(Windows Au

termios結構體的詳細設定【轉】

termios結構體內容: 成員 描述 ------------------------------------------- c_cflag 控制模式標誌 c_lflag 本地模式標誌 c_iflag 輸入模式標誌 c_oflag 輸出模式標誌 c_line line

V4L2 API詳解 <二> Camera詳細設定【轉】

轉自:http://blog.sina.com.cn/s/blog_602f87700101bf36.html 作者: Sam (甄峰)  [email protected]   Camera的可設定項極多,V4L2 支援了不少。但Sam之前對這些設定的用法和涵義

keil C51程式碼優化等級介紹

keil優化等級圖示:   0級 Constan folding 常數合併:編譯器預先計算結果,儘可能用常數代替表示式。包括執行地址計算; 優化簡單訪問:編譯器優化訪問8051系統的內部資料和位地址; 跳轉優化:編譯器總是擴充套件跳轉到最終目標,多級跳轉指令被刪除;

[mysql終極優化]之主從複製與讀寫分離詳細設定教程

記下File及Position下的值。以備在配置從伺服器時使用。 注:File:當前binlog的檔名,每重啟一次mysql,就會生成一個新binlog檔案       Position:當前binlog的指標位置 三、從伺服器配置 1、配置mysql.cnf # vi /etc/my.cnf (1)修改

App如何跳轉到MIUI神隱模式詳細設定介面,而非所有app的神隱模式介面

App如何跳轉到MIUI神隱模式詳細設定介面 發這篇文章的原因是因為,最近在研究MIUI後臺如何保活。 但是網上找到的程式碼,只能進到所有app的神隱模式配置介面,就像這樣 傳統做法: public void openBigGodMode(View v){ Inte

Eclipse詳細設定護眼背景色和字型(Hermit)顏色並匯出

進入對話方塊後 1、展開General標籤,選中Editors選項,再選中 Test Editors,右邊出現Test Editors面板。 面板中有這樣一個選項:Appearance color options; 其中是各種板塊顏色的設定,其中有一項是background color,根據自己的喜好選擇顏

keil優化等級設定說明

優化級別說明(僅供參考):則其中的 Code Optimization    欄就是用來設定C51的優化級別。共有9個優化級別(書上這麼寫的),高優化級別中包含了前面所有的優化級別。現將各個級別說明如下:0級優化:1、 常數摺疊:只要有可能,編譯器就執行將表示式化為常數數字

微控制器C語言指標意義淺析—Keil-C51

通常認為,C語言之所以強大,以及其自由性,很大部分體現在其靈活的指標運用上,甚至認為指標是C語言的靈魂。這裡說通常,是廣義上的,因為隨著程式語言的發展,指標也飽受爭議,並不是所有人都承認指標的“強大”和“優點”。在微控制器領域,指標同樣有著應用,本章節針對Keil C

Keil C51對C語言的關鍵詞擴充套件之八: far

far的出現,是Keil 編譯器為了支援新出現的8051家族增強型MCU,這些增強型MCU可能擁有大於64KB的儲存器。使用far可訪問擴充套件的RAM,使用const far可訪問擴充套件的ROM。 NXP 51MX架構51微控制器提供通過通用指標訪問多達8MB的code