一.在keil中C函数调用汇编函数:
  主要思路:先用C来编写所要实现及调用的汇编函数,然后由此C函数生成相应的汇编代码,这样我们就可以不用去管混合编程调用时复杂的函数接口,我们只要修改相应汇编函数中的主体部分来实现我们所要的功能。
  具体步骤如下:
  1、先建立一个新的工程,在里面编写如下两个C程序文件:main.c及delay.c。其代码如下:

//main.c
#include<reg51.h>
extern void delay();

main()
{
    )
    {
        delay();
        P1=~P1;
    }
}
//delay.c
#define uchar unsigned char
void delay(void)
{
    uchar i;
    ;i>;i--);
} 

  2、在 Project 窗口中需要生成汇编代码的 C 文件(delay.c)上右键,选择“Options for ...”,点击右边的“Generate Assembler SRC File”和“Assemble SRC File”,使检查框由灰色变成黑色(有效)状态。

  3、全部重新编译后会在工程目录下多生成一个delay.src的文件,将其改为delay.ASM.然后在KEIL工程中删除delay.c,将delay.ASM添加进去,全部重新编译即可通过。
  4、然后我们就可以在我们自己的delay.ASM中修改自己的代码来实现相应的功能。(注;在有的文献中会在2-3之间添加这一步step.根据选择的编译模式,把相应的库文件(如 Small 模式时,是 Keil\C51\Lib\C51S.Lib)加入工程中,该文件必须作为工程的最后文件;在KEIL3中经验证没有这步也可以)。
  下面给出在同一个文件中两个改编的延时子程序:

...............................................................................................................
    NAME    DELAY          ;定义模块名为DELAY
?PR?Delay?DELAY    SEGMENT CODE  ;Delay为函数名 ,在程序区中定义段
PUBLIC  Delay            ;声明函数
RSEG  ?PR?Delay?DELAY        ;函数可被链接器放在任意地方

Delay:                            ;重点注意:此处为函数名开头,不能换成其他的,否则出现未定义符号错误

loop:   

    DJNZ R6,$ ;50×100×2
    DJNZ R7,loop;100×2
    DJNZ R5,loop
    RET
;END                              ;//由于下面还有一个子程序,所以此外不能用END

;NAMEDELAY100MS                    ;//不能重新定义模块名,否则出错
?PR?Delay100ms?DELAY    SEGMENT CODE
PUBLIC  Delay100ms

RSEG  ?PR?Delay100ms?DELAY

Delay100ms:
        mov     r5,#0c3h        ;100.036ms
time100ms_1:
        mov     r6,#0ffh        ;511us
        djnz    r6,$
        djnz    r5,time100ms_1
RET
END

KEIl混合编程步骤详解的更多相关文章

  1. JDBC概述及编程步骤详解

    目录 一.JDBC概述 二.JDBC编程步骤(以MySQL为例) 1.导入jar包 2.加载数据库驱动 3.通过DriverManager获得Connection对象 3.定义SQL语句 4.利用Co ...

  2. MD5算法步骤详解

    转自MD5算法步骤详解 之前要写一个MD5程序,但是从网络上看到的资料基本上一样,只是讲了一个大概.经过我自己的实践,我决定写一个心得,给需要实现MD5,但又不要求很高深的编程知识的童鞋参考.不多说了 ...

  3. java并发编程 | 锁详解:AQS,Lock,ReentrantLock,ReentrantReadWriteLock

    原文:java并发编程 | 锁详解:AQS,Lock,ReentrantLock,ReentrantReadWriteLock 锁 锁是用来控制多个线程访问共享资源的方式,java中可以使用synch ...

  4. 人工智能之深度学习-初始环境搭建(安装Anaconda3和TensorFlow2步骤详解)

    前言: 本篇文章主要讲解的是在学习人工智能之深度学习时所学到的知识和需要的环境配置(安装Anaconda3和TensorFlow2步骤详解),以及个人的心得体会,汇集成本篇文章,作为自己深度学习的总结 ...

  5. ASP.NET连接Oracle数据库的步骤详解(转)

    ASP.NET连接Oracle数据库的步骤详解   本文我们主要介绍了ASP.NET连接Oracle数据库的步骤及每个步骤需要进行的设置,希望能够对您有所帮助.   在用ASP.NET开发应用程序时, ...

  6. Oracle 11g客户端在Linux系统上的配置步骤详解

    Oracle 11g客户端在Linux系统上的配置步骤详解 2011-07-26 10:47 newhappy2008 CSDN博客 字号:T | T 本文我们主要介绍了Oracle 11g客户端在L ...

  7. centos6.4安装配置vpn服务器步骤详解

      centos6.4安装配置vpn服务器步骤详解,从安装VPN到配置VPN服务器.配置VPN服务器的路由转发功能,每一步都很详细   一.VPN服务器环境说明 操作系统:CentOS release ...

  8. EA创建用例图步骤详解

    EA创建用例图步骤详解 1 创建一个项目 2 选择需要的模型 3 新建模型包 4 新建图表 5 新建模型包 6 创建用户角色Actor 7 新建用例 8 关联用户和用例 9 最后整个项目浏览器目录结构 ...

  9. gcc/g++等编译器 编译原理: 预处理,编译,汇编,链接各步骤详解

    摘自http://blog.csdn.net/elfprincexu/article/details/45043971 gcc/g++等编译器 编译原理: 预处理,编译,汇编,链接各步骤详解 C和C+ ...

随机推荐

  1. BZOJ2659: [Beijing wc2012]算不出的算式

    2659: [Beijing wc2012]算不出的算式 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 668  Solved: 366[Submit] ...

  2. delphi7编写客户端调用java服务器端webservice示例

    1. 首先取得java-webservice服务器端地址.我的是:http://localhost:8080/mywebservice/services/mywebservice?wsdl 2. 然后 ...

  3. 简单的HDFS思维导图

  4. 我对Laravel ThinkPHP Yii symfony2 CI cakephp 的看法

    这是我的真心体会,在尝试使用Laravel.ThinkPHP.Yii.symfony2.CI.cakephp.Yii2 之后的真实想法(default7#zbphp.com). 1)ThinkPHP ...

  5. struts2操作数据库

    struts2操作数据库是刚開始学习的人的一个难点也是一个重点,如今我为大家解说一下struts2操作数据库,使用struts2对数据库进行增.删.改.查和分页查询,请看以下的代码: User类 pu ...

  6. PLSQL developer 连接不上64位Oracle 的解决方法

    Windows 64位下装Oracle 11g 64位,PLSQL Developer使用出现以下问题: 1.Database下拉框为空:2.强制输入用户名.密码及Database,登录弹出: 引用 ...

  7. (第三章)Java内存模型(下)

    一.happens-before happens-before是JMM最核心的概念.对于Java程序员来说,理解happens-before是理解JMM的关键. 1.1 JMM的设计 从JMM设计者的 ...

  8. ViewDragHelper详解

    2013年谷歌i/o大会上介绍了两个新的layout: SlidingPaneLayout和DrawerLayout,现在这俩个类被广泛的运用,其实研究他们的源码你会发现这两个类都运用了ViewDra ...

  9. linux一键安装vncserver脚本

    title: linux一键安装vncserver脚本 date: 2016-04-11 14:32:04 tags: --- linux多数情况下是作为服务器使用的,管理员一般也喜欢使用命令行来管理 ...

  10. git开源项目协作

    开源项目协作 fork开源项目,即打开开源项目的github,然后点击fork按钮 pull request