EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
如何实现c51和asm的混编, W. l/ _6 R8 d# |0 Z
& p" }6 ]5 I9 p$ C; j0 l$ ]' \
这是我在编程中积累的经验,希望对大家有用! 如何实现C51和汇编的混合编程+ q& A& m* v0 k( ^+ ^# c
(文中用到的编译器一律为keil)
7 b& o d% ~1 o; R1、首先来个范例,并从这个范例展开说明:
, {& z" A/ _+ _% ^+ L, z9 X............ //C51 Code here
* Z5 x) b; @; a6 C+ y#pragma ASM2 g4 I8 p4 Y) L6 O. ^7 p" C
............. //Here is the Assembler Code
, J0 G5 c0 d2 R% s/ d& K#pragma ENDASM) \4 }" F: E; F4 F) b4 k. l2 k3 `
........... //C51 Code here 2、看到范例,大家应该对实现C51和汇编的混合有个大概了解了,呵呵, 其实也就这么一回事。
6 _+ M9 Z" n6 n7 B$ t但是我们还必须要做一些前提工作,首先在Project窗口中包含汇编代码( ASM)的C文件单击右键,选择“Options for ...”,然后点击“Generate Assembler SRC File”和“Assemble SRC File” 3、根据选择的编译模式,把相应的库文件加入工程,应该注意的是,这个 文件必须作为该工程的最后一个文件 : T! d2 }1 P) o% C/ }4 w6 }& y
4、大家可以复制下面这个C51和汇编的混编代码练习一下,加深印象7 f- ]( m; D6 S
#i nclude <reg51.h>) `7 y6 `$ O& w! O6 N
void main(void)/ P$ e; D# y/ O; o5 d$ l
{
7 l8 J) d! R; lP2=0x00;
, T1 o! U; J6 S5 Y#pragma asm
. G9 Z- L$ j7 y; e6 k" d MOV R7,#100 t1 l/ s$ q; F" I0 o! M9 j
#pragma endasm: p* o* g0 E9 x
P2=0xff; E7 c- q3 m M# }: w* N" _
}
k; @2 T* A9 z) @; T. s4 a1 u
5、上面的过程掌握了以后,我们再来看一下如何实现无参数传递的函数调6 }; ^+ a* u) W- s3 N) O4 d% U& E
用
2 D0 G/ h/ W. h( M例如我们要调用一个延时函数delay()
. i% }. w( ]4 M1 |, q8 t //C51
: B$ G3 ^ [9 [8 ^( T" Gextern void delayms(); //声明7 {0 g5 E* [& s3 D z
int main()$ J# Y) `2 ?" m8 b9 Z8 D# h
{% f$ l% k8 k% }+ O8 E' o% \/ S
delayms(); //调用
6 l: U/ |4 \, G9 ?1 n& ]0 U, I} i! o0 A/ i! `7 w3 I: U9 Z
% L5 K1 I* z8 b& m5 J& `- R
6、有参传递
- D4 a7 {! ~ ]1 R# Q其实是一样的,就是在子函数中加了参数罢了2 ?: }$ O2 B( N) U, ?- V
例如:int delay(int minite,int second,……)//参数可以多个
/ F8 {& X& J0 [! \ |