欢迎来到天天文库
浏览记录
ID:32179345
大小:137.00 KB
页数:9页
时间:2019-02-01
《keil内联汇编的设置问题》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、在keilC语言与汇编语言的混合编程中曾经遇到过的一些问题,写下来留作以后参考。(本文写于09.08.15,在8.18日加入了第4点的内容)1、C语言中加入汇编语言模块的方法:例子:voidfunc(){ C语言代码……#pragmaasm MOVR6,#23DELAY2: MOVR7,#191DELAY1: DJNZR7,DELAY1DJNZR6,DELAY2RET#pragmaendasm C语言代码……}其中红色为C语言部分,绿色为嵌入的汇编语言部分。汇编部分需要用#pragmaasm和#pragmaendasm包起来2、Keil提示“asm/
2、endasm”出错的解决方法如果只是像1中那样直接加入汇编代码的话,编译将会报错,错误如下:compilingsendata.c...sendata.c(81):errorC272:'asm/endasm'requiressrc-controltobeactivesendata.c(87):errorC272:'asm/endasm'requiressrc-controltobeactiveTargetnotcreated解决方法如下:首先左键单击包含有汇编部分的c语言文件名,然后在菜单栏中选择Project->OptionforFile‘……’中选择带有红色方框的选项在弹
3、出的对话框中,将上图中红色方框选中的两项打上勾(默认的情况下,前面的勾是灰色的,要让这两项前的勾变为黑色的),点击确定。3、?C_START等相关警告的处理按照2中的方法处理完之后,再编译不会出现错误信息了,但是会出现如下的警告信息:linking...***WARNINGL1:UNRESOLVEDEXTERNALSYMBOLSYMBOL: ?C_STARTMODULE: STARTUP.obj(?C_STARTUP)***WARNINGL2:REFERENCEMADETOUNRESOLVEDEXTERNALSYMBOL: ?C_STARTMODULE: STARTUP.o
4、bj(?C_STARTUP)ADDRESS:000DH处理方法如下:在如上图所示的“SourceGroup1”上点右键,在菜单中选择“AddFilestoGroup'SourceGroup1'”找到你的KEIL安装目录,选择其中的“C51”目录下的“LIB”目录下的“C51S.LIB”文件,点击Add,然后Close即可。注意,上图所示的文件选择框进入LIB目录下后,默认只显示.c文件,需要在“文件类型”中选择“Libraryfile(*.lib)”,即可显示LIB文件了。添加C51S.LIB到工程后,再次编译,警告信息消失。linking...ProgramSize:da
5、ta=9.0xdata=0code=28creatinghexfilefrom"sendata"..."sendata"-0Error(s),0Warning(s).4、寄存器冲突问题的解决汇编程序块中常常会使用到51的通用寄存器,比如R0-R7。这种情况下可能会和C语言程序中已经使用到的R0-R7产生冲突,以至于产生一些非常隐蔽和古怪的错误。虽然有人说KEIL可以自动分配寄存器组使之不产生冲突。但是在我这里具体测试时还是有冲突的(或者是我的KEIL设置有问题?),下面是测试小程序:/*********************************************
6、***************** 测试程序*************************************************************/#include#includetypedef unsigned char uint8 ;uint8 buf[16]={0x55 };uint8 i=0 ;/************************************************************* 初始化单片机相关寄存器************************************
7、***********************/void UartInit(){SCON=0x50 ;TMOD
8、=0x21 ;PCON
9、=0x80 ;TH1=0xE8 ;TL1=0xE8 ;IE
10、=0x90 ;TR1=1 ;}/*************************************************** 延时***************************************************/void delay(){#pragma asm MOV R6,#19 D
此文档下载收益归作者所有