基于Keil51汇编与C语言混合编程方法研究.pdf
《基于Keil51汇编与C语言混合编程方法研究.pdf》由会员分享,可在线阅读,更多相关《基于Keil51汇编与C语言混合编程方法研究.pdf(5页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、计算机与现代化?2010年第 10期JISUANJI YU XIANDA I HUA总第 182期文章编号:1006?2475(2010)10?0043?04收稿日期:2010?06?18基金项目:山西省教育厅普通高等学校大学生创新性实验基金资助项目(2008 105)作者简介:张志科(1962?),男,山西翼城人,忻州师范学院电子系副教授,本科,研究方向:自动控制技术。基于 Keil51汇编与 C语言混合编程方法研究张志科,王振喜(忻州师范学院电子系,山西 忻州 034000)摘要:分析基于 Keil51汇编与 C语言混合编程的基本方法,给出每种方法的具体操作步骤。在应用实践中,为了充分发挥
2、两种语言的优势,提高程序的执行效率,可根据问题的特殊性选择相应的编程方案,以期达到缩短程序设计过程的目标。关键词:Keil51;混合编程;参数传递中图分类号:TP311?文献标识码:A?do:i 10.3969/.j issn.1006?2475.2010.10.011Research onM ixed Programm ingM ethod of C Language andAssemble Language Based onKeil51ZHANG Zhi?ke,WANG Zhen?xi(Depart ment of Electronics,X inzhou TeachersCollege,
3、X inzhou 034000,China)Abstract:This paper analyzes the basic method ofm ixed progra mming of C language and assemble language based on Keil51,gives the specific steps of eachmethod.In the application practice,for giving full play to the advantages of both languages andi mproving the executed efficie
4、ncy of progra ms,it can select the appropriate progra mm ing sche me according to the special issue.So it can achieve the goalof shortening the process of programm ing.Keywords:Keil51;m ixed progra mm ing;para meter transfer0?引?言汇编与 C语言优点各异,前者对硬件控制方便、程序代码简练、执行效率高,后者功能丰富、可移植性好、可读性强。为了充分发挥两种语言的优点,使程序更
5、加优化,在单片机程序设计中常会涉及到汇编与C语言混合编程问题。汇编与 C语言混合编程的方法可分为两类,一类是在 C程序中嵌入汇编代码,另一类是两种程序以函数的形式相互调用。C程序调用汇编和汇编调用 C函数是两种基本的调用方式,具体采用何种方式主要取决于工程对程序的要求。根据应用实践的具体情况,可将混合编程的基本方法分为以下 5种情况。1?在 C语言程序段中内嵌汇编代码在 C51中嵌入汇编代码主要是用于实现延时或中断处理,通常是在汇编程序简练,且内部没有复杂跳转时采用,它是通过使用 C51中的一组预处理指令来实现的,具体方法如下:(1)格式要求 1。#pragma as m;汇编程序代码#pra
6、gma endasm(2)工程选项设置 2。在 Project窗口中,右键点击包含汇编代码的 C文件,选择?Options for.,然后在弹出的窗口中选中?Generate Assembler SRC F ile 和?Assemble SRCF ile 两项,使检查框由灰色变成黑色。选中这两项Keil才会将?asm 与?endasm 中的代码复制到输出的 SRC文件中,SRC文件为 C文件中对应的汇编文件,也可通过分析 SRC文件了解函数的封装规则。(3)内嵌汇编代码 C文件实例。#include voidmain(void)44?计?算?机?与?现?代?化2010年第 10期p2=1;#p
7、ragma asm;汇编延时程序#pragma endasmp2=0;对于在 C 程序中通过#pragma asm 和#pragmaendas m 嵌入的汇编程序,Keil在编译时不做其它处理,因此不存在参数传递和返回值问题。2?无参数传递的混合调用在 Keil集成开发环境中进行混合编程时,需要在工程中建立两类文件,C文件和汇编文件,其中汇编文件中的函数作为被调用函数时,只要使得该函数遵循 C51函数的转换规则,就可以实现相互调用。2.1 C程序调用汇编(1)C文件格式 2。C程序在调用汇编函数之前必须先用 extern对函数加以声明。实例 main.c如下:#includeextern vo
8、id delay();/声明此函数为外部函数void main(void)P2=0 xf;fdelay();/所调用的汇编函数P2=0;(2)汇编文件格式 2。首先在程序存储区中定义段,接着利用 PUBL I C把函数声明为公共函数,RSEG为汇编函数起始标志符,之后紧接汇编程序。为了实现程序的相互调用,要求汇编程序必须遵循 C51函数名的转换规则,函数必须以?PR?函数名?模块名 格式命名,否则将无法实现程序的相互调用。实例 delay.asm如下:NAME ONE;定义模块名?PR?DELAY?ONE SEGMENT CODE;在程序存储区中定义段PUBLI C DELAY;声明为公共函数
9、RSEG?PR?DELAY?ONE;函数起始位置DELAY:;汇编程序RETEND2.2 汇编调用 C函数(1)汇编文件格式。此时只需要在汇编文件开头用?EXTRN CODE(函数名)语句来声明所调用的 C函数即可。实例如下:EXTRN CODE(DELAY);声明所要调用的 C函数ORG 0000HMOV P2,#00HCALL DELAY;调用 C函数MOV P2,#FFHEND(2)C文件格式。在该文件中只需写出所要调用的 C函数即可。#includeviod delay()/在汇编文件中所要调用的延时函数/C函数语句该方法主要用于无参数传递的情况,简单且易于掌握。3?通过约定固定存储空
10、间传递参数的混合调用?在 51单片机内可在两种语言之间约定?用户RAM 区 作为参数传递空间。3.1 C程序调用汇编(1)C文件格式。#include extern void delay();voidmain(void)DBYTE 0 x30=0 xFF;DBYTE 0 x31=0 xFF;P2=0;delay();P2=1;(2)汇编文件格式。汇编文件通过约定存储区接收 C文件传递过来的参数,对参数进行处理。NAME T WO?PR?DELAY?TWO SEGMENT CODEPUBLIC DELAYRSEG?PR?DELAY?T WODELAY:MOV R7,#30HDEL:MOV R6,
11、#31HDJ NZ R6,$DJ NZ R7,DELRET?2010年第 10期张志科等:基于 Keil51汇编与 C语言混合编程方法研究45?END3.2 汇编调用 C函数(1)汇编文件格式。EXTRN CODE(function);声明所要调用的 C函数ORG 0000HMOV 30H,#5MOV 31H,#6CALL function;调用 C函数MOV P2,32HEND(2)C文件格式 3。#include#include/在用绝对地址访问时,必须添加该头文件voidfunction(void)DBYTE 0 x32=DBYTE 0 x30+DBYTE 0 x31;该方法简单且容易掌
12、握,却有存储空间使用效率低的缺点,但在项目对存储空间需求较低的情况下,该方法是一个不错的选择。4?通过系统编译分配的存储区传递参数的混合调用?通过系统编译自动分配存储区地址进行传递参数时,参数段首地址需用段名?funname?BYTE 和?funname?BI T 表示,funna me为函数名,其中,?fun?na me?BI T 传递 位参数的 段首地 址,?funname?BYTE 传递其它参数的段首地址,参数将在这些段中分配空间,按声明的先后在每个段中顺序保存 1。该方法多用于 C调用汇编的情况。以下是该方法的一个实例:(1)C文件格式。#include#pragma NOREGPAR
13、 M S/该语句把参数传递约束在固定存储区传递extern void delay(unsigned int i);void main(void)delay(1000);(2)汇编文件格式。?PR?DELAY?DELAYMOD SEGMENT CODE;函数代码段声明?DT?DELAY?DELAYMOD SEGMENT DATA OVER?LAYABLE;自变量数据段声明PUBLI C DELAY,?DELAY?BYTE;程序段及数据段开始地址RSEG?DT?DELAY?DELAYMOD?DELAY?BYTE:VAR_I:DS 2RSEG?PR?DELAY?DELAYMOD;/函数可被连接器放置
14、在任何地方DELAY:MOV R7,?DELAY?BYTE+0;/delay函数中变量 i的高字节DEL0:MOV R6,?DELAY?BYTE+1DJ NZ R6,$DJ NZ R7,DEL0RETEND该方法比较复杂,同样有存储空间使用效率低的缺点,当寄存器不够用时,部分参数必须通过这种方式进行传递(见第 5节),因此该方法一般不单独使用。5?通过寄存器传递参数的混合调用C51规定调用函数最多可通过 51单片机的工作寄存器传递 3个参数,余下的参数通过固定存储区传递。可以用?NOREGPARMS 命令约束为固定存储区传递,如果用固定存储区传递或参数太多,参数通过固定存储区传递,用寄存器传递
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 Keil51 汇编 语言 混合 编程 方法 研究
限制150内