第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程序中的变量和函数.

第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函数和汇编函数之间的参数传递并获得正确的返回值以确保模块之间的数据交换.

第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保存另一个参数段的第一个地址. 即使参数通过寄存器传递,参数也会在这些段中分配空间,并根据声明的顺序在每个段中顺序保存.

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文件”复选框以启用从灰色到黑色(活动)状态的复选框.

第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

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

  1. c语言与汇编语言混合编程实验,C语言与汇编语言混合编程实验

    混合编程方法: 模块链接法 汇编指令嵌入法 1: 模块链接法则 模块链接法是指分别用汇编语言和C语言实现独立的模块(或子程序),再用链接程序把各模块生成的obj文件连接成一个可执行程序. 1:C语言调 ...

  2. 【Golang第8章:面向对象编程】Go语言的结构体是什么,怎么声明;Golang方法的调用和声明;go语言面向对象实例,go语言工厂模式;golang面向对象的三大特性:继承、封装、多态

    介绍 这个是在B站上看边看视频边做的笔记,这一章是Glang面向对象编程 这一章内容较多,内容有Go语言的结构体是什么,怎么声明:Golang方法的调用和声明:go语言面向对象实例,go语言工厂模式: ...

  3. 嵌入式c语言汇编混合编程,嵌入式C语言和汇编语言的混合编程

    此文章简单介绍 单片机 C语言和汇编语言混合编程的例子.主要用单片机汇编语言编写DS1302的底层驱动,在C语言里通过调用汇编语言,从而实现C和汇编的混合编程. ;汇编语言源文件 ;========= ...

  4. c语言汇编混合编程方法,C语言和汇编语言混合编程方法

    摘要: C语言是一种高级的面向过程的开发语言,汇编语言是一种低级的面向机器的编程语言.两者在程序设计开发方面各有优劣,目前两者的混合编程得到了广泛的应用.本文通过具体的实例,说明了混合编程的基本方法, ...

  5. 汇编c语言混合编程pdf,C语言及汇编语言混合编程的方法.pdf

    维普资讯 1993矩 化 工 电 子 计 算 第 2期 C语言与汇编语言混合编程的方法 f/1) (南京犬李葛于如丽顶吾学系) 摘 要 本文通过实例阐述了当前较为漉行的两种c语盲 (Microsoft ...

  6. c语言混合编程 pdf,C语言与汇编语言混合编程的方法.pdf

    C语言与汇编语言混合编程的方法 维普资讯 讫 梅 龄 施 扰 绝 埔 综 勿 穗 直 触 搔 拌 橱 悬 邱 舟 絮 颈 茬 辞 乏 味 绞 涡 菊 黄 宜 悄 条 搬 悄 俱 泼 洋 醚 檀 测 易 ...

  7. java语言与c 相比 有哪些优点_Java编程和C语言分别有哪些优势

    原标题:Java编程和C语言分别有哪些优势 在IT业和互联网的飞速发展时代,企业对程序员的需求也大量增加,但是因为国内IT人才贮备的不足.培训体系的不健全以及国内IT技术人员对其价值认识不够,造成各类 ...

  8. 单片机r6/r7c语言怎么用,关于单片机C51中c语言函数(-nop-())?

    实现延时通常有两种方法:一种是硬件延时,要用到定时器/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时:另一种是软件延时,这种方法主要采用循环体进行. 1  使用定时器/计数器实现精确延时 ...

  9. 易语言不用oracle客户端_大叔学中文编程之易语言02

    搭建网络环境及软件安装 一.搭建局域网服务器 这套软件的主要功能是给客户端提供数据共享与查询,所以需要网络环境. 服务器的搭建,这个没有啥难的,我用是一台10年前的一台台式机,具体啥配置我也不知道,勉 ...

  10. d语言 c++ 混合编程,C++,D语言,Python语言一次模拟合作开发

    我想要做一个网络server,一个网络client. server主要就是一个echo回应,client连上服务器后打印服务器返回的回应. Python做一个性能测试,调用50000次client去连 ...

最新文章

  1. jstatd,VisualVM使用和报错解决:Could not create remote object--java.security.AccessControlException
  2. HTML学习笔记之二(回到顶部 与 回到底部)
  3. 神策 FM | 20 种方法,让你成为用户的知心朋友
  4. 试用去水印_教你一键视频去水印,支持抖音、快手、小红书、哔哩哔哩等几十个平台...
  5. WIN7 64位系统注册银行支付组件
  6. OpenCV获取图像某点的颜色值,并设置某点的颜色
  7. 线上故障快速定位及恢复
  8. openstack排错
  9. spark学习——(二)spark基础环境配置-linux(1)
  10. C++自学历程——启程篇
  11. 阿里品牌数据银行:最全数据银行介绍
  12. 分布式系统设计模式 - 预写日志(Write Ahead Log)
  13. volatile内存屏障
  14. stm32 f105 RBT6 建立工程头文件
  15. 数学建模学习(1) 线性规划
  16. php 时间加法函数_PHP 日期时间函数的高级应用技巧
  17. 年收入过10亿美元,Veeam看好云数据管理
  18. 微信小程序之文档管理系统(含源码+论文+答辩PPT等)
  19. 你需要的jmeter常用Beanshell脚本,还不看一眼?
  20. 如何借助车间有毒有害气体监控系统,提升生产安全和效率?

热门文章

  1. 【PM2.5预测】基于matlab灰色模型PM2.5预测【含Matlab源码 499期】
  2. python用缩进来写模块_进击python第一篇:相遇
  3. c截取字符串中的一部分_2019年!史上最全Python基础题(50道题详解)持续更新中-第二篇...
  4. 游戏行业数据类丛书_理论丛书:高维数据101
  5. 电子邮件地址中服务器怎么看,你如何检查电子邮件服务器(gmail)中的某个地址,并基于该地址运行一些东西?...
  6. emui内核支持kvm吗_EMUI和MIUI为什么不基于安卓linux内核不使用虚拟机直接用c++开发一些更流畅系统自带软件呢?...
  7. python回测函数_Python事件化回测双均线
  8. php 获取某周的最后一天,PHP获取本周首先天和最后一天
  9. 【Cadence】制作AD630焊盘SOIC_20
  10. centos7 更新php版本,Centos7升级php版本到php7实例分享