P1=0x00;

#pragma asm

MOV     R3,#08H

DJNZ    R3,$

#pragma endasm

P1=0xff;

}

void delay(void)

{

#pragma asm

MOV     R4,#08H

DJNZ    R4,$

#pragma endasm

}

(4)、汇编语言中外部子程序的调用

汇编语言中外部子程序的调用

在遍写程序的时候,可以在一个文件的汇编程序中调用另一个文件的子程序。具体的方法如下。

1:在主程序文件中要声明所调用的子程序在外部。比如在主程序中调用子程序名为DELAY的子程序,其格式为:EXTRN   CODE (DELAY)

2:在被调用的文件中要声明,被调用的子程序为公共类型的。比如DELAY要声明的格式为:PUBLIC  DELAY

3:在被调用的文件中还需要声明此文件是可从新定位的。

SS      SEGMENT CODE

RSEG SS

整个事例如下,文件A:

EXTRN   CODE (DELAY)

EXTRN   CODE (DEL)

ORG     0000H

AJMP    MAIN

ORG     0030H

MAIN:   NOP

TT:     MOV     P0,#00H

LCALL   DELAY

LCALL   DEL

MOV     P0,#0FFH

LJMP    TT

END

文件B:

PUBLIC  DELAY

PUBLIC  DEL

SS      SEGMENT CODE

RSEG SS

DELAY: MOV     R2,#3H

DJNZ    R2,$

RET

DEL:    MOV     R3,#03H

DJNZ   R3,$

RET

END

(5)采用__asm进行汇编的嵌入,例如:

if (sys_ctrl.t_run_num!=sys_ctrl.nt_run_num)

{

__asm PUSH ACC                  //断点数据保存

__asm PUSH B

__asm PUSH PSW

__asm PUSH AR0

__asm PUSH AR1

__asm PUSH AR2

__asm PUSH AR3

__asm PUSH AR4

__asm PUSH AR5

__asm PUSH AR6

__asm PUSH AR7

sys_task[sys_ctrl.t_run_num].task_sp = SP;  //保存栈顶地址

sys_ctrl.t_run_num = sys_ctrl.nt_run_num;   //任务号切换

sys_ctrl.nt_run_num = 0;                    //将新任务号清除便于后续操作

SP = sys_task[sys_ctrl.t_run_num].task_sp;  //获取新任务栈顶地址

__asm POP AR7                   //恢复断点数据

__asm POP AR6

__asm POP AR5

__asm POP AR4

__asm POP AR3

__asm POP AR2

__asm POP AR1

__asm POP AR0

__asm POP PSW

__asm POP B

__asm POP ACC

}

编译时,进入如下对话框,选中其中标出的两项:

[1] [2]

本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

