如何用KeilC51将ASM文件编译成Hex文件

合集下载

如何用KeilC51将ASM文件编译成Hex文件

如何用KeilC51将ASM文件编译成Hex文件

按如下步骤进行:1)点击菜单project,选择new project:2)然后选择你要保存的路径,输入工程文件的名字,比如保存到keil目录里,工程文件的名字为test. 如下图所示,然后点击保存3)这时会弹出一个对话框,要求你选择单片机的型号,你可以根据你使用的单片机来选择,keil c51 几乎支持所有的51核的单片机,如果你设计的是华邦的W77E58,可以选择winbond->W77E58,但是有一些版本,比如6.02,对它不能仿真,但是可以选择dallas的ds80c320来代替设计W77E58,两者的内核是一样的,只是w77e58带flash rom,而ds80c320没有flash rom,如果你的软件在仿真W77e58的时候有问题,那么就选用ds80c320 .我这里还是以大家用的比较多的Atmel 的89c52来说明,如图所示,选择89c52之后,右边一栏是对这个单片机的基本的说明,然后点击确定.4)这时要新建一个源程序文件,建立一个汇编或c文件,如果你已经有源程序文件,可以忽略这一步.点击菜单File->New:5)输入一个简单的程序,如下:5)选择菜单File_>SAVE:6)选择你要保存的路径,在文件名里输入文件名,注意一定要输入扩展名,如果是c程序文件,扩展名为.c,如果是汇编文件,扩展名为.a51,如果是ini文件,扩展名为.ini,其他文件类型,比如注解说明文件,可以保存为.txt的扩展名.那么我们这里是要存储一个c源程序文件,所以输入.c扩展名,保存为test.c 的名字,(也可以保存为其他名字,比如learn.c等),点击保存.7)点击Target 1前面的+号,展开里面的内容source Group1:8)用右键点击Sourece Group 1(注意用鼠标的右键,而不是左键),将弹出一个菜单,选择AddFiles to Guoup"Source Group 1".9)选择刚才的文件test.c,文件类型选择C Source file(*.c).因为我们的是c程序文件,所以选择该类型,如果是汇编文件,就选择asm source file.如果是目标文件,选择Object file,如果是库文件,选择Library file.最后点击Add. 点击add之后,窗口不会消失,(如果要添加多个文件,可以不断添加),添加完毕此时再点击Close关闭该窗口.10)这时在source group 1 里就有test.c文件,如图:11)用鼠标右键(注意用右键)点击左边的Target 1,会出现一个菜单,选择Options for Target "Target 1",会出现一个选项,如下图,选中“Create Hex File",红色箭头所示!12)在test.c上点击鼠标右键,在出现的下拉菜单中选择“build target”,看状态栏,若是:"test" - 0 Error(s), 0 Warning(s).”,恭喜你成功了,看看你的文件夹吧,是否多了个test.hex。

KEIL C51 中 C语言加入汇编语言的使用方法

KEIL C51 中 C语言加入汇编语言的使用方法

KEIL C51 中C语言加入汇编语言的使用方法
51单片机2008-06-03 18:20:42 阅读22 评论0字号:大中小
1.通过使用预处理指令#asm 和#endasm来使用汇编语言。

用户编写的汇编语言可以紧跟在#asm之后,而在#endasm之前结束。

如下所示:
#asm
/*汇编源程序*/
#endasm
在#asm和#endasm之间的语句将作为汇编语言的语句输出到由编译器产生的汇编语言文件中。

2.通过使用预处理指令# pragma asm和函数_asm()来使用汇编语言。

在程序的开头加上预处理指令#pragma asm,在该预处理指令之前只能有注释和其它预处理指令。

_asm()函数可按以下方式使用。

_asm(汇编语言字符串)
在汇编语言字符串中,可以通过回车和换行符把各个语句分开。

在C语言中使用汇编语言,可以操作C语言中的全局变量或完成用C语言难于完成的功能,但要注意以下几点:
①#asm不允许嵌套使用。

②当使用asm语句时,编译系统并不输出目标模块,而只输出汇编源文件。

③ _asm只能用小写字母,如果写成大写,就作为普通变量。

④#asm#endasm和_asm只能用在函数内。

Keil C51的使用

