- 1、本文档共11页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第5章 单片机C语言与汇编语言混合编程精选
第5章 单片机C语言与汇编语言混合编程 第5章 单片机C语言与汇编语言混合编程 5.1 混合编程概述 5.1.1 单片机汇编语言的特点 1.执行速度、效率高和实时性强 2.编写的程序代码短,对硬件操作方便 3.保持了机器语言的优点,具有直接和简洁的特点 4.可维护性和可读性差 5.可移植性差 5.1.2 单片机C语言的特点 1.可读性、可移植性好和使用范围广 2.语言简洁、紧凑、使用方便、灵活 3.运算符丰富 4.数据结构丰富,具有现代化语言的各种数据类型 5.可进行结构化的程序设计 6.可以直接对计算机硬件进行操作 7.生成的目标代码质量高,程序执行效率高 * 5.1.3 单片机混合编程的优点 1.编程效率高 2.执行速度快 3.可读性、可移植性好和使用范围广 5.1.4 单片机混合编程的基本方式 1.汇编中调用C51程序 单片机C语言和汇编语言混合编程分为汇编中调用C51函数和C51程序中引用汇编,通常使用的是在C51程序中引用汇编。在C51程序中使用汇编语言有两种情况: C51程序调用汇编程序模块的变量和函数和嵌入式汇编 C语言是结构化程序设计语言,C语言程序以函数为单位,在汇编程序中可以访问C51程序中的变量和函数。 * (1)对于变量: 普通变量:_变量名 数组:_数组名+偏移量 如用_XX可以访问C语言程序中定义的变量XX;用_XX+3可以访问数组中的XX[3]。 (2)对于函数: 函数没有参数:函数名 函数有参数:_函数名 ,并且调用函数前还要准备好参数。 如在C51程序中定义了没有参数的函数fun1(),则在汇编程序中用子程序调用指令调用fun1即可;如定义了有参数的函数fun2(),则在汇编程序中调用时,子程序名用成_fun2。 注意: 为了能够让汇编语言访问到C语言中定义的变量和函数,在C程序中它们必须声明为外部变量,即加extern 前缀 * 2.在C51中嵌入汇编程序 嵌入汇编程序是通过C51中的预处理指令#pragma asm/endasm 语句来实现的。其格式如下: #pragma ASM ;汇编程序代码 #pragma ENDASM 3. 在C51中调用汇编程序 这种方法应用较多,C模块与汇编模块的接口较简单,分别用C51与A51对源程序进行编译,然后用L51将obj文件连接即可,关键问题在于C函数与汇编函数之间的参数传递和得到正确的返回值,以保证模块间的数据交换。 * 5.2 混合汇编的参数传递与实现 5.2.1 混合汇编的参数传递 1.汇编程序调用C51函数的参数传递 如C51函数有参数,则汇编程序在调用C51函数前要准备好参数。在汇编程序中C51函数最左边的一个参数由寄存器A传递,其他的参数按顺序通过堆栈给出。C51函数的返回值是返回到A寄存器或者由A寄存器给出的地址。 2.在C51中嵌入汇编程序的参数传递 通过变量或特殊功能寄存器来实现 3.在C51中调用汇编程序的参数传递 C51中调用汇编程序进行参数传递时都必须严格遵守C51函数的参数和返回值的相关约定。 C51中调用汇编程序进行参数传递的方式有两种,一种是通过寄存器传递参数,第二种是通过固定存储区传递。 * 1) 通过寄存器传递参数 最多可通过51单片机的工作寄存器传递3个参数,余下的通过固定存储区传递, 参数类型 char int long/float 通用指针 第1个 R7 R6、R7 R4~R7 R1、R2、R3 第2个 R5 R4、R5 R4~R7 R1、R2、R3 第3个 R3 R2、R3 无 R1、R2、R3 func1(int a) 唯一一个参数a在寄存器R6和R7中传递 func2(int b,int c,int *d) 第一个参数b在寄存器R6和R7中传递,第二个参数c在寄存器R4和R5中传递,第三个参数d在寄存器R1、R2和R3中传递 * 2)通过固定存储区传递 用固定存储区传递参数给汇编程序,参数段首地址用段名?function_name?BYTE和?function_name?BIT保存,function_name为函数的名称,其中,?function_name?BIT保存位参数段首地址,?function_name?BYTE保存别的参数段首地址,即使通过寄存器传递参数,参数也将在这些段中分配空间,并按声明的先后在每个段中顺序保存。 3)函数返回值 函数返回值通常用寄存器传递 返回值类型 寄 存 器 说 明 Bit C 由位运算器C返回 (unsigned)char R7 在R7返回单个字节 (unsigned)int R6、R7 高位在R6,低位在R7 (unsigned) long R4~
文档评论(0)