當前位置:首頁 » 編程軟體 » keil如何聯合編譯

keil如何聯合編譯

發布時間: 2022-12-11 09:30:43

『壹』 用keil軟體如何將匯編與c語言結合起來一起編寫單片機的程序

在混合編程中,最常用也是最實用的方法是在C語言中加入部分匯編語言的代碼,分為兩種方法。
方法1)在Keil C51的函數中直接插入匯編語句
方法2)按照Keil C51介面規則,編寫匯編模塊
方法1是利用編譯控制命令#pragma asm(用來標識所插入的匯編語句的起始位置) 和 #pragma endasm (用來標識所插入的匯編語句的結束位置) ,這兩條命令必須成對出現,並可以多次出現。在Keil C51中不對插入的匯編代碼做任何的處理。
方法2編寫匯編模塊,需對KEIL編譯器的編譯過程做些了解。Keil編譯器的編譯過程是首先將項目中的一個個源文件編譯為目標代碼(obj文件),然在再通過連接器產生為最終可執行的hex文件。
目標代碼將其中的代碼、數據、常量放在不同的「段」中,保存程序的段稱為「代碼段」,保存數據的段稱為「數據段」,最終目標代碼經過Keil的連接器按照「段」的要求轉換為程序和數據地址固定的可執行文件。
在Keil軟體中,「段」按定位屬性分為:「可重定位段」和「絕對段」。
「可重定位段」:程序和數據在其分別所對應的存儲單元(FLASH和RAM)中的存儲地址是浮動的、可重定義的、相對可變的。
「絕對段」:其地址在連接前就已確定不變,連接器據此為它分配地址。
經Keil編譯器生成的「段」具有如下屬性:
1)段的存儲屬性(program code data pdata xdata bdata bit等);
2)段的起始地址;3)段的長度;
4)段的定位要求:絕對段地址固定,可重定位段定位的要求如要求代碼段在2K范圍內,數據段定位在可位定址區等;
5)段名:包括程序和數據(變數和常量)的段的存儲屬性及段所屬的程序模塊(文件)。代碼段: ?PR? funcname?Filename
數據段如:?DT? funcname?Filename; ?BI? funcname?Filename
標准段名前綴列表
段前綴 存儲類型 含義
?PR? Program 程序存儲區的代碼
?CO? code 程序存儲區的常量
?BI? Bit 內部數據存儲區的可位定址的位變數
?BA? Bdata 內部數據存儲區的可位定址的位元組變數
?DT? Data 內部數據存儲區的變數
?ID? Idata 內部數據存儲區可間接定址的變數
?PD? Pdata 外部數據存儲區的頁變數
?XD? Xdata 外部數據存儲區的變數

『貳』 關於KEIL如何編譯

新建一個keil工程,工程和這幾個文件放同一個文件夾,然後把.c文件添加進工程去,就可以編譯了

『叄』 keil4 下 c語言和匯編語言。混合編程的方法。

用C語言作為主模塊,匯編作為次模塊(也就是單純一個函數)。
在C中使用EXTERN聲明函數(需要准確類型)
然後在匯編模塊中編寫函數定義(參數類型只要等大就行)
然後記得設置好生成工具(C模塊用C編譯器,匯編用匯編編譯器)和命令行參數

『肆』 keil 怎麼同時編譯多個C文件

要想把多個C程序同時編譯
1.主函數里要有對其他C程序里的所有函數的聲明。(也可以用.h文件來聲明並在主函數里include "*.h" *代表h文件文件名)
2.在keil工程里要添加所有.c文件

『伍』 keil如何與Proteus聯合模擬

KeilC與Proteus連接調試
1、假若KeilC與Proteus均已正確安裝在C:\Program Files的目錄里,把C:\Program Files\Labcenter Electronics\Proteus 6 Professional\MODELS\VDM51.dll(可能沒有這個文件,本壓縮包里有)復制到C:\Program Files\keilC\C51\BIN目錄中。
2、用記事本打開C:\Program Files\keilC\C51\TOOLS.INI文件(這里的TOOLS.INI文件可能不在c51目錄下,但一定在keil的安裝目錄下,找一找),在[C51]欄目下加入:
TDRV5=BIN\VDM51.DLL ("Proteus VSM Monitor-51 Driver")
其中「TDRV5」中的「5」要根據實際情況寫,不要和原來的重復。
(步驟1和2隻需在初次使用設置。)
3、進入KeilC μVision2開發集成環境,創建一個新項目(Project),並為該項目選定合適的單片機CPU器件(如:Atmel公司的AT89C51)。並為該項目加入KeilC源程序。