Keil C51的使用
程序。
编辑课件
16
5、移除文件
要把某个文件从工程中移除,可在此文件上单击右键, 然后单击“Remove File ’ ’ ”。
移除不是删除,文件依然存在。
编辑课件
17
我来演示
1、打开一个已有的工程项目(不是默认项目)。 2、打开一个已有的工程项目,修改单片机型号。
3、打开一个已有的工程项目,删除原有的文件,装 入一个已有的C语言文件。
此时光标在编辑窗口里闪烁,就可以输入用户的应 用程序了。
或者把已有的程序从其他地方直接复制到程序编辑 窗口内。
文件的建立也可以用Windows环境的附件中的记 事本或写字板等纯文本编辑软件完成。
参见教材《单片机的C5编1辑应课件用程序设计》第 309 页 27
新建文件时,建议首先保存空白文件。
编辑课件
11
如果在选择了目标器件后,想更改器件,可选择 Project菜单中的Select Device for Target‘Tartet 1’。
由于不同厂家的许多型号性能相近,因此,如果找不 到用户要求的芯片信号,可以选择其他公司的相近型 号。
参见教材《单片机的C5编1辑应课件用程序设计》第 308 页 12
uVision2支持的所有CPU器件的型号根据生产厂家 形成器件组。
用户可根据需要选择相应的器件组并选择相应的器 件型号。
编辑课件
10
通过滚动条,选择生产厂商、目标CPU。
如:Atmel器件组内的AT89C51单片机。首先找到 Atmel公司,然后单击左边的“+”号展开该组。选择 AT89C51之后,单击“确定”。
程序输入完毕后别忘了再次保存。
参见教材《单片机的C5编1辑应课件用程序设计》第 309 页 28

keil软件生成HEX文件的具体操作步骤

keil软件生成HEX文件的具体操作步骤

ke订软件生成HEX文件的具体操作步骤一. 下载安装keil 软件图1二. 打开keil 软件文件IE 编魚匡)视囹© 工徒旧 凋试(W 闪存外围设备® 工具CD SVCS (S )窗口呦 帮助但)•倉色13 I® X 屉血口 G 岸率仏% Q 旄晞囲出・*側煖篦裁萬|聲点34%图2三. 新建工程匸单击文件,选择新建——新建工程文件⑸雋匡)视囹也)工悽(E )调试(W 闪存◎)外围退岀凶tr +O Ctrl 十S(N)打开 关闱© 保存⑸ | 另存为… 煤存命(D(£]新建文件(W … Ctrl 十Z程型…Project Workspace..,设笛数折库(w ・・・ 授权管理・・・程 稣的丈件打印设冒®… 打印住)Ctrl 十P打印预览Q9图32•弹出图4对话框,选择新工程的存储位置及为新工程命名,然后点保存图43•保存后弹岀图5窗口,单击atmel前面的加号弹岀图6对话框,在图6对话框中选择要编程的芯片点击确定。

下面我们以51系列单片机为列。

图6旨?电忘1’送挂设备(&S)CPU厂使用扩展的连按器3! 厂使用扩展的汇编器加!描述(C):8051-based Fullly Static 24MHz CMOS 2 T iITI er s/C ount er s ? 6 Interrupt s/2 PiThree"Lexrel Program Memory Lock, 4K 128 Bytes Orvchip RAM厂家: Atm el 设營:AT89C51 芯族; C51资料库目录(D):四. 新建c文件1.单击文件,新建——新建文件图633 123456 - uVision3 _ Jf文件輛⑥ 视囹GD 工程(0调试(D)闪存&)艸ji图72•单击文件,单击另存为,弹出图9对话框,输入文件名,文件名后加点C 。

C51编程keil c6.20c 直接嵌入汇编的方法

C51编程keil c6.20c 直接嵌入汇编的方法

x)
Untitled Document 用此方法可以在c源代码的任意位置用#pragma asm和#pragma endasm嵌入汇编 语句。 但要注意的是在直接使用形参时要小心,在不同的优化级别下产生的汇编代码 有所不同, 可以察看对应的.lst文件看一看,得到正确的优化级别后,#pragma OT (x,speed)锁定 优化级别(这里的值是0-9)。 返回首页
页码,2/2
/wenzhang/keiitled Document
页码,1/2
C51编程:keil c6.20c 直接嵌入汇编的方法!!!
上此站以来,得到大家的很多的帮助,感谢大家!特此奉上"点心"一块供大 家品尝。希望 能增加你营养。 //<asm.h> #ifdef ASM unsigned long shiftR1(register unsigned long); #else extern unsigned long shiftR1(register unsigned long); #endif //end of asm.h //<asm.c> #define ASM #include <asm.h> #include <reg52.h> #pragma OT(4,speed) unsigned long shiftR1(register unsigned long { #pragma asm clr c mov a,r4 rrc a mov r4,a mov a,r5 rrc a mov r5,a mov a,r6 rrc a mov r6,a mov a,r7 rrc a mov r7,a #pragma endasm return(x); } //end of asm.c 将此源文件加入要编译的工程文件, 将光标指向此文件,选择右键菜单“option for file 'asm.c'”, 将属性单“properties”中的“Generate Assembler SRC File”“Assemble SRC File” 两项设置成黑体的“√”将“Link Public Only”的“√”去掉,再编译即 可。 /wenzhang/keil.htm 2004-5-28

KEILC51编译软件使用方法

KEILC51编译软件使用方法

2.1 Keiluvision4的安装和使用Keil 公司是一家业界领先的微控制器(MCU )软件开发工具的独立供应商。

Keil 公司由两家私人公司联合运营,分别是德国慕尼黑的KeilElektronikGmbH 和美国德克萨斯的KeilSoftwareInc 。

Keil 公司制造和销售种类广泛的开发工具,包括ANSIC 编译器、宏汇编程序、调试器、连接器、库管理器、固件和实时操作系统核心(real-timekernel)。

有超过10万名微控制器开发人员在使用这种得到业界认可的解决方案。

其KeilC51编译器自1988年引入市场以来成为事实上的行业标准,并支持超过500种8051变种。

KeilC51是美国KeilSoftware 公司出品的51系列兼容单片机C 语言软件开发系统,与汇编相比,C 语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。

Keil 提供了包括C 编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision )将这些部分组合在一起。

