搜档网
当前位置:搜档网 › 基于Keil51汇编与C语言混合编程方法研究

基于Keil51汇编与C语言混合编程方法研究

2010年第lO期计算机与现代化

JISUANJIYUXIANDAIHUA总第182期

文章编号:1006-2475(2010)104)043-04

基于Keil51汇编与C语言混合编程方法研究

张志科,王振喜

(忻州师范学院电子系,山西忻州034000)

摘要:分析基于KeilSl汇编与C语言混合编程的基本方法,给出每种方法的具体操作步骤。在应用实践中,为了充分发挥两种语言的优势,提高程序的执行效率,可根据问题的特殊性选择相应的编程方案,以期达到缩短程序设计过程的目标。

关键词:Keil51;混合编程;参数传递

中图分类号:TP311文献标识码:Adoi:10.3969/j.issn.1006-2475.2010.10.011

ResearchonMixedProgrammingMethodofCLanguageand

AssembleLanguageBasedonKeil51

ZHANGZhi—ke,WANGZhen—xi

(DepartmentofElectronics,XinzhouTeachersCollege,Xinzhou034000,China)

Abstract:ThispaperanalyzesthebasicmethodofmixedprogrammingofClanguageandassemblelanguagebasedonKeil51.givesthespecificstepsofeachmethod.Intheapplicationpractice,forgivingfullplaytotheadvantagesofbothlanguagesandimprovingtheexecutedefficiencyofprograms,itcanselecttheappropriateprogrammingschemeaccordingtOthespecialissue.Soit

canachievethegoalofshorteningtheprocessofprogramming.

Keywords:Keil51;mixedprogramming;parametertransfer

O引言

汇编与C语言优点各异,前者对硬件控制方便、程序代码简练、执行效率高,后者功能丰富、可移植性好、可读性强。为了充分发挥两种语言的优点,使程序更加优化,在单片机程序设计中常会涉及到汇编与C语言混合编程问题。汇编与C语言混合编程的方法可分为两类,一类是在C程序中嵌入汇编代码,另一类是两种程序以函数的形式相互调用。C程序调用汇编和汇编调用C函数是两种基本的调用方式,具体采用何种方式主要取决于工程对程序的要求。根据应用实践的具体情况,可将混合编程的基本方法分为以下5种情况。

1在C语言程序段中内嵌汇编代码

在C51中嵌入汇编代码主要是用于实现延时或中断处理,通常是在汇编程序简练,且内部没有复杂跳转时采用,它是通过使用C51中的一组预处理指令来实现的,具体方法如下:

(1)格式要求…。

#pragma

asm

:汇编程序代码

#pragnm

end船m

(2)工程选项设置旧J。

在Project窗口中,右键点击包含汇编代码的C文件,选择“Optionsfor…”,然后在弹出的窗口中选中“GenerateAssemblerSRCFile”和“AssembleSRCFile”两项,使检查框由灰色变成黑色。选中这两项Keil才会将“asm”与“endasm”中的代码复制到输出的SRC文件中,SRC文件为C文件中对应的汇编文件。也可通过分析SRC文件了解函数的封装规则。

(3)内嵌汇编代码C文件实例。

#include<艇,sSl.h>

voidmain(void)

收稿日期:2010-06.18

基金项目:山西省教育厅普通高等学校大学生创新性实验基金资助项目(2008[105])

作者简介:张志科(1962一),男,山西翼城人,忻州师范学院电子系副教授,本科,研究方向:自动控制技术。万方数据

计算机与现代化2010年第10期

p2=l;

#pragmaasm

;汇编延时程序

静pm鲫aendasm

p2=O:

对于在C程序中通过撑pragmaasITl和#pragmaendasm嵌入的汇编程序,Keil在编译时不做其它处理,因此不存在参数传递和返回值问题。

2无参数传递的混合调用

在Keil集成开发环境中进行混合编程时,需要在工程中建立两类文件,C文件和汇编文件,其中汇编文件中的函数作为被调用函数时,只要使得该函数遵循C51函数的转换规则,就可以实现相互调用。2.1C程序调用汇编