源程序如下:
#define LEDS 6
#include "reg51.h"
//led燈選通信號
unsigned char code Select[]={0x01,0x02,0x04,0x08,0x10,0x20};
unsigned char code LED_CODES[]=
{ 0xc0,0xF9,0xA4,0xB0,0x99,//0-4
0x92,0x82,0xF8,0x80,0x90,//5-9
0x88,0x83,0xC6,0xA1,0x86,//A,b,C,d,E
0x8E,0xFF,0x0C,0x89,0x7F,0xBF//F,空格,P,H,.,- };
void main()
{
char i=0;
long int j;
while(1)
{
P2=0;
P1=LED_CODES[i];
P2=Select[i];
for(j=3000;j>0;j--); //該LED模型靠脈沖點亮,第i位靠脈沖點亮後,會自動熄來頭。
//修改循環次數,改變點亮下一位之前的延時,可得到不同的顯示效果。
i++;
if(i>5) i=0;
}
}

4、單擊「Project菜單/Options for Target」選項或者點擊工具欄的「option for ta rget」按鈕 ,彈出窗口,點擊「Debug」按鈕,出現如圖所示頁面。
在出現的對話框里在右欄上部的下拉菜單里選中「Proteus VSM Monitor一51 Driver」。並且還要點擊一下「Use」前面表明選中的小圓點。
再點擊「Setting」按鈕,設置通信介面,在「Host」後面添上「127.0.0.1」,如果使用的不是同一台電腦,則需要在這里添上另一台電腦的IP地址(另一台電腦也應安裝Proteus)。在「Port」後面添加「8000」。設置好的情形如圖所示,點擊「OK」按鈕即可。最後將工程編譯,進入調試狀態,並運行。
5、Proteus的設置
進入Proteus的ISIS,滑鼠左鍵點擊菜單「Debug」, 選中「use romote debuger monitor」,如圖所示。此後,便可實現KeilC與Proteus連接調試。

6、KeilC與Proteus連接模擬調試
單擊模擬運行開始按鈕 ,我們能清楚地觀察到每一個引腳的電頻變化,紅色代表高電頻,藍色代表低電頻。在LED顯示器上,循環顯示0、1、2、3、4、5。

不懂的再提!qq648500361

『陸』 keil5如何將一個函數的內容合並

必須把所有程序文件*。c或*。asm放在一個工程中。
如果多個文件同是C語言文件,只要有一個main()函數,就可以編譯,然後燒進單片機中。如何多個文件同是匯編語言,注意地址不能存在重復,可以編譯並生成少些文件。
如果是C語言和匯編文件組成的多文件,就需要用混合編譯方法來處理多文件的聯合編譯。

『柒』 小弟在用keil,請問怎麼把這兩段程序聯合起來編譯

LED的顯示程序作為主函數,AD采樣放在中斷裡面,While(adbusy==1); 這句話,可以刪掉之後 用中斷來觸發AD采樣程序。前提要設置好初始值以及變數。

『捌』 如何讓keil4同時能使用51跟ARM編譯

不管你之前裝的是51的還是ARM這都沒關系。其實很簡單的,下面介紹步驟:

  1. 先將安裝目錄下的名字為C51文件夾或者ARM文件夾,放到你安裝keil的目錄中,路徑是注意是C:keil。最好還是把目錄裝在C盤上。

  2. 打開TOOLS.INI的這個文件,將文件中加點東西。

    打開後如果你是想在ARM下加入51功能,那麼你把這一段復制下來

  3. ORGANIZATION="微軟中國" NAME="微軟用戶", "dsf" EMAIL="sad"

    BOOK0=UV4RELEASE_NOTES.HTM("uVision Release Notes",GEN) SOCKETPORT=1 [C51]

    PATH="C:KeilC51" VERSION=V9.00

    BOOK0=HLPRelease_Notes.htm("Release Notes",GEN)

    BOOK1=HLPC51TOOLS.chm("Complete User's Guide Selection",C) TDRV0=BINMON51.DLL ("Keil Monitor-51 Driver")

    TDRV1=BINISD51.DLL ("Keil ISD51 In-System Debugger")

    TDRV2=BINMON390.DLL ("MON390: Dallas Contiguous Mode") TDRV3=BINLPC2EMP.DLL ("LPC900 EPM Emulator/Programmer") TDRV4=BINUL2UPSD.DLL ("ST-uPSD ULINK Driver")

    TDRV5=BINUL2XC800.DLL ("Infineon XC800 ULINK Driver") TDRV6=BINMONADI.DLL ("ADI Monitor Driver")

    TDRV7=BINDAS2XC800.DLL ("Infineon DAS Client for XC800") TDRV8=BINUL2LPC9.DLL ("NXP LPC95x ULINK Driver") RTOS0=Dummy.DLL("Dummy")

    RTOS1=RTXTINY.DLL ("RTX-51 Tiny") RTOS2=RTX51.DLL ("RTX-51 Full")

    LIC0=GEGKP-MSCX1-YLXC6-DKBC1-ZJPCT-SL63G TDRV9=BINSTCMON51.DLL ("STC Monitor-51 Driver")

  4. 如果是想在51下裝ARM,那麼你把這一段復制下來粘貼到你的TOOLS文件下

    ORGANIZATION="微軟中國" NAME="微軟用戶", "dsf" EMAIL="sad" ARMSEL=1

    BOOK0=UV4RELEASE_NOTES.HTM("uVision Release Notes",GEN) CDB0=UV4STC.CDB ("STC MCU Database") [ARM]

    PATH="C:KeilARM" VERSION=4.70a

    PATH1="C:Program FilesGNU Tools ARM Embedded4.7 2012q4"


    TOOLPREFIX=arm-none-eabi-

    CPUDLL0=SARM.DLL(TDRV0,TDRV5,TDRV6,TDRV10) # Drivers for ARM7/9 devices

    CPUDLL1=SARMCM3.DLL(TDRV1,TDRV2,TDRV3,TDRV4,TDRV5,TDRV7,TDRV8,TDRV9,TDRV11,TDRV12,TDRV13,TDRV14,TDRV15) # Drivers for Cortex-M devices CPUDLL2=SARMCR4.DLL(TDRV7) # Drivers for Cortex-R4 devices

    BOOK0=HLPRELEASE_NOTES.HTM("Release Notes",GEN)

    BOOK1=HLPARMTOOLS.chm("Complete User's Guide Selection",C) BOOK2=CMSISindex.html("CMSIS Documentation",GEN)

    BOOK3=SignumDocsSigUV3Arm.htm("Signum Systems JTAGjet Driver Documentation",GEN)

  5. TDRV0=BINUL2ARM.DLL("ULINK2/ME ARM Debugger") TDRV1=BINUL2CM3.DLL("ULINK2/ME Cortex Debugger") TDRV2=BINAGDIRDI.DLL("RDI Interface Driver")

    TDRV3=BINABLSTCM.dll("Altera Blaster Cortex Debugger") TDRV4=BINlmidk-agdi.dll("Stellaris ICDI")

    TDRV5=SignumSigUV3Arm.dll("Signum Systems JTAGjet") TDRV6=SeggerJLTAgdi.dll("J-LINK / J-TRACE ARM") TDRV7=SeggerJL2CM3.dll("J-LINK / J-TRACE Cortex")

    TDRV8=STLinkST-LINKIII-KEIL.dll ("ST-Link (Deprecated Version)") TDRV9=BINULP2CM3.DLL("ULINK Pro Cortex Debugger") TDRV10=BINULP2ARM.DLL("ULINK Pro ARM Debugger") TDRV11=NULinkNu_Link.dll("NULink Debugger")

  6. TDRV12=SiLabsSLAB_CM_Keil.dll("SiLabs UDA Debugger") TDRV13=STLinkST-LINKIII-KEIL_SWO.dll ("ST-Link Debugger") TDRV14=BINCMSIS_AGDI.dll("CMSIS-DAP Debugger") TDRV15=BINDbgFM.DLL("Fast Models Debugger")

    DELDRVPKG0=ULINKUninstallULINK.exe("ULINK Pro Driver V1.0") LIC0=GE7X7-EGEQ5-9WB2E-5T3KT-NA0N1-V0DP8 [ARMADS]

    PATH="C:KeilARM" PATH1=".ARMCCin"

    CPUDLL0=SARM.DLL(TDRV0,TDRV5,TDRV6,TDRV10) # Drivers for ARM7/9 devices

    CPUDLL1=SARMCM3.DLL(TDRV1,TDRV2,TDRV3,TDRV4,TDRV5,TDRV7,TDRV8,TDRV9,TDRV11,TDRV12,TDRV13,TDRV14,TDRV15) # Drivers for Cortex-M devices CPUDLL2=SARMCR4.DLL(TDRV7) # Drivers for Cortex-R4 devices

    BOOK0=HLPRELEASE_NOTES.HTM("Release Notes",GEN)

    BOOK1=HLPARMTOOLS.chm("Complete User's Guide Selection",C) BOOK2=CMSISindex.html("CMSIS Documentation",GEN)

    BOOK3=SignumDocsSigUV3Arm.htm("Signum Systems JTAGjet Driver Documentation",GEN)


『玖』 如何使用Keil編譯匯編程序或C語言程序

打開Keil後選擇【File】下的【new】新建一個空白文檔。將編輯好的程序源碼復制到該文件中。
如何使用Keil編譯匯編程序或C語言程序
選擇左上角的保存按鈕進行保存,將彈出保存對話框。
如何使用Keil編譯匯編程序或C語言程序
選擇保存路徑和編輯文件名。記住,這里的文件名很重要,如果你是C語言程序的話,加上.c後綴,如果你是用匯編語言,加上.ASM後綴。這樣,Keil就能自動識別你的文件類型了。
如何使用Keil編譯匯編程序或C語言程序
現在你就可以將保存的文件添加到項目中了,項目文件要提前在[Project]中新建。右擊選擇【Source Group1】點擊【Add Files to Group..】
如何使用Keil編譯匯編程序或C語言程序
在彈出的對話框中選擇[文件類型]為All files,這個很關鍵。然後選擇你要添加的文件。點擊Add添加。
如何使用Keil編譯匯編程序或C語言程序
在[Source Group]中就會顯示新添加的.ASM文件,按圖中選擇彈出【Option for Target】對話框。
如何使用Keil編譯匯編程序或C語言程序
7
切換到[output]選項卡選中【Create HEX FILE】,就可以在編譯成功後自動生成.hex文件。編譯按鈕在左上角3個按鈕,從左到右依次點擊,如果源碼沒錯,都可以編譯通過了。
如何使用Keil編譯匯編程序或C語言程序

『拾』 proteus和keil怎樣聯合使用需要用什麼軟體

假設Keil4和Proteus7.8分別安裝在」D:\Keil4」和」D:\Proteus7.8」文件夾內。
1. 將文件夾內的VDM51.dll文件復制到」D:\Keil4\C51\BIN」目錄下和」D:\Proteus7.8\ MODELS」目錄下
2. 用記事本打開D:\Keil4\TOOLS.INI文件,在TDRV8=BIN\UL2LPC9.DLL ("NXP LPC95x ULINK Driver")下一行新加一行:
TDRV9=BIN\VDM51.DLL ("Proteus VSM Monitor-51 Driver")
其中「TDRV5」中的「9」事實上就是避免跟上面的標號重復。
(步驟1和2隻需在初次使用設置。)
3.舉個例子:
用keil新建一個工程,比如起名為test,正常編譯,並產生hex文件(這一部分不詳述),源程序如下:
#define LEDS 6
#include "reg51.h"
//led燈選通信號
unsigned char code Select[]={0x01,0x02,0x04,0x08,0x10,0x20};
unsigned char code LED_CODES[]=
{ 0xc0,0xF9,0xA4,0xB0,0x99,//0-4
0x92,0x82,0xF8,0x80,0x90,//5-9
0x88,0x83,0xC6,0xA1,0x86,//A,b,C,d,E
0x8E,0xFF,0x0C,0x89,0x7F,0xBF//F,空格,P,H,.,- };
void main()
{
char i=0;
long int j;
while(1)
{
P2=0;
P1=LED_CODES[i];
P2=Select[i];
for(j=3000;j>0;j--); //該LED模型靠脈沖點亮,第i位靠脈沖點亮後,會自動熄來頭。
//修改循環次數,改變點亮下一位之前的延時,可得到不同的顯示效果。
i++;
if(i>5) i=0;
}
}
4.proteus的模擬器件擺放圖123.DSN在文件夾內,將此文件保存在上面的keil新建的test工程的目錄中。(事實上只要保證proteus的模擬圖和keil的工程文件在同一個目錄下即可)
5.在keil中的左側,找到「目標1」,右鍵選擇第一項,轉到調試一欄,選中右側「使用」小圓點,下拉菜單選中剛才新建的」 Proteus VSM Monitor一51 Driver」, 再點擊「Setting」按鈕,設置通信介面,在「Host」後面添上「127.0.0.1」,如果使用的不是同一台電腦,則需要在這里添上另一台電腦的IP地址(另一台電腦也應安裝Proteus)。在「Port」後面添加「8000」。

6.Proteus中點擊調試,選中使用遠程調試監控。
7.在AT89C52上右鍵再左鍵,出現編輯元件窗口,在Programe File欄中選擇剛才生成的hex文件,點擊確定,然後運行,大功告成~~~~

熱點內容
中國有ip6伺服器嗎 發布:2025-07-04 17:58:56 瀏覽:724
第六章編譯原理答案 發布:2025-07-04 17:37:55 瀏覽:39
php內存優化 發布:2025-07-04 17:25:54 瀏覽:662
威綸觸摸屏如何設置時間限制密碼 發布:2025-07-04 17:25:50 瀏覽:418
python列表的遍歷 發布:2025-07-04 17:24:20 瀏覽:22
編譯基本塊 發布:2025-07-04 17:23:06 瀏覽:748
scl語言編程 發布:2025-07-04 17:23:05 瀏覽:991
oracle用戶連接資料庫連接 發布:2025-07-04 17:20:20 瀏覽:939
我的世界純生存伺服器推薦死亡不掉落 發布:2025-07-04 17:06:14 瀏覽:348
方舟編譯器可以用於p20嗎 發布:2025-07-04 17:00:17 瀏覽:786