运行Keil 软件需要WIN2000、WINXP 等操作系统。

如果你使用C 语言编程,那么Keil 几乎就是你的不二之选,即使不使用C 语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。

2.1.1 KeilμVision4简介KeilμVision4是美国KeilSoftware 公司2009年2月发布的。

KeilμVision4引入灵活的窗口管理系统,使开发人员能够使用多台监视器,并提供了视觉上的表面对窗口位置的完全控制的任何地方。

新的用户界面可以更好地利用屏幕空间和更有效地组织多个窗口,提供一个整洁,高效的环境来开发应用程序。

新版本支持更多最新的ARM 芯片,还添加了一些其他新功能。

2011年3月ARM 公司发布最新集成开发环境RealViewMDK 开发工具中集成了最新版本的KeiluVision4,其编译器、调试工具实现与ARM 器件的最完美匹配。

关于在 KEIL C51 中直接嵌入汇编

关于在 KEIL C51 中直接嵌入汇编

我找到了一些资料希望对你有用下周就要做实验了,由于听老师说机房位子可能比较少,对我这种蹭课的学生来说也就不敢奢望同选这门课的同学一样能够正常的在机房调试程序了,因此,我决定提前先在自己的工作室里把实验内容给过一遍。

第一个实验是关于嵌入式编程的,这个实验目的一方面是为了让我们熟悉ARM下编程的编译环境ADS和调试器A TX,另一方面是让我们掌握如何将c 语言和汇编语言在实际编程中相互调用。

经过这两天靠自己不断的摸索,终于掌握了如何在编译环境中进行ARM编程,另外,还学会了在c中调用汇编程序的方法,以及如何通过linux 自带的gcc编译嵌有汇编的c程序,总之,收获还是蛮多的哦,下面就总结一下吧。

1、c嵌汇编首先说一下关于GCC编译嵌有汇编语言的c语言吧,GCC编译的汇编语言不是我们上课时学的Intel x86汇编,而是A T&T汇编,两者的区别可以查看《Gcc使用的内嵌汇编语法格式小教程》。

下面是内嵌汇编的几种格式:语法__asm__(“instruction. ……instruction”); //Linux gcc中支持(注意asm的下划线均为两个否则GCC将会无法编译)__asm{instruction…instruction}; //ADS中支持(注意asm的下划线均为两个否则GCC将会无法编译)asm(“instruction [; instruction]”); //ARM C++中使用例1是我在linux环境下,编的嵌有汇编程序的c语言,并通过了GCC的编译:例1:#includeint plus(int a,int b){__asm__(“add %1,%0\n\t”:”+r”(a):”r”(b));return (c);}int main(){int a,b,c;a=2;b=1;c=plus(a,b);printf(“c=%d\n”,c);}这个程序应该是很简单的,但关键是子函数中嵌入的那段汇编程序,具体的写法可以参看其他文章。

KeilC51使用教程

KeilC51使用教程

