EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
如何实现c51和asm的混编! H* y$ M" J% c
( L" r1 b! V. x1 v' i6 K+ Z( Y; P
这是我在编程中积累的经验,希望对大家有用! 如何实现C51和汇编的混合编程' |# l6 }' a! I5 A4 d
(文中用到的编译器一律为keil)) q, E4 v/ h7 }: e3 b, V
1、首先来个范例,并从这个范例展开说明:
/ j& g8 x( H" Y- Y* |6 Z g' {............ //C51 Code here2 l$ o3 H+ M- t+ G+ C
#pragma ASM
3 P- p- D! P* _0 F8 L0 e............. //Here is the Assembler Code
9 J3 K2 z" M& k$ v#pragma ENDASM
- s' p+ n5 V0 C+ S6 S( ?8 ~........... //C51 Code here 2、看到范例,大家应该对实现C51和汇编的混合有个大概了解了,呵呵, 其实也就这么一回事。
, F+ e. `, N3 F" [9 R但是我们还必须要做一些前提工作,首先在Project窗口中包含汇编代码( ASM)的C文件单击右键,选择“Options for ...”,然后点击“Generate Assembler SRC File”和“Assemble SRC File” 3、根据选择的编译模式,把相应的库文件加入工程,应该注意的是,这个 文件必须作为该工程的最后一个文件 8 M) r* O9 g E' f- z
4、大家可以复制下面这个C51和汇编的混编代码练习一下,加深印象6 `) y7 ^6 m6 \6 N: N( o& h: x
#i nclude <reg51.h>6 ~3 S# \: o0 V
void main(void)
) x/ l4 U2 I7 Y% g7 f{
6 K9 C, D# Q5 K: B# j9 }P2=0x00;
2 v Y$ n+ G, L#pragma asm8 L! w2 m' |& |1 C L3 p8 l; ~
MOV R7,#10
- n6 C1 n, X- {+ D. t#pragma endasm6 Q2 T$ O5 T' u% T( n9 i6 C; ~( M4 }
P2=0xff;# Y( V" D: u, m# s9 `- L% S6 z
}- J' C4 @8 y5 G, i; S
8 `! J3 G+ J& i# z) z5、上面的过程掌握了以后,我们再来看一下如何实现无参数传递的函数调3 _4 F; n$ p) V! o2 ^6 q
用$ i0 R/ u& Z4 X" j& I" s" S
例如我们要调用一个延时函数delay()9 N- T" W) E6 F2 r4 z
//C51. v! e' p) i% D, N1 {% |
extern void delayms(); //声明
, U5 z5 z! P% K- I( dint main()/ G: o- G2 V. C0 o; u) \) U* u; x& {$ Z; }
{1 Y+ g" N) R& ?+ W6 d6 K
delayms(); //调用0 x. z _1 C1 S9 N# K) d3 \5 u
}
6 g4 X+ G$ v1 l+ w# d( H% g% v6 ]) T/ g) }/ k5 Q
6、有参传递
( D& g1 b7 c+ B0 M, s& _8 E5 N其实是一样的,就是在子函数中加了参数罢了
& Z/ V5 o) S3 \2 F例如:int delay(int minite,int second,……)//参数可以多个. i2 D, d9 B( m) D3 D6 b
|