欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    第5章 单片机C语言与汇编语言混合编程.ppt

    • 资源ID:79016198       资源大小:103.50KB        全文页数:11页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第5章 单片机C语言与汇编语言混合编程.ppt

    5.1.4 5.1.4 单片机混合编程的基本方式单片机混合编程的基本方式单片机混合编程的基本方式单片机混合编程的基本方式1 1汇编中调用汇编中调用汇编中调用汇编中调用C51C51程序程序程序程序 单片机C语言和汇编语言混合编程分为汇编中调用汇编中调用汇编中调用汇编中调用C51C51函函函函数数数数和C51程序中引用汇编引用汇编引用汇编引用汇编在C51程序中使用汇编语言有两种情况:C51程序调用汇编程序模块的变量,函数和嵌入式汇编 在汇编程序中可以访问C51程序中的变量和函数。(1)(1)汇编中调用汇编中调用汇编中调用汇编中调用C51C51的变量:的变量:的变量:的变量:普通变量:_ _变量名变量名变量名变量名数组:_ _数组名数组名数组名数组名+偏移量偏移量偏移量偏移量用_XX_XX可以访问C语言程序中定义的变量XXXX;用_XX+3_XX+3可以访问数组中的XX3XX3。(2)(2)对于函数:对于函数:对于函数:对于函数:如在C51程序中定义了没有参数的函数fun1()fun1(),则,在汇编程序中用子程序调用指令调用fun1fun1即可;如定义了有参数的函数fun2()fun2(),则,在汇编程序中调用时,子程序名用成_fun2_fun2。注意:注意:注意:注意:为了能够让汇编语言访问到为了能够让汇编语言访问到为了能够让汇编语言访问到为了能够让汇编语言访问到C C C C语言中定语言中定语言中定语言中定义的变量和函数,在义的变量和函数,在义的变量和函数,在义的变量和函数,在C C C C程序中它们必须声明为外部程序中它们必须声明为外部程序中它们必须声明为外部程序中它们必须声明为外部变量,即加变量,即加变量,即加变量,即加extern extern extern extern 前缀前缀前缀前缀 函数没有参数:函数名函数名函数名函数名函数有参数:_ _函数名,函数名,函数名,函数名,调用函数前要准备好参数。2 2在在在在C51C51中嵌入汇编程序中嵌入汇编程序中嵌入汇编程序中嵌入汇编程序 通过C51中的预处理指令#pragmapragma asm/endasmasm/endasm 语句来实现。其格式如下:#pragmapragma ASM ASM;汇编程序代码汇编程序代码汇编程序代码汇编程序代码#pragmapragma ENDASM ENDASM3.3.在在在在C51C51中调用汇编程序中调用汇编程序中调用汇编程序中调用汇编程序 这种方法应用较多,C模块与汇编模块的接口较简单,分别用C51与A51对源程序进行编译,然后用L51将obj文件连接,关键问题在于C函数与汇编函数之间的参数传递和得到正确的返回值,以保证模块间的数据交换。5.2 5.2 混合汇编的参数传递与实现混合汇编的参数传递与实现混合汇编的参数传递与实现混合汇编的参数传递与实现5.2.1 5.2.1 混合汇编的参数传递混合汇编的参数传递混合汇编的参数传递混合汇编的参数传递1 1汇编程序调用汇编程序调用汇编程序调用汇编程序调用C51C51函数的参数传递函数的参数传递函数的参数传递函数的参数传递 如C51函数有参数,则汇编程序在调用C51函数前要准备好参数。在汇编程序中,C51函数最左边的一个参数最左边的一个参数最左边的一个参数最左边的一个参数由寄存器A传递,其他的参数按顺序通过堆栈按顺序通过堆栈按顺序通过堆栈按顺序通过堆栈给出。C51函数的返回值是返回到A寄存器或者由A寄存器给出的地址。2 2在在在在C51C51中嵌入汇编程序的参数传递中嵌入汇编程序的参数传递中嵌入汇编程序的参数传递中嵌入汇编程序的参数传递 通过变量或特殊功能寄存器来实现 3 3在在在在C51C51中调用汇编程序的参数传递(难点)中调用汇编程序的参数传递(难点)中调用汇编程序的参数传递(难点)中调用汇编程序的参数传递(难点)C51中调用汇编程序进行参数传递时都必须严格遵守C51函数的参数和返回值的相关约定。C51中调用汇编程序进行参数传递的方式有两种,一一一一种是通过寄存器种是通过寄存器种是通过寄存器种是通过寄存器传递参数,第二种是通过固定存储区固定存储区固定存储区固定存储区传递。1)1)通过寄存器传递参数通过寄存器传递参数通过寄存器传递参数通过寄存器传递参数最多可通过51单片机的工作寄存器传递3个参数,余下的通过固定存储区传递 参数类型charintlong/float通用指针第第第第1 1个个个个R7R7R6R6、R7R7R4R4R7R7R1R1、R2R2、R3R3第第第第2 2个个个个R5R5R4R4、R5R5R4R4R7R7R1R1、R2R2、R3R3第第第第3 3个个个个R3R3R2R2、R3R3无无无无R1R1、R2R2、R3R3func1(int a)func1(int a)func1(int a)func1(int a)唯一一个参数唯一一个参数唯一一个参数唯一一个参数a a a a在寄存器在寄存器在寄存器在寄存器R6R6R6R6和和和和R7R7R7R7中传递中传递中传递中传递func2(int bfunc2(int bfunc2(int bfunc2(int b,intintintint c c c c,intintintint *d)*d)*d)*d)第一个参数第一个参数第一个参数第一个参数b b b b在寄存器在寄存器在寄存器在寄存器R6R6R6R6和和和和R7R7R7R7中传递,中传递,中传递,中传递,第二个参数第二个参数第二个参数第二个参数c c c c在寄存器在寄存器在寄存器在寄存器R4R4R4R4和和和和R5R5R5R5中传递,中传递,中传递,中传递,第三个参数第三个参数第三个参数第三个参数d d d d在寄存器在寄存器在寄存器在寄存器R1R1R1R1、R2R2R2R2和和和和R3R3R3R3中中中中传递传递传递传递2)2)通过固定存储区传递通过固定存储区传递通过固定存储区传递通过固定存储区传递用固定存储区传递参数给汇编程序,参数段首地址用段名?function_name?BYTE和?function_name?BIT保存,function_name为函数的名称,其中,?function_name?BIT保存位参数段首地址,?function_name?BYTE保存别的参数段首地址,即使通过寄存器传递参数,参数也将在这些段中分配空间,并按声明的先后在每个段中顺序保存。3)3)函数返回值函数返回值函数返回值函数返回值 函数返回值通常用寄存器传递 返回值类型返回值类型寄寄 存存 器器说说 明明BitBitC由由位位运算器运算器C返回返回(unsigned)charunsigned)charR7在在R7返回返回单单个字个字节节(unsigned)intunsigned)intR6、R7高位在高位在R6,低位在,低位在R7(unsigned)long(unsigned)longR4R7高位在高位在R4,低位在,低位在R7floatfloatR4R732位位IEEE格式格式通用指通用指通用指通用指针针针针R1、R2、R3存存储类储类型在型在R3,高位在,高位在R2,低位在,低位在R15.2.2 5.2.2 混合汇编的实现混合汇编的实现混合汇编的实现混合汇编的实现1 1C51C51中嵌入汇编程序的实现方法中嵌入汇编程序的实现方法中嵌入汇编程序的实现方法中嵌入汇编程序的实现方法#include void main(void)P2=1;#pragmapragma asmasmMOVR7,#10MOVR7,#10DEL:MOVR6,#20DEL:MOVR6,#20DJNZR6,$DJNZR6,$DJNZR7,DELDJNZR7,DEL#pragmapragma endasmendasmP2=0;第一步:在C文件中以如下方式嵌入汇编程序。第二步:在KeilKeil C51 C51软件的Project Project 窗口窗口窗口窗口右击嵌入汇编程序的C文件,在弹出的快捷菜单中选择Options for.Options for.命令,选中右边的Generate Assembler SRC File和Assemble SRC File复选框,使检查框由灰色变成黑色(有效)状态。第三步:根据选择的编译模式,把相应的库文件(如 Small 模式时,是 KeilC51LibC51S.Lib)加入到工程中,该文件必须作为工程的最后文件。第四步:编译,即可生成目标代码。2 2C51C51中调用汇编程序的实现方法中调用汇编程序的实现方法中调用汇编程序的实现方法中调用汇编程序的实现方法第一步:先用C语言程序编写出程序框架,如文件名为a1.c(注意参数)。第二步:在Keil C51的Project窗口中右击该C语言文件,在弹出的快捷菜单中选择Options for.,右边的Generate Assembler SRCFile和Assemble SRC File,使检查框由灰色变成黑色(有效)状态;第三步:根据选择的编译模式,把相应的库文件(如Small模式时,是KeilC51Lib C51S.Lib)加入工程中,该文件必须作为工程的最后文件。第四步:编译后将会产生一个SRC的文件,将这个文件扩展名改为ASM。这样就形成了可供C51程序调用的汇编程序。随后可在该文件的代码段中加入所需的指令代码。第五步:将该汇编程序与调用它的主程序一起加到工程文件中,这时工程文件中不再需要原来的C语言文件和库文件,主程序只需要在程序开始处用EXTERN对所调用的汇编程序中的函数作声明,在主程序中就可调用汇编程序中的函数了。

    注意事项

    本文(第5章 单片机C语言与汇编语言混合编程.ppt)为本站会员(qwe****56)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开