📄 关于在 keil c51 中嵌入汇编以及c51与a51间的相互调用[中国dsp网].htm
字号:
break;
case 5 :
if(dd>=22){return('<img src=Skins/Default/birth/z3.gif alt=双子座'+mm+'-'+dd+'>');}
else{return('<img src=Skins/Default/birth/z2.gif alt=金牛座'+mm+'-'+dd+'>');}
break;
case 6 :
if(dd>=22){return('<img src=Skins/Default/birth/z4.gif alt=巨蟹座'+mm+'-'+dd+'>');}
else{return('<img src=Skins/Default/birth/z3.gif alt=双子座'+mm+'-'+dd+'>');}
break;
case 7 :
if(dd>=23){return('<img src=Skins/Default/birth/z5.gif alt=狮子座'+mm+'-'+dd+'>');}
else{return('<img src=Skins/Default/birth/z4.gif alt=巨蟹座'+mm+'-'+dd+'>');}
break;
case 8 :
if(dd>=24){return('<img src=Skins/Default/birth/z6.gif alt=处女座'+mm+'-'+dd+'>');}
else{return('<img src=Skins/Default/birth/z5.gif alt=狮子座'+mm+'-'+dd+'>');}
break;
case 9 :
if(dd>=24){return('<img src=Skins/Default/birth/z7.gif alt=天秤座'+mm+'-'+dd+'>');}
else{return('<img src=Skins/Default/birth/z6.gif alt=处女座'+mm+'-'+dd+'>');}
break;
case 10 :
if(dd>=24){return('<img src=Skins/Default/birth/z8.gif alt=天蝎座'+mm+'-'+dd+'>');}
else{return('<img src=Skins/Default/birth/z7.gif alt=天秤座'+mm+'-'+dd+'>');}
break;
case 11 :
if(dd>=23){return('<img src=Skins/Default/birth/z9.gif alt=射手座'+mm+'-'+dd+'>');}
else{return('<img src=Skins/Default/birth/z8.gif alt=天蝎座'+mm+'-'+dd+'>');}
break;
case 12 :
if(dd>=22){return('<img src=Skins/Default/birth/z10.gif alt=魔羯座'+mm+'-'+dd+'>');}
else{return('<img src=Skins/Default/birth/z9.gif alt=射手座'+mm+'-'+dd+'>');}
break;
default : return('');
}
}else{return('');}
}
function MM_showHideLayers() { //v6.0
var i,p,v,obj,args=MM_showHideLayers.arguments;
obj=document.getElementById("MagicFace");
for (i=0; i<(args.length-2); i+=3) if (obj) { v=args[i+2];
if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v=='hide')?'hidden':v; }
obj.visibility=v; }
}
function DispMagicEmot(MagicID,H,W){
MagicFaceUrl = "Dv_plus/tools/magicface/swf/" + MagicID + ".swf";
document.getElementById("MagicFace").innerHTML = '<OBJECT codeBase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=4,0,2,0" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="' + W + '" height="' + H + '"><PARAM NAME=movie VALUE="'+ MagicFaceUrl +'"><param name=menu value=false><PARAM NAME=quality VALUE=high><PARAM NAME=play VALUE=false><param name="wmode" value="transparent"><embed src="' + MagicFaceUrl +'" quality="high" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" width="' + W + '" height="' + H + '"></embed>';
document.getElementById("MagicFace").style.top = '250px';
document.getElementById("MagicFace").style.left = '250px';
document.getElementById("MagicFace").style.visibility = 'visible';
MagicID += Math.random();
setTimeout("MM_showHideLayers('MagicFace','','hidden')",5000);
NowMeID = MagicID;
}
function LoadMagicEmot(MagicID,topicid){
var cookiesstr=readCookie('mofaface_'+ topicid);
if (cookiesstr ==null){
createCookie('mofaface_'+ topicid,MagicID,365)
DispMagicEmot(MagicID,350,500)
}
}
</SCRIPT>
<DIV class=main
style="MARGIN-TOP: 4px; MARGIN-BOTTOM: 4px; LINE-HEIGHT: 28px; HEIGHT: 28px">
<DIV id=posttopic title=发表一个新帖子
onclick="location.href='post.asp?action=new&boardid=3'"></DIV>
<DIV id=postalipay title=发起一个用支付宝交易的交易贴,支付宝交易买卖都有保障,免手续费、安全、快捷!
onclick="location.href='post.asp?action=new&boardid=3&stype=1'"></DIV>
<DIV id=postvote title=发起一个新投票
onclick="location.href='post.asp?action=vote&boardid=3'"></DIV>
<DIV id=repost title=回复贴子
onclick="location.href='post.asp?action=re&boardid=3&id=500&star=1&page=1'"></DIV>
<DIV style="FLOAT: right">您是本帖的第 <B>65</B> 个阅读者 </DIV></DIV>
<DIV class=th>
<DIV style="FLOAT: right; TEXT-ALIGN: right"><A title=树形显示贴子
style="FONT-WEIGHT: normal; MARGIN-RIGHT: 10px"
href="http://www.chinadsp.cn/bbs/dispbbs.asp?BoardID=3&replyID=1193&id=500&skin=1">树形</A>
<A title=打印本贴内容 style="FONT-WEIGHT: normal; MARGIN-RIGHT: 10px"
href="http://www.chinadsp.cn/bbs/TopicOther.asp?t=5&BoardID=3&id=500"
target=_blank>打印</A> </DIV>
<DIV style="FLOAT: left; TEXT-INDENT: 10px; HEIGHT: 24px">
<DIV style="FLOAT: left">标题:</DIV>关于在 KEIL C51
中嵌入汇编以及C51与A51间的相互调用</DIV></DIV><A name=1193></A>
<DIV class=postlary1>
<DIV class=postuserinfo>
<DIV
style="PADDING-RIGHT: 0px; PADDING-LEFT: 5px; PADDING-BOTTOM: 0px; LINE-HEIGHT: 30px; PADDING-TOP: 10px; HEIGHT: 30px">
<DIV
style="FILTER: glow(color='#9898BA',strength='2'); FLOAT: left; WIDTH: 120px"><B><FONT
color=#ff0000>wen_zl</FONT></B></DIV>
<DIV style="FLOAT: left; MARGIN: 3px; WIDTH: 23px; TEXT-INDENT: 0px"><IMG
alt=帅哥哟,在线,有人找我吗?
src="关于在 KEIL C51 中嵌入汇编以及C51与A51间的相互调用[中国DSP网].files/Male.gif"> </DIV>
<DIV style="FLOAT: left; MARGIN: 5px; WIDTH: 15px; TEXT-INDENT: 0px">
<SCRIPT language=javascript type=text/javascript>document.write (astro('1983-07-29'));</SCRIPT>
</DIV></DIV>
<DIV><IMG height=100 alt=""
src="关于在 KEIL C51 中嵌入汇编以及C51与A51间的相互调用[中国DSP网].files/11_2006511334863897.jpg"
width=100></DIV>
<DIV><IMG style="MARGIN: 5px 0px"
src="关于在 KEIL C51 中嵌入汇编以及C51与A51间的相互调用[中国DSP网].files/level20.gif"></DIV>
<DIV>头衔:店主</DIV>
<DIV>等级:管理员</DIV>
<DIV>文章:847</DIV>
<DIV>积分:7643</DIV>
<DIV>门派:无门无派</DIV>
<DIV>注册:2006年2月26日</DIV></DIV>
<DIV class=postie>
<DIV>
<DIV style="FLOAT: right">楼主</DIV> <A
href="https://www.alipay.com/payto:wen_zl@163.com&partner=2088002048522272"
target=_blank><IMG alt=用支付宝给wen_zl付款或购买其商品,支付宝交易免手续费、安全、快捷!
src="关于在 KEIL C51 中嵌入汇编以及C51与A51间的相互调用[中国DSP网].files/alipay_s.gif" align=middle
border=0></A> <A title=点击发送QQ消息给wen_zl
href="http://wpa.qq.com/msgrd?V=1&Uin=342665334&Site=By Dvbbs&Menu=yes"
target=_blank><IMG height=16
src="关于在 KEIL C51 中嵌入汇编以及C51与A51间的相互调用[中国DSP网].files/qq1_online.gif" width=16
align=middle border=0></A> QQ <A href="mailto:wen_zl@163.com"><IMG
alt=点击这里发送电子邮件给wen_zl
src="关于在 KEIL C51 中嵌入汇编以及C51与A51间的相互调用[中国DSP网].files/email.gif" align=middle
border=0></A> <A href="http://shop33496317.taobao.com/" target=_blank><IMG
alt=访问wen_zl的主页
src="关于在 KEIL C51 中嵌入汇编以及C51与A51间的相互调用[中国DSP网].files/homepage.gif" align=middle
border=0></A> </DIV>
<HR>
<DIV style="LINE-HEIGHT: 22px; HEIGHT: 22px">
<DIV style="FLOAT: left"><IMG alt=发贴心情
src="关于在 KEIL C51 中嵌入汇编以及C51与A51间的相互调用[中国DSP网].files/face1.gif"></DIV><B>关于在
KEIL C51 中嵌入汇编以及C51与A51间的相互调用</B></DIV>
<DIV
style="PADDING-RIGHT: 0px; MARGIN-TOP: 10px; FONT-SIZE: 9pt; OVERFLOW-X: hidden; WIDTH: 97%; WORD-BREAK: break-all; TEXT-INDENT: 24px; LINE-HEIGHT: normal; HEIGHT: 200px; WORD-WRAP: break-word"
onload="this.style.overflowX='auto';">如何在 KEIL C51(v6.21) 中调用汇编函数的一个示例
[ycong_kuang]<BR><BR>有关c51调用汇编的方法已经有很多帖子讲到,但是一般只讲要点,很少有对整个过程作详细描述,对于初学者是不够的,这里笔者<BR>通过一个简单例子对这个过程进行描述,希望能对初学者有所帮助。几年来,在这个论坛里笔者得到很多热心人指导,因此也希望<BR>藉此尽一点绵薄之力。<BR><BR>在这个例子里,阐述了编写c51程序调用汇编函数的一种方法,这个外部函数的入口参数是一个字符型变量和一个位变量,返回值是<BR>一个整型变量。例中,先用c51写出这个函数的主体,然后用SRC控制指令编译产生asm文件,进一步修改这个asm文件就得到我们所<BR>要的汇编函数。该方法让编译器自动完成各种段的安排,提高了汇编程序的编写效率。<BR><BR>step1.
按写普通c51程序方法,建立工程,在里面导入main.c文件和CFUNC.c文件。<BR><BR>相关文件如下:<BR><FONT
color=#00aa66>//main.c文件</FONT><BR>#include < reg51.h ><BR><BR>#define
uchar unsigned char<BR>#define uint unsigned int<BR><BR>extern uint AFUNC(uchar
v_achr,bit v_bflag);<BR><BR>void main()<BR>{<BR> bit
BFLAG;<BR> uchar
mav_chr;<BR> uint mvintrslt;<BR><BR> mav_chr=0xd4;
BFLAG=1;<BR> mvintrslt=AFUNC(mav_chr,BFLAG);<BR>}<BR><BR><FONT
color=#00aa66>//CFUNC.c文件</FONT><BR><BR>#define uchar unsigned char<BR>#define
uint unsigned int<BR><BR>uint AFUNC(uchar v_achr,bit
v_bflag)<BR>{<BR> uchar
tmp_vchr;<BR> uint tp_vint;<BR><BR> tmp_vchr=v_achr;<BR> tp_vint=(uint)v_bflag;<BR> return
tmp_vchr+(tp_vint<<8);<BR>}<BR><BR>step2. 在 Project 窗口中包含汇编代码的 C
文件上右键,选择“Options for ...”,点击右边的“Generate Assembler
SRC<BR> File”和“Assemble SRC
File”,使检查框由灰色变成黑色(有效)状态;<BR><BR>step3. 根据选择的编译模式,把相应的库文件(如 Small 模式时,是
Keil\C51\Lib\C51S.Lib)加入工程中,该文件必须作为工<BR>
程的最后文件;<BR><BR>step4.
build这个工程后将会产生一个CFUNC.SRC的文件,将这个文件改名为CFUNC.A51(也可以通过编译选项直接产生CFUNC.A51文<BR>
件),然后在工程里去掉库文件(如C51S.Lib)和CFUNC.c,而将CFUNC.A51添加到工程里。<BR><BR><FONT
color=#00aa66>//CFUNC.SRC文件如下<BR>.\CFUNC.SRC generated from:
CFUNC.c</FONT><BR>NAME CFUNC<BR><BR>?PR?_AFUNC?CFUNC
SEGMENT CODE<BR>?BI?_AFUNC?CFUNC SEGMENT BIT
OVERLAYABLE<BR> PUBLIC ?_AFUNC?BIT<BR> PUBLIC _AFUNC<BR><BR> RSEG ?BI?_AFUNC?CFUNC<BR>?_AFUNC?BIT:<BR> v_bflag?041:
DBIT 1<BR><FONT color=#00aa66>; #define uchar unsigned char<BR>;
#define uint unsigned int<BR>;<BR>; uint AFUNC(uchar v_achr,bit
v_bflag)</FONT><BR><BR> RSEG ?PR?_AFUNC?CFUNC<BR>_AFUNC:<BR> USING 0<BR><FONT
color=#00aa66> ;
SOURCE LINE # 5<BR>;---- Variable ''v_achr?040'' assigned to Register ''R7''
----<BR>;
{<BR> ;
SOURCE LINE # 6<BR>; uchar
tmp_vchr;<BR>;
uint tp_vint;<BR>;<BR>;
tmp_vchr=v_achr;<BR> ;
SOURCE LINE # 10<BR>;---- Variable ''tmp_vchr?042'' assigned to Register ''R5''
----</FONT><BR> MOV R5,AR7<BR><FONT
color=#00aa66>;
tp_vint=(uint)v_bflag;<BR> ;
SOURCE LINE #
11</FONT><BR> MOV C,v_bflag?041<BR> CLR A<BR> RLC A<BR><FONT
color=#00aa66>;---- Variable ''tp_vint?043'' assigned to Register ''R6/R7''
----<BR>; return
tmp_vchr+(tp_vint<<8);<BR> ;
SOURCE LINE #
12</FONT><BR> MOV R6,A<BR> MOV R4,#00H<BR> CLR A<BR> ADD A,R5<BR> MOV R7,A<BR> MOV A,R4<BR> ADDC
A,R6<BR> MOV R6,A<BR><FONT
color=#00aa66>;
}<BR> ;
SOURCE LINE # 13</FONT><BR>?C0001:<BR> RET<BR><FONT
color=#00aa66>; END OF
_AFUNC</FONT><BR><BR> END<BR><BR>step5.
检查main.c的“Generate Assembler SRC File”和“Assemble SRC
File”是否有效,若是有效则点击使检查框变成无效状<BR>
态;再次build这个工程,到此你已经得到汇编函数的主体,修改函数里面的汇编代码就得到你所需的汇编函数了。<BR><BR>参考文献:<BR> 1.徐爱钧,彭秀华。单片机高级语言C51windows环境编程与应用,电子工业出版社<BR> 2.<A
href="http://www.c51bbs.com/"
target=_blank>http://www.c51bbs.com/</A>, C51编程:关于在 KEIL C51
中直接嵌入汇编。。。帖子编号: 83838
发表用户:Youth<BR> .................................................................................................................<BR>
keil中汇编函数调用c51函数
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -