单片机r6/r7c语言怎么用,第5章MCU混合编程与C语言和汇编语言

1d112269f5e0b12e13bc092443a02238.png

第5章单片机C语言和汇编语言的混合编程第5章单片机C语言和汇编语言的混合编程5.1混合编程概述5.1.1单片机汇编语言的功能1. 执行速度快,效率高,实时性强2. 2.编写的程序代码简短,便于硬件操作. 保持机器语言的优势,具有直接而简洁的功能4. 可维护性和可读性差5. 可移植性差第5章单片机C语言和汇编语言的混合编程5.1.2单片机C语言的特点1.可读性,移植性好,使用范围广2. 语言简洁,紧凑,易用且灵活3. 丰富的运算符4.丰富的数据结构和使用现代语言的各种数据类型5. 可以进行结构化的编程6.可以直接操作计算机硬件7.生成的目标代码质量高,程序执行效率高. 第五章单片机C语言和汇编语言混合编程5.1.3单片机混合编程的优点1.编程效率高2. 执行速度快3.可读性,可移植性和广泛的使用范围5.1.4单片机混合编程的基本方法单片机C语言和汇编语言混合编程分为汇编调用C51函数和C51程序参考汇编,通常用在C51程序的引用中进行编译. 在C51程序中使用汇编语言有两种情况: C51程序调用汇编器模块和嵌入式汇编的变量和函数. 用汇编C语言调用C51程序是一种结构化的编程语言. C语言程序以函数为单位,并且可以在汇编器中访问C51程序中的变量和函数.

f841ea9a3691b407537f68a684aebff6.png

第5章混合使用C语言和单片机的汇编语言(1)对于变量: 普通变量: _variable name array: _array name + offset(例如_XX)可以访问C语言程序中定义的变量XX. 使用_XX + 3访问数组中的XX [3]. (2)对于函数: 函数没有参数: 函数名称函数具有参数: _function name,并且必须在调用函数之前准备好参数. 如果在C51程序中定义了不带参数的fun1()函数,则可以使用子程序调用指令在汇编器中调用fun1;否则,可以使用子程序调用指令. 如果定义了带有参数的函数fun2(),则在汇编器中调用该函数时,子程序名称为_fun2. 注意: 为了允许汇编语言访问用C语言定义的变量和函数,必须在C程序中将它们声明为外部变量,即以extern为前缀. 第5章单片机C语言和汇编语言的混合编程2.在C51中嵌入汇编器嵌入汇编器是通过预处理C51中的#pragma asm / endasm语句来实现的. 格式如下: #pragma ASM;汇编代码#pragma ENDASM 3.这种在C51中调用汇编程序的方法具有更多的应用程序. C模块和汇编器模块之间的接口更简单. 用C51和A51编译源程序c语言对应汇编语句,然后使用L51连接obj文件,关键问题是C函数和汇编函数之间的参数传递并获得正确的返回值以确保模块之间的数据交换.

5c8a58e5687e7ad1f52ecd38a3edacf1.png

