EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
如何实现c51和asm的混编& q4 K8 e( ~; i2 B2 D5 ^0 ?& T! X
0 x# w# e" `6 i( x5 s$ z, v这是我在编程中积累的经验,希望对大家有用! 如何实现C51和汇编的混合编程
! |8 n( {/ F3 l(文中用到的编译器一律为keil)
?0 J& n( x$ \1 ?; j1、首先来个范例,并从这个范例展开说明:
7 }+ x. o q& D* o............ //C51 Code here5 M6 {: N, r( K! |8 d8 ^
#pragma ASM
* t1 O- Q4 ^8 j ^0 G............. //Here is the Assembler Code0 o3 \2 W2 M. _ b( Y
#pragma ENDASM) @3 g* _7 s9 [" a2 E# A. j5 r7 G
........... //C51 Code here 2、看到范例,大家应该对实现C51和汇编的混合有个大概了解了,呵呵, 其实也就这么一回事。 R9 p0 h6 N% k8 k
但是我们还必须要做一些前提工作,首先在Project窗口中包含汇编代码( ASM)的C文件单击右键,选择“Options for ...”,然后点击“Generate Assembler SRC File”和“Assemble SRC File” 3、根据选择的编译模式,把相应的库文件加入工程,应该注意的是,这个 文件必须作为该工程的最后一个文件 ) V+ ]* t" x& z" ]! c
4、大家可以复制下面这个C51和汇编的混编代码练习一下,加深印象' x# a: _4 C/ H$ l& o+ C
#i nclude <reg51.h>: Y: ?9 w I5 |! J. D
void main(void)
4 M1 X! c, b( L/ F* H0 N{& W' g) M/ o2 i( R& M6 W+ j5 k
P2=0x00;/ Y( `- P) v) e
#pragma asm
3 t) B9 V% l/ ]( v1 _" \ MOV R7,#10" x6 {. R6 U$ F* U
#pragma endasm
1 Y, g, C! z* y- ?5 uP2=0xff;: _& a7 F" C% l) k8 f* w: [
}* G% P$ D5 s& ^1 i/ w' _0 D7 I' q
7 r. ~% ~% p- M% c# ^0 X5、上面的过程掌握了以后,我们再来看一下如何实现无参数传递的函数调
9 E8 [$ Y* q0 t* t用
0 B% o9 N) B6 X& @$ L例如我们要调用一个延时函数delay()
% z5 G/ R2 t* p6 ?& f' x( l2 ] //C51
" g% e$ S! g* a$ h! ~( Eextern void delayms(); //声明 f8 E: |: s1 @. `% D' V
int main()
( b4 z$ h2 c3 X- Z+ C' a+ R) `9 }{
) Z8 u2 [) r1 vdelayms(); //调用
/ N* v* ?( }7 t1 I* ^} g `7 }6 H4 X/ {/ x% j) C0 X
9 S. v0 z8 q. {" n# u4 a7 t
6、有参传递1 h% |6 @8 I' U% P
其实是一样的,就是在子函数中加了参数罢了
6 w1 e9 f* u) b: j2 v5 N( ]例如:int delay(int minite,int second,……)//参数可以多个
$ x% V( Z* \! h U: } |