日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]一.target名更改 打開Keil后,左側(cè)Project Workspace中的target可改,方法:右擊Target——Manage Compnents——雙擊待修改項(xiàng)即可,若要添加,使用對(duì)話框內(nèi)對(duì)應(yīng)工具欄。二.option for target 設(shè)置之TARGET項(xiàng)1 MEMA

一.target名更改


打開Keil后,左側(cè)Project Workspace中的target可改,方法:右擊Target——Manage Compnents——雙擊待修改項(xiàng)即可,若要添加,使用對(duì)話框內(nèi)對(duì)應(yīng)工具欄。


二.option for target 設(shè)置之TARGET項(xiàng)


1 MEMARY MODEL


Small:變量存儲(chǔ)在內(nèi)部ram里.

Compact:變量存儲(chǔ)在外部ram里,使用頁(yè)8位間接尋址

Large:變量存儲(chǔ)在外部Ram里,使用16位間接尋址.

  我們一般使用Small來存儲(chǔ)變量,就是說單片機(jī)優(yōu)先把變量存儲(chǔ)在內(nèi)部ram里,如果內(nèi)部ram不夠了,才會(huì)存到外部去.Compact的方式要自己通過程序來指定頁(yè)的高位地址,編程比較復(fù)雜,如果外部ram很少,只有256個(gè)字節(jié),那么對(duì)該256個(gè)字節(jié)的讀取就比較快,用MOVX @Ri,A 或MOVX A,@Ri指令.

  如果超過256字節(jié),那么要不斷地進(jìn)行切換的話,就比較麻煩.Compact模式適用于比較少的外部ram的情況.Large模式,是指變量會(huì)優(yōu)先分配到外部ram里,用MOVX A,@DPTR或MOVX @DPTR,A來讀取.要注意的是,3種存儲(chǔ)方式都支持內(nèi)部256字節(jié)和外部64k字節(jié)的ram.區(qū)別是變量的優(yōu)先(或默認(rèn))存儲(chǔ)在哪里的區(qū)別.除非你不想把變量存儲(chǔ)在內(nèi)部ram,才使用后面的Compact,Large模式.因?yàn)樽兞看鎯?chǔ)在內(nèi)部ram里,運(yùn)算速度比存儲(chǔ)在外部ram要快的多,大部分的應(yīng)用都是選擇Small的模式.


  使用Small的方式:也不是說變量就不可以存儲(chǔ)在外部,一樣可以存儲(chǔ)在外部,只是你要指定,比如:


unsigned char xdata a; //那么變量a就存儲(chǔ)在外部的ram.

unsigned char a;     //變量存儲(chǔ)在內(nèi)部ram.

  假如用Large的模式:


unsigned char xdata a; //那么變量a就存儲(chǔ)在外部的ram.

unsigned char a;     //變量存儲(chǔ)在外部ram.

 這就是區(qū)別,就是說這幾個(gè)選項(xiàng)只是影響沒有特別指定變量的存儲(chǔ)空間的時(shí)候,默認(rèn)存儲(chǔ)在哪里,比如上面的變量定義unsigned char a .

2. CODE ROM SIZE


  Small: program 2K or less ;適用于89c2051這些芯片,2051只有2k的代碼空間,所以跳轉(zhuǎn)地址只有2k,編譯的時(shí)候會(huì)使用ACALL AJMP這些短跳轉(zhuǎn)指令,而不會(huì)使用LCALL,LJMP指令.如果你的代碼跳轉(zhuǎn)超過2k,那么會(huì)出錯(cuò).

  Compact:2k functiongs ,64k program:表示每個(gè)子函數(shù)的程序大小不超過2k,整個(gè)工程可以有64k的代碼.就是說在main()里可以使用LCALL, LJMP指令,但在子程序里只會(huì)使用ACALL,AJMP指令.除非你確認(rèn)你的每個(gè)子程序不會(huì)超過2k,否則不要用Compact方式.

  Large:64K program:表示程序或子函數(shù)都可以大到64k.使用code bank還可以更大.通常我們都選用該方式.Code Rom Size選擇Large方式速度不會(huì)比Small慢很多,所以一般沒有必要選擇Compact和Small的方式.我們這里選擇Large方式.


