手把手教程keil5 c51使用汇编将数据从片外传输至片内RAM

Posted 帅气的黑桃J

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了手把手教程keil5 c51使用汇编将数据从片外传输至片内RAM相关的知识,希望对你有一定的参考价值。

目录

Intro

本片文章将介绍如何使用汇编将片外数据传到片内,并使用debug展示数据在register中的流转。我们将以将片外2010H ~ 201FH单元的内容设置为 40H~4FH ,然后将 2010H ~ 201FH单元中的内容送到片内50H ~ 5FH单元中 如下图所示,下面进行此示例的讲解。

图为demo示意图

快速上手

  • 环境配置

首先你需要确保自己安装好了keil5的环境,并知道如何创建一个简单的项目,使用汇编编写代码,这里可以参考- 51单片机数据传送——片内到片外(汇编语言实现) -csdn

  • 代码编写

在你知道如何创建环境之后,就可以开始编写相关的汇编代码了,在这里我们默认你已经掌握了常用的几种简单的汇编指令,如MOV执行,DJNZ循环等指令,这里可以参考51单片机汇编语言指令汇总 -csdn

最后实现如下所示:

		ORG 0000H
		MOV DPTR,#2010H		;外部RAM地址
		MOV A,#40H			;初值送入累加器A
		MOV R2,#10H			;循环次数
LOOP1:	MOVX @DPTR,A		;将累加器A中的数送入外部RAM
		INC DPTR			;外部地址自增1
		INC A				;累加器A中的数自增1
		DJNZ R2,LOOP1		;循环,R2减1不等于0,则继续,否则结束循环
		
		MOV DPTR,#2010H		;外部RAM地址
		MOV	R1,#50H			;内部RAM地址
		MOV	R3,#10H			;循环次数
LOOP2:	MOVX A,@DPTR		;外部RAM传送到累加器A
		MOV @R1,A			;累加器A传送到内部RAM
		INC DPTR			;外部地址自增1
		INC R1				;内部地址自增1
		DJNZ R3,LOOP2		;循环,R3减1不等于0,则继续,否则结束循环
		
		END	
  • 程序调试

在调试过程中,如果想要看到数据及其流转,可以在打开debug之后,开启一个memory窗口,并在memory窗口输入“x:2010H”即可查看片外数据存储器从2010H开头往后的地址对应的数据。

现在我们通过debug来展示数据的流转,数据是由一个循环代码段放入片外的,所以在最开始程序未执行的时候,片外和片内memory都是空的,如下图所示。

接下来设置一个断点,使得程序在第一个循环这里停下。

此时已经通过第一个循环就把数据写入片外了,这就是我们的数据源,如下图所示。

  • 运行后的结果
    同样通过debug,我们可以在debug的时候在memory窗口用“i:50H”来查看以50H地址往后的片内数据存储器的内容。

参考资料

以上是关于手把手教程keil5 c51使用汇编将数据从片外传输至片内RAM的主要内容,如果未能解决你的问题,请参考以下文章

keil5怎么样才算破解成功?

keil怎样看编译产生的汇编代码

我用keil进行调试时,程序总是自汇编的一段程序里反复执行,无法跳到main函数,请问一下大家怎么解决

教程开发工具Keil5安装破解

keil C51 中 为啥用XBYTE[0xC8000]读不进值呢

keil5程序怎么看多少指令