Keil C语言程序设计示例教程(开发C8051F310)使用汇编语言或C语言要使用编译器,以便把写好的程序编译为机器码,才能把HEX可执行文件写入单片机内。

KEIL uVISION是众多单片机应用开发软件中最优秀的软件之一,它支持众多不同公司的MCS51架构的芯片,甚至ARM,它集编辑,编译,仿真等于一体,它的界面和常用的微软VC++的界面相似,界面友好,易学易用,在调试程序,软件仿真方面也有很强大的功能。

因此很多开发51应用的工程师或普通的单片机爱好者,都对它十分喜欢。

在这里以51单片机并结合C程序为例(汇编操作方法类似,唯一不同的是汇编源程序文件名后缀为“.ASM ”),图文描述工程项目的创建和使用方法。

1.首先我们要养成一个习惯:最好先建立一个空文件夹,把您的工程文件放到里面,以避免和其他文件混合,如下图, 创建了一个名为“PRJ_C8051”文件夹2.点击桌面上的Keil uVision4图标,出现启动画面:3.点击“project --- New uVision Project”新建一个工程:4.在对话框,选择放在刚才建立的“PRJ_C8051”文件夹下,给这个工程取个名为Test_C8051F310, 然后保存,工程的后缀为uvporj。

5.弹出一个框,在CPU类型下我们找到并选中“Silicon Laboratories. Inc.”下的C8051F3106.加入C8051起动码7.建立一个源程序文本8.在下面空白区别写入或复制一个完整的C程序:9.输入源程序文件名名称,示例输入“Test_C8051F310.c”,然后保存:10.把刚创建的源程序文件加入到工程项目文件中。

11.设置---目标(第1步~ 第4步)15.工程项目创建和设置全部完成!点击保持并编译16.在C8051F310中的C语言程序示例//-----------------------------------------------------------------------------// Includes// 在c8051f310.h在头文件中定义了C8051F310的寄存器、输入/输出的端口//-----------------------------------------------------------------------------#include <c8051f310.h> // SFR declarations//-----------------------------------------------------------------------------// 16-bit SFR Definitions for 'F30x//-----------------------------------------------------------------------------sfr16 TMR2RL = 0xca; // Timer2 reload valuesfr16 TMR2 = 0xcc; // Timer2 counter//-----------------------------------------------------------------------------// Global CONSTANTS//-----------------------------------------------------------------------------#define SYSCLK 24500000 / 8 // SYSCLK frequency in Hzsbit LED = P0^0; // LED='1' means ON//-----------------------------------------------------------------------------// Function PROTOTYPES//-----------------------------------------------------------------------------void SYSCLK_Init (void);void PORT_Init (void);void Timer2_Init (int counts);void Timer2_ISR (void);//-----------------------------------------------------------------------------// MAIN Routine//-----------------------------------------------------------------------------void main (void){// disable watchdog timerPCA0MD &= ~0x40; // WDTE = 0 (clear watchdog timer// enable)SYSCLK_Init (); // Initialize system clock to// 24.5MHzPORT_Init (); // Initialize crossbar and GPIOTimer2_Init (SYSCLK / 12 / 10); // Init Timer2 to generate// interrupts at a 10Hz rate.EA = 1; // enable global interruptswhile (1) // spin forever{}}//-----------------------------------------------------------------------------// SYSCLK_Init//-----------------------------------------------------------------------------//// This routine initializes the system clock to use the internal 24.5MHz / 8// oscillator as its clock source. Also enables missing clock detector reset.//void SYSCLK_Init (void){OSCICN = 0x80; // configure internal oscillator for// its lowest frequency RSTSRC = 0x04; // enable missing clock detector }//-----------------------------------------------------------------------------// PORT_Init//-----------------------------------------------------------------------------//// Configure the Crossbar and GPIO ports.// P3.3 - LED (push-pull)//void PORT_Init (void){// assignmentsXBR0 = 0x00; // no digital peripherals selectedXBR1 = 0x40; // Enable crossbar and weak pull-ups//P3MDOUT |= 0x08;P0MDOUT |= 0x03; // enable LED as a push-pull output}//-----------------------------------------------------------------------------// Timer2_Init//-----------------------------------------------------------------------------//// Configure Timer2 to 16-bit auto-reload and generate an interrupt at// interval specified by <counts> using SYSCLK/48 as its time base.//void Timer2_Init (int counts){TMR2CN = 0x00; // Stop Timer2; Clear TF2;// use SYSCLK/12 as timebase CKCON &= ~0x60; // Timer2 clocked based on T2XCLK;TMR2RL = -counts; // Init reload valuesTMR2 = 0xffff; // set to reload immediatelyET2 = 1; // enable Timer2 interruptsTR2 = 1; // start Timer2}//-----------------------------------------------------------------------------// Interrupt Service Routines//-----------------------------------------------------------------------------//-----------------------------------------------------------------------------// Timer2_ISR//-----------------------------------------------------------------------------// This routine changes the state of the LED whenever Timer2 overflows.//void Timer2_ISR (void) interrupt 5{TF2H = 0; // clear Timer2 interrupt flagLED = ~LED; // change state of LED}17.KEIL C语言与汇编语言的混合编程方法C语言中加入汇编语言模块的方法:例子:void func(){C语言代码……#pragma asmMOV R6,#23DELAY2: MOV R7,#191DELAY1: DJNZ R7,DELAY1DJNZ R6,DELAY2RET#pragma endasmC语言代码……}汇编部分需要用#pragma asm和#pragma endasm包起来18.KEIL C混合编程中的错误与解决方法1)Keil提示“asm/endasm”出错的解决方法如果只是像1中那样直接加入汇编代码的话,编译将会报错,错误如下:compiling sendata.c...sendata.c(81): error C272: 'asm/endasm' requires src-control to be active sendata.c(87): error C272: 'asm/endasm' requires src-control to be active Target not created解决方法如下:首先project workspace窗口右键单击包含有汇编部分的c语言文件名,然后在如上图所示的菜单中选择带有红色方框的选项在弹出的对话框中,将上图中红色方框选中的两项打上勾(默认的情况下,前面的勾是灰色的,要让这两项前的勾变为黑色的),点击确定。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