3. OPERATING NONE:不適用操作系統(tǒng) RTX51-TINY:使用TINY操作系統(tǒng) RTX-FULL:使用FULL操作系統(tǒng)


  Keil C51 提供了Tiny多任務(wù)操作系統(tǒng),使用定時(shí)器0來做任務(wù)切換,效率很低,無(wú)實(shí)用價(jià)值。Full需要用戶使用外部RAM,且需要單獨(dú)購(gòu)買運(yùn)行庫(kù),不能使用,默認(rèn)選NONE。


4. 存儲(chǔ)器選擇 1. Use On-chip ROM(0x0-0x1fff)


  這個(gè)選項(xiàng)是使用片上的Flash Rom,我們知道At89c52有8k的flash Rom.取決于你的應(yīng)用系統(tǒng),你的單片機(jī)的EA接高電平的話,請(qǐng)選中這個(gè)選項(xiàng),如果你的單片機(jī)的EA接低電平,表示使用外部Rom,那么不要選中該選項(xiàng).


2. Off-chip Code memory


  表示你在片外接的Rom的開始地址和大小,如果你沒有外接程序存儲(chǔ)器,那么不要填任何數(shù)據(jù).我們?cè)谶@里假設(shè)使用一個(gè)片外的Rom,地址從0x8000開始(不要填成8000,如果是8000,是10進(jìn)制的數(shù),一般填16進(jìn)制的數(shù)),Size為外接Rom的大小.假設(shè)接了一塊0x1000字節(jié)的rom.最多可以外接3塊Rom,如果你還用了別的地址,那么就添上.


3. Off-Chip Xdata Memory


  那么可以填上你外接的Xdata(外部數(shù)據(jù)存儲(chǔ)器的起始地址和大小,一般的應(yīng)用是接一個(gè)62256,我們?cè)谶@里特殊的指定Xdata的起始地址為0x2000,大小為0x8000;



5. Code Banking


  使用Code Banking技術(shù).keil可以支持程序代碼超過64k的情況,最大可以有2兆的程序代碼.如果你的代碼超過64k,那么就要使用Code Banking技術(shù),以支持更多的程序空間.Code Banking是一個(gè)高級(jí)的技術(shù),支持自動(dòng)的Bank的切換,是建立一個(gè)大型系統(tǒng)的需要,比如你要在單片機(jī)里實(shí)現(xiàn)漢字字庫(kù),實(shí)現(xiàn)漢字輸入法,都要用到該技術(shù).我們會(huì)在以后的文章里論述Bank技術(shù).我們?cè)谶@里不選中它.


二.option for target 設(shè)置之output項(xiàng)


select folder for object:選擇編譯之后的目標(biāo)文件所存放的目錄,默認(rèn)存放在工程文件夾中。


name of executable:設(shè)置生成的目標(biāo)文件的名字,默認(rèn)是工程名。


creat executable:生成OMF和HEX文件,OMF文件名同工程文件名但沒有擴(kuò)展名。


creat hex file:選中該項(xiàng)編譯后生成可以少些的HEX文件。


creat library:生成lib庫(kù)文件,默認(rèn)不選。


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


2.start debugging:編譯完成后馬上啟動(dòng)調(diào)試(軟件仿真或硬件仿真),默認(rèn)不選中


3.run user program1,run user program2:根據(jù)需要設(shè)置編譯之后的應(yīng)用程序,比如自己編寫的燒寫芯片的程序,或調(diào)用外部仿真程序。


3.listing


select folder for listings:選擇列表文件存放的目錄,默認(rèn)為工程文件所在的目錄。


*.lst,*.m51文件對(duì)了解程序用到了哪些idata、data、bit、xdata、code、RAM、ROM、Stack等有很重要的作用。


Assembly code生產(chǎn)匯編的代碼,根據(jù)需要決定是否選擇。


4.c51


  用于對(duì)Keil的C51編譯器編譯過程進(jìn)行控制,其中比較常用的是“code optimization”組,該組中l(wèi)evel是優(yōu)化等級(jí),C51在對(duì)源程序進(jìn)行編譯時(shí)可以對(duì)代碼多至9級(jí)優(yōu)化,默認(rèn)使用8級(jí),一般不必修改。如果在編譯中出現(xiàn)一些問題可以降低優(yōu)化級(jí)別試一試。


