EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
如何实现c51和asm的混编
. o3 D3 u# W, W! y" X* j) U
# O$ | f/ G5 S这是我在编程中积累的经验,希望对大家有用! 如何实现C51和汇编的混合编程
) {2 a. K/ q$ R/ u- r6 f/ V7 L(文中用到的编译器一律为keil), ~ H4 t; `! Z* O* F
1、首先来个范例,并从这个范例展开说明:
, u: n/ e) F, Z! [3 z............ //C51 Code here" c* Q5 \4 _. F9 K: @, y4 U
#pragma ASM
, r* _' c" S- D2 L* ?............. //Here is the Assembler Code$ o7 _# \6 J5 _
#pragma ENDASM7 H* J8 U4 F: ^" ~
........... //C51 Code here 2、看到范例,大家应该对实现C51和汇编的混合有个大概了解了,呵呵, 其实也就这么一回事。
# c! {0 z& Z2 X3 H2 x- a但是我们还必须要做一些前提工作,首先在Project窗口中包含汇编代码( ASM)的C文件单击右键,选择“Options for ...”,然后点击“Generate Assembler SRC File”和“Assemble SRC File” 3、根据选择的编译模式,把相应的库文件加入工程,应该注意的是,这个 文件必须作为该工程的最后一个文件 ' P: o7 P- Z9 {
4、大家可以复制下面这个C51和汇编的混编代码练习一下,加深印象# q T2 Y6 p5 |3 Z
#i nclude <reg51.h>. f) {# A( h7 r& D" O: f
void main(void)' C% _* @3 s. x3 V. l' T
{
2 ^5 t8 O' c- a2 e0 q8 M+ iP2=0x00;/ p7 w% ^5 l0 N4 I* `, M
#pragma asm& k- p+ z" h6 _$ g! G
MOV R7,#104 o/ F& N, n/ C$ s, Q) R0 U6 y# [& z5 i
#pragma endasm
4 Z& z2 y8 C" P$ I3 u3 LP2=0xff;
8 w/ k5 o9 @" |. z J, c; @* S$ s}
# ]0 W$ K" |/ B% f" w
, ?) ~: k1 ^3 O" k1 k! |: n- P5、上面的过程掌握了以后,我们再来看一下如何实现无参数传递的函数调2 D% X" `2 N2 d' H% X6 F
用
. v$ c, Y+ O* f- M7 w例如我们要调用一个延时函数delay()" T# }# J4 P" u0 O* ^4 x1 y
//C51" P D% h0 `& s: P, z2 I+ A
extern void delayms(); //声明( Z4 E/ X" e2 N8 a3 n6 V
int main()
. G8 n- a- w4 T n{: P; N& F/ L# B, r+ ~
delayms(); //调用6 O/ ^% u# w5 v g2 [# \# d+ I
}
( ^; k" L, Z4 @7 b& L; G) b0 f/ V. V
6、有参传递/ h# S: g. a+ ^/ h- K$ c
其实是一样的,就是在子函数中加了参数罢了% G) _/ P7 }9 Z3 q) j
例如:int delay(int minite,int second,……)//参数可以多个
# Y! w$ ]. n4 O+ n- z |