keil4在C51中嵌入汇编语言,KEIL C51程序中如何嵌入汇编
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程序中如何嵌入汇编相关推荐
- 根据c51程序改写汇编语言,Keil C51编译及连接技术
主要介绍Keil C51的预处理方法如宏定义.常用的预处理指令及文件包含指令,C51编译库的选择及代码优化原理,C51与汇编混合编程的方法与实现以及超过64KB空间的地址分页方法的C51实现. 教学目 ...
- c51 嵌入 汇编语言,单片机代码编程时如何嵌入汇编语言
有一次有读者提问,想从C51单片机转入stm8单片机来学习,那么进行软件编程时能不能使用汇编呢?小编本文就简要介绍下如何使用C语言编程嵌入汇编语言. stm8单片机编译有两种嵌入汇编指令的方法.第一种 ...
- c51语言bit函数,keil C51中的本征函数库及使用说明
本征函数(intrinsicroutines)是指编译时直接将固定代码插入当前行,而不用ACALL和LCALL 来实现(无需堆栈操作?),可大大提高函数的访问效率. 函数原型 extern void ...
- c51语言c100错误,KEIL C51错误的解决办法
有时候在编好一个程序之后,编译链接时,提示说有如下错误. 错误为 ..校长基金1TEXT1.C(56): error C100: unprintable character 0xA1 skipped ...
- c51语言开发工具,KEIL C51 开发工具
产业标准的Keil C编译器.宏汇编器.调试器.实时内核.单板计算机和仿真器,支持所有的8051系列微控制器,帮助你如期完成项目进度. 当启动一个新的项目,你只需从设备数据库选择使用的微控制器,μVi ...
- python在中小学教学中的应用-在python程序中的进程操作
********在python程序中的进程操作********之前我们已经了解了很多进程相关的理论知识,了解进程是什么应该不再困难了,刚刚我们已经了解了, 运行中的程序就是一个进程.所有的进程都是通过 ...
- chrome插件中调用ajax,Chrome扩展程序中的Ajax调用无效
尝试在Chrome扩展程序中发送ajax请求.我已经确认请求返回200响应,它应该只是console.log来测试'.我不确定这里是否存在异常问题?我已经阅读了Chrome扩展程序' addListe ...
- http中的scheme和小程序中的scheme
1. http中的scheme scheme就是url中标识协议的部分,可能是http也可能是ftp等. / 标识path的开始. :标识参数的开始,例如: ftp://prep.ai.mit.edu ...
- c语言编程中野指针错误,C程序中可怕的野指针
一.疑问点 指针是C语言一个很强大的功能,同时也是很容易让人犯错的一个功能,用错了指针,轻者只是报个错,重者可能整个系统都崩溃了.下面是大家在编写C程序时,经常遇到的一种错误的使用方法,也许在你的学习 ...
最新文章
- python编写一个软件-使用python制作一个解压缩软件
- ExtJs学习准备工作(二) firebug firefox插件的安装
- 实现 VUE 中 MVVM - step10 - Computed
- web开发集成数字证书_每个数字设计师都应该知道的Web开发的七个原则
- 江南大学物联网工程学院数据库课程实验二作业2实验报告
- 计算机工勤考试试题,(河南省事业单位工勤技能考试试题_计算机信息处理.doc
- 响应式多终端挖掘机机械设备展示类网站模板
- jacob 详解 语音_JAVA 实现Jacob语音播报
- JAVA转为wasm/JavaScript,可以考虑CheerpJ
- 高新科技培育钻石,或掀时尚界新热潮
- 内核5.4以上, Realtek 8111网卡初始化失败
- 百度 UNIT 使用
- Vue2+filter实现权限管理,使不同用户进入不同界面
- 多功能计算机使用教程,腾讯tim使用教程计算机应用知识
- 华为企业交换机ACL经典案例
- 解决Microsoft Visual Studio 2010 Macro宏无法运行
- java计算机毕业设计政府人才机构在线考试系统2021源码+mysql数据库+系统+lw文档+部署
- 目标检测之ATSS算法anchor-free和anchor-based的差异
- cocos creator 3D | 拇指投篮 | 3D项目入门实战
- 【笔记】html 图片映射 usemap(vue环境下、map、area、coords)
热门文章
- VSCode 最全实用插件(VIP典藏版)
- 上海宝付HR总结十年经验教你怎么写简历
- 前端百题斩【011】——通俗易懂的变量对象
- Tetrate高洪涛:解密SkyWalking的APM专用数据库BanyanDB
- 机械设计制造及其自动化技术的特点分析
- Inherits、CodeFile、CodeBehind的意义
- Kivy Android开发教程之 开始构建 Kivy 跨平台应用程序(环境搭建含程序源码)
- ubnt 无线网桥M5 repeater模式原理分析
- Kotlin两个点(点点..)是什么意思
- PHOTOSHOP CC 2014新功能详解(附下载地址)