第5章用C语言和汇编语言进行MCU混合编程5.2混合装配的参数传递和实现5.2.1混合装配的参数传递1. 调用C51函数的汇编程序的参数传递如果C51函数具有参数,则汇编程序必须在调用C51函数之前准备好参数. 在汇编器中,C51函数的最左侧参数由寄存器A传输,其他参数由堆栈按顺序给出. C51函数的返回值是返回到A寄存器或A寄存器给定的地址. 2.嵌入在C51中的汇编器的参数传递是通过变量或特殊功能寄存器实现的. 在C51中调用汇编程序的参数传递在C51中调用汇编程序进行参数传递时,必须严格遵守C51函数参数和返回值的相关约定. 在C51中,有两种调用汇编程序进行参数传递的方法,一种是通过寄存器传递参数,第二种是通过固定存储区传递参数. 第五章C语言和汇编语言的MCU混合编程1)通过寄存器传递参数最多可以通过51个单片机的工作寄存器传递3个参数,其余通过固定存储区传递,参数类型为第一个字符R7 int R6,R7 long / float R4〜R7通用指针R1,R2,R3第二个R5R3R4,R5R2,R3R4〜R7不带R1,R2,R3R1,R2,R3func1(int a)func2(int b,int c,int * d)唯一的参数a传递到寄存器R6和R7中. 第一个参数b传递到寄存器R6和R7中. 第二个参数c传递到寄存器R4和R5中. 第三个参数d在寄存器R1,R2和R3中. 通过第5章MCU的C语言和汇编语言混合编程2)传递固定存储区以将参数传输到具有固定存储区的汇编程序,参数段的首地址保存为段名称?function_name?BYTE和“ function_name” BIT,function_name是函数的名称,其中“ function_name” BIT保存参数段的第一个地址,而“ function_name” BYTE保存另一个参数段的第一个地址. 即使参数通过寄存器传递,参数也会在这些段中分配空间,并根据声明的顺序在每个段中顺序保存.

20_kab7bokdv3r2772odk3b2kjq.jpg

3)函数返回值函数返回值通常通过寄存器传送返回值类型. 位(无符号)char(无符号)int(无符号)long float通用指针C R7 R6,R7 R4〜R7 R4〜R7 R1,R2 ,R3该寄存器由位运算符C返回. 在R7,返回一个字节. 高位是R6,低位是R7,高位是R4,低位是R7,32位IEEE格式存储类型是R3,高位是R2,低位是R1. 用汇编语言进行混合编程5.2.2混合汇编的实现在C51中嵌入汇编器的实现方法步骤1: 如下将汇编器嵌入C文件中. #include void main(void){P2 = 1; #pragma asm MOV R7,#10 DEL: MOV R6,#20 DJNZ R6,$ DJNZ R7,DEL #pragma endasm P2 = 0;}第二步: 右键单击嵌入式程序集的Project窗口中嵌入的C文件. Keil C51软件,在弹出的快捷菜单中选择“选项...”命令,选中右侧的“生成汇编器SRC文件”和“汇编SRC文件”复选框以启用从灰色到黑色(活动)状态的复选框.

d92861b63f288c5f.jpg

第5章MCU C语言和汇编语言的混合编程步骤3: 根据所选的编译模式,将相应的库文件(例如Small模式下的Keil \ C51 \ Lib \ C51S.Lib)添加到项目中,这文件必须是项目的最终文件. 步骤4: 编译以生成目标代码. 2.在C51中调用汇编器的实现方法第一步: 首先用C语言程序编写程序框架,例如文件名a1.c(注意参数). 步骤2: 在Keil C51的Project窗口中,右键单击C语言文件,在弹出的快捷菜单中选择Options for ...,然后在右侧的Generate Assembler SRCFile和Assemble SRC File中将复选框从灰色变为灰色变黑(有效)状态;步骤3: 根据选择的编译模式,将相应的库文件(如Small模式下的Keil \ C51 \ Lib \ C51S.Lib)添加到项目中. 该文件必须是项目的最终文件. 第5章使用C语言和汇编语言进行MCU混合编程步骤4: 编译后,将生成SRC文件,并将文件扩展名更改为ASM. 这形成了可以由C51程序调用的汇编器. 然后,您可以将所需的指令代码添加到文件的代码部分. 步骤5: 将汇编程序以及调用它的主程序添加到项目文件中. 此时c语言对应汇编语句,项目文件中不再需要原始的C语言文件和库文件. 主程序只需要在程序开始时使用EXTERN. 声明了被调用的汇编器中的函数,并且可以在主程序中调用汇编器中的函数. 作业1、2

本文来自电脑杂谈,转载请注明本文网址:

http://www.pc-fly.com/a/jisuanjixue/article-249644-1.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值