KEIL C51 A51混合编程-2017年10月.ppt

  1. 1、本文档共36页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
KEILC51A51混合编程

第5章 单片机C语言与汇编语言混合编程 §5-1 混合编程概述 汇编语言特点: 优点:执行速度快、效率高、实时性强、与硬件结 合紧密。 缺点:编程难度大、可读性差,不便于移植、开发 时间长。 C语言特点: 优点:编程容易、可移植性强、支持多种数据类型, 能直接对硬件进行操作,效率高。 缺点:实时处理弱于汇编语言,无法准确定时。 混合编程特点: 效率高、速度快、易于编程、可读性、可移植性好, 使用范围广 单片机混合编程的基本方式 汇编中调用C51函数 C51程序中引用汇编(常用) 两种情况: 1.汇编程序部分和C51程序部分为不同的模块或不 同的文件,由C51程序调用汇编程序模块中的变 量和子过程。 2.嵌入式汇编:在C51程序中嵌入一段汇编语言程 序。 1.汇编中调用C51程序 在汇编程序中可以访问C51程序中的变量和函数: 对于变量的访问:在汇编程序中,用变量名前带下划线的方式即可访问C程序中定义的变量,用数组名前带下划线后面加偏移量的方式即可访问C程序中定义的数组。 例如: 用_XX可以访问C中的变量XX; 用_XX+3可访问数组元素XX[3]。 对于函数的访问: 1)C51函数没有参数传递,在汇编中直接用C51程序中的函数名即可。 2) C51函数有参数,用函数名前带下划线的方式即可访问,但要注意,汇编程序在调用C51函数前需准备好参数 。 2.在C51中嵌入汇编程序 在C语言程序中嵌入汇编程序是通过C51中的预处理指令#pragma asm/endasm 实现的。 格式: #pragam ASM ;汇编程序代码 #pragam ENDASM 按模块用不同的编程语言编写源程序,最后通过编译/连接器生成一个可执行的完整程序。 关键问题:C函数与汇编函数之间的参数传递和得到正确的返回值,以保证数据交换。 不管用哪种方式,混合编程时,汇编语言要按照C51语言的规定来编写(包括函数参数、返回值传送规则、段的选用和命名等)。 5.2 混合汇编的参数传递与实现 1. 汇编程序调用C51函数的参数传递 a.在C51程序中,被调用的C函数必须加extern前缀; b.在汇编程序中,调用前要先准备好参数。要求被调用的C函数最左边的参数由寄存器A传递,其它参数按顺序通过堆栈给出。C51函数的返回值是返回到A寄存器或者由A寄存器给出的地址中。 2. 在C51中嵌入汇编程序的参数传递 不存在函数调用时参数传递和返回值问题。 可通过变量或SFR实现数据传递。 如:在C51程序中定义Z变量,在C程序和汇编程 序中共同访问Z变量,即可实现数据传递。 1)通过寄存器传递参数 调用时参数的传递分三种情况: a.少于等于3个参数时通过寄存器传递; b.如用NOREGPARMS命令取消用寄存器传递参数或参数太多,通过固定存储区传递 c.对于重入函数参数通过堆栈传递。 通过寄存器传递参数的函数在生成代码时被编译器在函数名前加了一个下划线前缀,而用固定存储区传递参数的函数没有下划线; 通过寄存器传递速度最快; 不同的参数用到的寄存器不一样; 不同的数据类型用到的寄存器也不同; 用固定存储区传递参数给汇编程序,参数段首地址通过名为“?函数名?BYTE”的符号确定。当传递位值时,使用名为“?函数名?BIT”的符号。所有传递的参数放在以首地址开始递增的存储区内,函数返回值放入CPU寄存器。 即使通过寄存器传递参数,参数也将在这些段中分配空间,并按声明的先后在每个段中顺序保存。 用作参数传递的固定存储区可能在内部数据区或外部数据区,由存储模式决定。 当函数有返回值时,通过寄存器传递。 5.2.2 混合编程的实现 第一步:在C文件中嵌入汇编程序。 例如:#includereg51.h void main(void) { P2=1; #pragma asm MOV R7,#10 DEL: MOV R6,#20 DJNZ R6,$ DJNZ R7,DEL #pragma endasm P2=0; } 第二步:在Keil C51软件的Project窗口右击该C文件,在弹出的快捷菜单中选择Options for…命令,选中右边的Generate Assembler SRC File和Assembler SRC File复选框,时检查框由灰色变成黑色状态。 第三步:根据选择的编译模式,把相应的库文件(如Small模式时,是Keil\C51\Lib\C51S.Lib)加入到工程中,该文件必须作为工程的最后文件。 库文件与编译模式的关系如下: C5

文档评论(0)

xxj1658888 + 关注
实名认证
内容提供者

教师资格证持证人

该用户很懒,什么也没介绍

领域认证该用户于2024年04月12日上传了教师资格证

1亿VIP精品文档

相关文档