keil如何联合编译
‘壹’ 用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这都没关系。其实很简单的,下面介绍步骤:
先将安装目录下的名字为C51文件夹或者ARM文件夹,放到你安装keil的目录中,路径是注意是C:keil。最好还是把目录装在C盘上。
打开TOOLS.INI的这个文件,将文件中加点东西。
打开后如果你是想在ARM下加入51功能,那么你把这一段复制下来
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")
如果是想在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)
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")
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文件,点击确定,然后运行,大功告成~~~~