EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
如何实现c51和asm的混编; z' P/ b+ E7 z6 r5 v
& p1 G% r s$ O
这是我在编程中积累的经验,希望对大家有用! 如何实现C51和汇编的混合编程
0 d# v0 Y7 Q7 M, p: Z" q8 D(文中用到的编译器一律为keil)
# e2 s4 X! \( t1、首先来个范例,并从这个范例展开说明:
Z- u9 @4 R' j1 [! o* I............ //C51 Code here* C `$ i. b' W$ _, u5 D; t
#pragma ASM% p) J6 X& o# @% X6 H) F5 _6 |
............. //Here is the Assembler Code2 f) i" R6 V$ H; N% t' }- P
#pragma ENDASM$ ?/ b# r5 i \) G* U
........... //C51 Code here 2、看到范例,大家应该对实现C51和汇编的混合有个大概了解了,呵呵, 其实也就这么一回事。
: E1 z$ \; U! [但是我们还必须要做一些前提工作,首先在Project窗口中包含汇编代码( ASM)的C文件单击右键,选择“Options for ...”,然后点击“Generate Assembler SRC File”和“Assemble SRC File” 3、根据选择的编译模式,把相应的库文件加入工程,应该注意的是,这个 文件必须作为该工程的最后一个文件
& e& R9 X) l1 [8 j2 M) P$ u4、大家可以复制下面这个C51和汇编的混编代码练习一下,加深印象
5 f0 V" ], ?# v/ Z3 S#i nclude <reg51.h>
: e6 f5 r# s$ G+ {/ A3 Qvoid main(void)4 `7 s5 h. }) Z) N0 R* y
{
: [* h: `6 s$ s7 ^+ K) m0 r, TP2=0x00;
) r1 ~' T0 W3 i Y#pragma asm! ~1 A" s# t1 m) _! C' j
MOV R7,#10
$ l- J# u p. y7 o# r$ M/ Q& D#pragma endasm3 Z0 T- Y1 n( x+ @! R
P2=0xff;
8 ]. P9 Y+ x+ H7 ]) T+ Z}
( U" f, O0 c6 v% S
, B1 f- ?) E4 C5 u: R5 D) \' E5、上面的过程掌握了以后,我们再来看一下如何实现无参数传递的函数调5 o+ e: q& G9 e
用6 q5 M- N: d J+ ?! ^8 Z
例如我们要调用一个延时函数delay()5 d! t5 ^' b! {8 |* m8 a7 @
//C51* B. \- K5 f; W3 a; q* w3 T
extern void delayms(); //声明
5 M' l) `+ N: X5 v. m( Nint main()1 Q' h8 Y8 j) W% X! `/ P
{
+ k/ U* S3 c8 j% i c0 gdelayms(); //调用
- h( h& K4 y1 U2 X7 y9 u}/ m0 E. r6 S( @7 t9 C8 y
7 W6 I/ t& u9 D. h, u5 ~6 o
6、有参传递7 @( b/ T; C8 B
其实是一样的,就是在子函数中加了参数罢了
. k7 b$ c+ Z" d% v例如:int delay(int minite,int second,……)//参数可以多个3 U$ V' o8 h- ^$ f
|