标题: 9课:单片机数据传递类指令 [打印本页]

作者: admin    时间: 2013-5-21 03:05
标题: 9课:单片机数据传递类指令
3)以直接地址为目的操作数的指令
MOV direct,A 例: MOV 20H,A
MOV direct,Rn MOV 20H,R1
MOV direct1,direct2 MOV 20H,30H
MOV direct,@Ri MOV 20H,@R1
MOV direct,#data MOV 20H,#34H
4)以间接地址为目的操作数的指令
MOV @Ri,A 例:MOV @R0,A
MOV @Ri,direct MOV @R1,20H
MOV @Ri,#data MOV @R0,#34H
5)十六位数的传递指令
MOV DPTR#data16
8051是一种8位机,这是唯一的一条16位立即数传递指令,其功能是将一个16位的立即数送入DPTR中去。其中高8位送入DPH,低8位送入DPL。例:MOV DPTR#1234H,则执行完了之后DPH中的值为12HDPL中的值为34H。反之,如果我们分别向DPHDPL送数,则结果也一样。如有下面两条指令:MOV DPH#35HMOV DPL#12H。则就相当于执行了MOV DPTR#3512H
数据传递类指令综合练习:
此次大家就用用熟这个软件吧,说实话,我并不很喜欢它,操作起来不方便,但给我的机器只能上这个,没办法,下次再给网友单独介绍一个好一点的吧。现在最好的是keil 这个软件本站有详细的教程请看:    keil教程  单片机c语言教程


作者: 阿格拉瑞    时间: 2013-5-25 22:03
这是什么软件截的图
作者: 莫问纷飞    时间: 2013-5-26 11:19
功力太浅,界面都没看懂
作者: danpianji889    时间: 2013-8-13 15:24
看不懂得,软件在什么地方
作者: 隆威    时间: 2014-2-7 20:35
很难哦  老师
作者: jiajun678    时间: 2014-4-4 22:21
没太懂
作者: 雪中梅花    时间: 2014-5-20 08:55
谢谢楼主我还用努力学习。
作者: 93mxt    时间: 2014-7-16 20:42
界面都没看懂
作者: 浅墨画青梅    时间: 2014-8-29 16:13
这个是什么意思?
作者: yongxiang6091    时间: 2014-9-10 20:26
谢谢楼主分享!!!!
作者: yingtn    时间: 2014-9-17 10:23
MOV R1,12H 是否是寫錯了,應該是MOV R1,#12H
作者: 忘川    时间: 2014-12-17 21:15
界面是什么
作者: 山一样的男人    时间: 2015-1-5 17:17
为什么我在这个网站上下载的东西下来都是一些乱码啊
作者: dimozun    时间: 2015-3-31 15:47
功力太浅,界面都没看懂
作者: b4082    时间: 2015-4-6 14:13
感谢分享!
作者: yit1268    时间: 2015-9-1 09:43
有点难,看不懂啊
作者: 黑牛奶    时间: 2016-1-6 10:48
16位数输入输出介绍那里:如有下面两条指令:MOV DPH,#35H,MOV DPL,#12H。中的35H打错了吧
作者: haquanquan    时间: 2016-3-24 22:18
学到了很多,超级感谢楼楼
作者: 阿小哥    时间: 2016-4-14 14:29
请问一下:经MOV12H,#34H后12H单元的值为34H,那接着,MOVR1,12H后,R1的值不是等于12H的值
作者: 阿小哥    时间: 2016-4-14 14:34
请问一下:经MOV12H,#34H后,12H的值等于34H,那接着,MOVR1,12H后,R1的值不是等于12H的值#34吗?为什么等于12H?
作者: 阿小哥    时间: 2016-4-14 14:54
以间接地址为目的操作数的指令看不懂,望老师耐心讲解,辛苦!谢谢!
作者: 阿小哥    时间: 2016-4-24 00:26
快看懂啦!
作者: 凯撒320    时间: 2016-12-27 12:51
给力,学到了!
作者: comC    时间: 2017-3-13 15:00
9课:单片机数据传递类指令
作者: Jhonas    时间: 2017-7-20 09:08
上机练习中R1应该等于34H。
作者: guysxpf    时间: 2017-8-15 12:30
我感觉MOVE R1,12H那句是直接寻址,不是立即寻址,结果应该是34H
作者: 繁华笙歌    时间: 2017-10-24 11:15
新手,不太明白
作者: tiance    时间: 2017-10-27 11:07
MOV 20H,A
MOV 20H,R1
MOV 20H,30H
MOV 20H,@R1
MOV 20H,#34H


