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. 清华天才王垠受邀面试阿里P9,被阿里P10赵海平面跪,整个事件回顾...
  2. Python代码发现链表中的环并输出环中的第一个元素
  3. 团队作业1(陈爽、夏江华、李瑞超、甘彩娈、吕乐乐)
  4. 使用Boost.Compute的STL 在GPU上添加两个向量的实现
  5. 文件查找_tar_ext34_swap
  6. java环境变量代表的含义_java 环境变量的涵义
  7. html做一个年份月份天数选择器,jquery编写日期选择器
  8. 数据库驱动加载失败问题
  9. JHOST邀请码,2012年7月31日申请,2012年8月31日过期
  10. pacman使用教程,官方文档中文版
  11. 深信服SSL远程接入与深信服行为审计同步登陆用户信息
  12. 自定义倒计时跳过按钮
  13. 忧伤的步调,伤感的歌曲,爱情路只是我一个人de仰望
  14. count()--不是单组分组函数
  15. TCP/IP 面试题整理
  16. 镗孔指令g76格式_关于镗孔G76循环退刀方式总结
  17. U 需要知道的反射知识 -- 大白话
  18. ZOJ 3380 Patchouli's Spell Cards(DP,大数)
  19. 计算机培训结业典礼主持词,培训结业典礼主持词范例珍藏版(备份存档)
  20. 逐步回归matlab函数,Matlab逐步回归

热门文章

  1. 通过命令行方式远程连接redis
  2. 高中毕业学计算机知乎,高中毕业学点什么好?知乎大神这么回答!
  3. python3简明教程下载_Python3简明教程一
  4. 计算机考研初试高校分数线整理
  5. 现在是时候认真看看医疗保健云安全了
  6. C++ vector常用函数总结
  7. 利用计算机的数字化技术和人机交换,多媒体技术与应用教程(雷运发)课后习题答案(1-4)...
  8. element-plus dialog v-loading不生效
  9. 了解“感应雷”危害,针对性防护
  10. 特立独行的幸福 测试点 4