按如下步骤进行:
1)点击菜单project,选择new project:
2)然后选择你要保存的路径,输入工程文件的名字,比如保存到keil目录里,工程文件的名字为test. 如下图所示,然后点击保存
3)这时会弹出一个对话框,要求你选择单片机的型号,你可以根据你使用的单片机来选择,keil c51 几乎支持所有的51核的单片机,如果你设计的是华邦的W77E58,可以选择winbond->W77E58,但是有一些版本,比如6.02,对它不能仿真,但是可以选择dallas的ds80c320来代替设计W77E58,两者的内核是一样的,只是w77e58带flash rom,而ds80c320没有flash rom,如果你的软件在仿真W77e58的时候有问题,那么就选用ds80c320 .我这里还是以大家用的比较多的Atmel 的89c52
来说明,如图所示,选择89c52之后,右边一栏是对这个单片机的基本的说明,然后点击确定.
4)这时要新建一个源程序文件,建立一个汇编或c文件,如果你已经有源程序文件,可以忽略这一步.点击菜单File->New:
5)输入一个简单的程序,如下:
5)选择菜单File_>SAVE:
6)选择你要保存的路径,在文件名里输入文件名,注意一定要输入扩展名,如果是c程序文件,扩展名为.c,如果是汇编文件,扩展名为.a51,如果是ini文件,扩展名为.ini,其他文件类型,比如注解说明文件,可以保存为.txt的扩展名.那么我们这里是要存储一个c源程序文件,所以输入.c扩展名,保存为test.c 的名字,(也可以保存为其他名字,比如learn.c等),点击保存.
7)点击Target 1前面的+号,展开里面的内容source Group1:
8)用右键点击Sourece Group 1(注意用鼠标的右键,而不是左键),将弹出一个菜单,选择Add
Files to Guoup"Source Group 1".
9)选择刚才的文件test.c,
文件类型选择C Source file(*.c).因为我们的是c程序文件,所以选择该类型,如果是汇编文件,就选择asm source file.如果是目标文件,选择Object file,如果是库文件,选择Library file.最后点击Add. 点击add之后,窗口不会消失,(如果要添加多个文件,可以不断添加),添加完毕此时再点击Close关闭该窗口.
10)这时在source group 1 里就有test.c文件,如图:
11)用鼠标右键(注意用右键)点击左边的Target 1,会出现一个菜单,选择Options for Target "Target 1",会出现一个选项,如下图,
选中“Create Hex File",红色箭头所示!
12)在test.c上点击鼠标右键,在出现的下拉菜单中选择“build target”,看状态栏,若是:"test" - 0 Error(s), 0 Warning(s).”,恭喜你成功了,看看你的文件夹吧,是否多了个test.hex。

还不赶快烧入芯片试试!。

相关文档
最新文档