emphasis是選擇編譯優(yōu)先方式,第一項(xiàng)是代碼量?jī)?yōu)化(最終生成的代碼量?。?,第二項(xiàng)是速度優(yōu)先(最終生成的代碼速度快),第三項(xiàng)是默認(rèn)的,是速度優(yōu)先,可根據(jù)需要更改。


5.BL51 locat


使用KeilC51軟件,可以很方便地將代碼或者數(shù)據(jù)絕對(duì)定位到某個(gè)地址。

1、代碼定位

方法1:使用偽指令CSEG。比如要將MyFunc1定位到代碼區(qū)C:0x1000,則新建一個(gè)A51文件,添加以下內(nèi)容:



PUBLIC MYFUNC1

CSEG AT 1000H

MYFUNC1:

;其它代碼

RET



在其它源文件中,就可以調(diào)用MyFunc()函數(shù)了。需要注意的是,編譯器不檢測(cè)傳遞參數(shù)的數(shù)目,僅檢測(cè)函數(shù)是否有返回值。

方法2:使用BL51 Locate選項(xiàng)。比如在main.c中定義了一個(gè)MyFunc2函數(shù),并且要將該函數(shù)定位到代碼區(qū)C:0x2000,則從菜單中選擇Project->Options for Target 'Target1',在彈出的對(duì)話框中選擇BL51 Locate頁(yè),在下面的code欄中寫上?PR?MYFUNC2?MAIN(0x2000)即可。如果想定位多個(gè)函數(shù),也可以使用*通配符。

2、變量定位

只有全局變量可以絕對(duì)定位,局部變量無(wú)法實(shí)現(xiàn)絕對(duì)定位。

方法1:使用_at_關(guān)鍵字。聲明一個(gè)全局變量unsigned char data MyBuf1[8] _at_ 0x20;

方法2:使用BL51 Locate選項(xiàng)。比如將main.c中定義的所有data型的全局變量定位到數(shù)據(jù)區(qū)D:0x28開始的空間,則從菜單中選擇Project->Options for Target 'Target1',在彈出的對(duì)話框中選擇BL51 Locate頁(yè),在下面的data欄中寫上?DT?MAIN(0x28)即可。如果是idata,則使用?ID?MAIN(0x28),如果是xdata,則使用?XD?MAIN(0x28),如果是pdata,則使用?PD?MAIN(0x28)

3、堆棧定位

在STARTUP.A51文件中定義了堆棧區(qū)?STACK,其起始地址同樣可以在BL51 Locate頁(yè)中設(shè)置,在Stack欄寫上?STACK(0x80)


4、函數(shù)定位

假如要把C源文件 tools.c 中的函數(shù)


int BIN2HEX(int xx)

{

...

}

放在CODE MEMORY的0x1000處,先編譯該工程,然后打開該工程的M51文件,在


* * * C O D E M E M O R Y * * *

;行下找出要定位的函數(shù)的名稱,應(yīng)該形如:

CODE xxxxH xxxxH UNIT ?PR?_BCD2HEX?TOOLS

然后在:Project->Options for Target ...->BL51 Locate:Code中填寫如下內(nèi)容:?PR?_BCD2HEX?TOOLS(0x1000)再次Build,在M51中會(huì)發(fā)現(xiàn)該函數(shù)已放在CODE MEMORY的0x1000處了

5、賦初值的變量定位:

要將某變量定位在一絕對(duì)位置且要賦初值,此時(shí)用 _at_ 不能完成,則如下操作:

在工程中建立一個(gè)新的文件,如InitVars.c,在其中對(duì)要處理的變量賦初值(假設(shè)是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),再次編譯即可。

相應(yīng)地,如為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),再次編譯即可。相應(yīng)地,若定義的是data/idata等變量,則相應(yīng)處理即可。

3、若有多個(gè)變量或函數(shù)要進(jìn)行絕對(duì)地址定位,則應(yīng)按地址從低到高的順序排列。


====


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢(shì)抑制與過流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問題卻十分常見,不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車場(chǎng)照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢(shì)逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對(duì)周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