MOV @R0,A
MOV @R1,20H
请问老师这些各是什么意思  是地址还是数据?哪些是地址?详细说一下,还有用keil 可以直接把这些语句写上去编译么?
作者: tiance    时间: 2017-10-27 11:15
老师,怎么将单片机内部RAM  30H~40H单元的数据一次储存到内部RAM的 60H~70H单元中? 在keil中该怎样写代码?你讲的数据传递课 我不知道那里面是数据还是地址?还有30H~40H可以用循环吧  怎样写?
作者: hsyxyz123    时间: 2017-11-23 15:39
数据传送指令和微机原理中的基本上都一样呀。
作者: liuzclzc    时间: 2018-1-16 20:31
这节了解了单片机的十六进制
作者: heron    时间: 2018-2-26 20:47
有一点汇编基础看起来很轻松,也就没详细看。如果没有基础的话,看这些会很头疼吧
作者: 1261867136qq    时间: 2018-6-12 16:27
MOV R7,#22H
MOV R1,12H  

加不加#有啥区别 啊
作者: keneng    时间: 2018-6-25 16:29
今天学习到这了,明天继续,,,
作者: xxd3w    时间: 2018-6-29 07:17
谢谢楼主的分享。
作者: slj0716    时间: 2018-7-29 13:45
谢谢楼主,新手一枚
作者: 648682350    时间: 2018-10-14 11:13
楼主把自己的学习所得整理的真好
作者: 时光倒影    时间: 2018-12-12 19:44
谢谢分享
作者: cedtek    时间: 2020-12-29 16:39
看了一下王爽师傅的《汇编语言》再看这篇文章理解起来非常轻松,建议有时间的朋友也可以参考下《汇编语言》
作者: 13311658100    时间: 2021-3-27 13:26
mov R1,12H应该改为 mov R1 #12H
作者: 13311658100    时间: 2021-3-27 14:30
阿格拉瑞 发表于 2013-5-25 22:03
这是什么软件截的图

WAVE,你可以用WAVE6000
作者: cedtek    时间: 2024-1-7 18:12
使用 Keil 可以练习吗?
作者: cedtek    时间: 2024-1-19 08:44
还没有执行任何一条指令前,数据存储器 RAM 内容、工作寄存器的值、ACC 累加器的值、DPTR 数据指针的高 8 位 DPH 以及低 8 位 DPL 的值如下图所示:

执行完下面这条指令
  1. MAIN:MOV 23H,#30H
复制代码

RAM 数据存储器的 0x23 地址处单元的内容就被赋值为 0x30,如下图所示:

接着往下执行,0x12 地址 RAM 单元内容被赋值为 0x12,如下图所示:

接着单步执行,R0 工作寄存器中的内容被赋值为 0x23,如下图所示:

继续单步运行,R7 工作寄存器中的内容被赋值为 0x22,如下图所示:

接着往下执行一步,R1 工作寄存器中的内容被赋值为 0x34,也就是 RAM 的 0x12 地址单元内容,如下图所示:

继续走一步,ACC 累加器中的内容被改写为 0x30,就是以 R0 工作寄存器中的内容 0x23 为地址的 RAM 单元内容 0x30,如下图所示:

再单步运行一步,因为在前面执行过的步骤中 R1 工作寄存器中的内容被赋值为了 0x34,所以下面这条指令就是将 RAM 单元 0x34 地址单元内容取出又赋值回 0x34 地址单元
  1. MOV 34H,@R1
复制代码

得到的结果如下图所示(0x34 单元内容依然为 0x00):

接着就是直接寻址:
  1. MOV 45H,34H
复制代码

得到的结果如下图:

DPTR 被赋值,如下图所示:

紧接着,高 8 位赋值给 0x12 地址单元,如下图:

低 8 位赋值给 R0 工作寄存器,如下图:

最后捏~,执行寄存器间接寻址,ACC 改变,如下图:





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1