手把手教程keil5 c51使用汇编将数据从片外传输至片内RAM
Posted 帅气的黑桃J
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了手把手教程keil5 c51使用汇编将数据从片外传输至片内RAM相关的知识,希望对你有一定的参考价值。
目录
Intro
本片文章将介绍如何使用汇编将片外数据传到片内,并使用debug展示数据在register中的流转。我们将以将片外2010H ~ 201FH单元的内容设置为 40H~4FH ,然后将 2010H ~ 201FH单元中的内容送到片内50H ~ 5FH单元中 如下图所示,下面进行此示例的讲解。
快速上手
- 环境配置
首先你需要确保自己安装好了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地址往后的片内数据存储器的内容。
参考资料
- Keil 5的第一个汇编程序C51(包括Debug)
- 51单片机数据传送——片内到片外(汇编语言实现)
- 51单片机Proteus仿真+Keil工程-实验6-单片机扩展RAM6264实验
- 51单片机数据传送——片内到片外(汇编语言实现) -csdn
以上是关于手把手教程keil5 c51使用汇编将数据从片外传输至片内RAM的主要内容,如果未能解决你的问题,请参考以下文章
我用keil进行调试时,程序总是自汇编的一段程序里反复执行,无法跳到main函数,请问一下大家怎么解决