keil4在C51中嵌入汇编语言,KEIL C51程序中如何嵌入汇编相关推荐

  1. 根据c51程序改写汇编语言,Keil C51编译及连接技术

    主要介绍Keil C51的预处理方法如宏定义.常用的预处理指令及文件包含指令,C51编译库的选择及代码优化原理,C51与汇编混合编程的方法与实现以及超过64KB空间的地址分页方法的C51实现. 教学目 ...

  2. c51 嵌入 汇编语言,单片机代码编程时如何嵌入汇编语言

    有一次有读者提问,想从C51单片机转入stm8单片机来学习,那么进行软件编程时能不能使用汇编呢?小编本文就简要介绍下如何使用C语言编程嵌入汇编语言. stm8单片机编译有两种嵌入汇编指令的方法.第一种 ...

  3. c51语言bit函数,keil C51中的本征函数库及使用说明

    本征函数(intrinsicroutines)是指编译时直接将固定代码插入当前行,而不用ACALL和LCALL 来实现(无需堆栈操作?),可大大提高函数的访问效率. 函数原型 extern void  ...

  4. c51语言c100错误,KEIL C51错误的解决办法

    有时候在编好一个程序之后,编译链接时,提示说有如下错误. 错误为 ..校长基金1TEXT1.C(56): error C100: unprintable character 0xA1 skipped ...

  5. c51语言开发工具,KEIL C51 开发工具

    产业标准的Keil C编译器.宏汇编器.调试器.实时内核.单板计算机和仿真器,支持所有的8051系列微控制器,帮助你如期完成项目进度. 当启动一个新的项目,你只需从设备数据库选择使用的微控制器,μVi ...

  6. python在中小学教学中的应用-在python程序中的进程操作

    ********在python程序中的进程操作********之前我们已经了解了很多进程相关的理论知识,了解进程是什么应该不再困难了,刚刚我们已经了解了, 运行中的程序就是一个进程.所有的进程都是通过 ...

  7. chrome插件中调用ajax,Chrome扩展程序中的Ajax调用无效

    尝试在Chrome扩展程序中发送ajax请求.我已经确认请求返回200响应,它应该只是console.log来测试'.我不确定这里是否存在异常问题?我已经阅读了Chrome扩展程序' addListe ...

  8. http中的scheme和小程序中的scheme

    1. http中的scheme scheme就是url中标识协议的部分,可能是http也可能是ftp等. / 标识path的开始. :标识参数的开始,例如: ftp://prep.ai.mit.edu ...

  9. c语言编程中野指针错误,C程序中可怕的野指针

    一.疑问点 指针是C语言一个很强大的功能,同时也是很容易让人犯错的一个功能,用错了指针,轻者只是报个错,重者可能整个系统都崩溃了.下面是大家在编写C程序时,经常遇到的一种错误的使用方法,也许在你的学习 ...

最新文章

  1. python编写一个软件-使用python制作一个解压缩软件
  2. ExtJs学习准备工作(二) firebug firefox插件的安装
  3. 实现 VUE 中 MVVM - step10 - Computed
  4. web开发集成数字证书_每个数字设计师都应该知道的Web开发的七个原则
  5. 江南大学物联网工程学院数据库课程实验二作业2实验报告
  6. 计算机工勤考试试题,(河南省事业单位工勤技能考试试题_计算机信息处理.doc
  7. 响应式多终端挖掘机机械设备展示类网站模板
  8. jacob 详解 语音_JAVA 实现Jacob语音播报
  9. JAVA转为wasm/JavaScript,可以考虑CheerpJ
  10. 高新科技培育钻石,或掀时尚界新热潮
  11. 内核5.4以上, Realtek 8111网卡初始化失败
  12. 百度 UNIT 使用
  13. Vue2+filter实现权限管理,使不同用户进入不同界面
  14. 多功能计算机使用教程,腾讯tim使用教程计算机应用知识
  15. 华为企业交换机ACL经典案例
  16. 解决Microsoft Visual Studio 2010 Macro宏无法运行
  17. java计算机毕业设计政府人才机构在线考试系统2021源码+mysql数据库+系统+lw文档+部署
  18. 目标检测之ATSS算法anchor-free和anchor-based的差异
  19. cocos creator 3D | 拇指投篮 | 3D项目入门实战
  20. 【笔记】html 图片映射 usemap(vue环境下、map、area、coords)

热门文章

  1. VSCode 最全实用插件(VIP典藏版)
  2. 上海宝付HR总结十年经验教你怎么写简历
  3. 前端百题斩【011】——通俗易懂的变量对象
  4. Tetrate高洪涛:解密SkyWalking的APM专用数据库BanyanDB
  5. 机械设计制造及其自动化技术的特点分析
  6. Inherits、CodeFile、CodeBehind的意义
  7. Kivy Android开发教程之 开始构建 Kivy 跨平台应用程序(环境搭建含程序源码)
  8. ubnt 无线网桥M5 repeater模式原理分析
  9. Kotlin两个点(点点..)是什么意思
  10. PHOTOSHOP CC 2014新功能详解(附下载地址)