找回密码
 注册
关于网站域名变更的通知
查看: 595|回复: 2
打印 上一主题 下一主题

如何实现c51和asm的混编

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2018-12-7 13:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

该用户从未签到

2#
发表于 2018-12-7 13:58 | 只看该作者
不错 感谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-9 16:26 , Processed in 0.125000 second(s), 24 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表