(1)C文件格式[21。

C程序在调用汇编函数之前必须先用extem对

函数加以声明。实例main.c如下:

#include<呼1.h>

extemvoiddemy();//声明此函数为外部函数

voidmmn(void)

P2=0xff;

dehy();//所调用的汇编函数

P2=0;

(2)汇编文件格式‘21。

首先在程序存储区中定义段,接着利用PUBLIC把函数声明为公共函数,RSEG为汇编函数起始标志符,之后紧接汇编程序。为了实现程序的相互调用,要求汇编程序必须遵循C51函数名的转换规则,函数必须以“?PR?函数名?模块名”格式命名,否则将无法实现程序的相互调用。实例delay.asm如下:NAMEONE;定义模块名

?PB?DELAY?ONESEGMENTCODE;在程序存储区中定义段

PUBLICDELAY;声明为公共函数

RSEC?PR?DELAY?ONE;函数起始位置

DELAY:

:汇编程序

RET

END

2.2汇编调用C函数

(1)汇编文件格式。

此时只需要在汇编文件开头用“EXTRNCODE(函

数名)”语句来声明所调用的C函数即可。实例如下:EXTRNCODE(DELAY);声明所要调用的C函数

ORC0000H

MOVP2,#00H

CALLDELAY;调用C函数

MOVP2,#FFH

END

(2)C文件格式。

在该文件中只需写出所要调用的C函数即可。

#include<res51.h>

vioddelay()//在汇编文件中所要调用的延时函数

//C函数语句

该方法主要用于无参数传递的情况,简单且易于掌握。

3通过约定固定存储空间传递参数的混合调用

在5l单片机内可在两种语言之间约定“用户RAM区”作为参数传递空间。

3.1C程序调用汇编

(1)C文件格式。

#include<弛庐1.h>

externvoiddelay();

voidmain(void)

DBYTE[0x30]=O】【FF;

DBYTE[0x31]=OxFF;

P2=0;

dehy();

1>2=1;

(2)汇编文件格式。

汇编文件通过约定存储区接收C文件传递过来的参数,对参数进行处理。

NAMETWO

?PR?DELAY?TWOSEGMENTCODE

PUBUCDEL^Y

碰;EG?PR?DELAY?’rWO

DELAY:

MOVR7,#30H

DEL:

MOVR6.#31H

DJNZR6.¥

DJNZR7。DEL

R明.

万方数据

万方数据

万方数据

万方数据

基于Keil51汇编与C语言混合编程方法研究

作者:张志科, 王振喜, ZHANG Zhi-ke, WANG Zhen-xi

作者单位:忻州师范学院电子系,山西,忻州,034000

刊名:

计算机与现代化

英文刊名:COMPUTER AND MODERNIZATION

年,卷(期):2010,(10)

被引用次数:0次

参考文献(14条)

1.杨加国单片机C语言与汇编语言混合编程 2008(3)

2.陈百良单片机C语言与汇编语言的混合编程 2008(6)

3.马忠梅单片机的C语言应用程序设计 1997

4.王兰英.居锦武单片机C51与汇编语言混合调用的实现 2008(3)

5.李鸿单片机原理及应用 2004

6.杨岸单片机应用系统软件编程效率的提高 2003(3)

7.梁航.王剑钢.张帅Keil C51中调用A51程序 2006(5)

8.靳达单片机应用系统开发实例导航 2003

9.张培仁基于C语言编程MCS-51单片机原理与应用 2002

10.赵亮.侯国锐单片机C语言编程与实例 2003

11.李小洪Keil Software-Cx51编译器用户手册 2001

12.杜波.李丽娜.吴川Keil C51与A51的混合编程 2003(3)

13.刘伏文单片机C和汇编语言混合编程 2007(6)

14.马忠梅.籍顺心.张凯单片机的C语言应用程序设计 2007

本文链接:https://www.sodocs.net/doc/28992626.html,/Periodical_jsjyxdh201010011.aspx

授权使用:东南大学图书馆(wfdndx),授权号:50c80bfd-daf9-4e1e-99bd-9e670182689d

下载时间:2011年1月10日

相关主题