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;
I
(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()//在汇编文件中所要调用的延时函数
l
//C函数语句
l
该方法主要用于无参数传递的情况,简单且易于掌握。
3通过约定固定存储空间传递参数的混合调用
在5l单片机内可在两种语言之间约定“用户RAM区”作为参数传递空间。
3.1C程序调用汇编
(1)C文件格式。
#include<弛庐1.h>
externvoiddelay();
voidmain(void)
l
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日