导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→【北京得美雅】单片机数据传送类指令

* 61777: 【北京得美雅】单片机数据传送类指令

   bj2680 
bj2680发表的帖子 

 【北京得美雅】单片机数据传送类指令
在与外部存储器RAM处理51系列微控制器只能是蓄电池。所有谁需要发送到外部RAM中的数据必须通过A发送的,所有的外部RAM的读入必要的数据,通过答:看这里,我们可以看到内存和外部之间的区别,直接内部RAM数据之间的传输,而不是外部,例如,外部RAM,一个单位(设置为0100H单元数据)到另一个单位(设置为0200H单位),必须先读入的0100H单元的内容,并然后重新传输单元发送到0200H。
单片机的累加器A与片外RAM之间的数据传递类指令
MOVX A,@Ri
MOVX @Ri,A
MOVX A,@DPTR
MOVX @DPTR,A
读取或写入外部RAM,当然,需要知道的RAM后两个微控制器指令的地址,该地址是直接放入DPTR。而前两个指示日(即R0或R1)是一个8位寄存器,只有低8位地址提供的。因为有时扩大了外部RAM数量相对较小,小于或等于256,你只需要提供一个8位地址是不够。
使用时应当首先将要读或写的地址送入DPTR或Ri中,然后再用读写命令。
例:将单片机外部RAM中100H单元中的内容送入外部RAM中200H单元中。
MOV DPTR,#0100H
MOVX A,@DPTR
MOV DPTR,#0200H
MOVX @DPTR,A
程序存储器向累加器A传送指令
MOVC A,@A+DPTR     本指令是将ROM中的数送入A中。本指令也被称为单片机查表指令,常用此指令来查一个已做好在ROM中的表格      说明:此条指令引出一个新的寻址办法:变址寻址。本指令是要在ROM的一个地址单元中找出数据,显然必须知道这个单元的地址,这个单元的地址是这样确定的:在执行本指令立脚点DPTR中有一个数,A中有一个数,执行指令时,将A和DPTR中的数加起为,就成为要查找的单元的地址。查找到的结果被放在A中,因此,本条指令执行前后,A中的值不一定相同。
   例:有一个数在R0中,要求用查表的办法确定它的平方值(此数的取值范围是0-5)
  MOV DPTR,#TABLE
  MOV A,R0
  MOVC A,@A+DPTR
  TABLE: DB 0,1,4,9,16,25
  设R0中的值为2,送入A中,而DPTR中的值则为TABLE,则最终确定的ROM单元的地址就是TABLE+2,也就是到这个单元中去取数,取到的是4,显然它正是2的平方。其它数据也能类推。
   标签的真正含义:从这里我们可以看到另一个问题,我们使用的标签,而不是一个特定的单元格地址。事实上,真正意义的标签是价值观的地址。在这里它代表,以及0,1,4,9,16,25这些在ROM中存储的数据出发点的位置。而在以前我们已经知道,如LCALL单片机指令延迟,延迟时间延迟了该计划的一部分存储在光盘标签的起始地址。事实上,CPU是找到这个程序,通过这个地址。
能通过以下的例程再来看一看标号的含义:
MOV DPTR,#100H
MOV A,R0
MOVC A,@A+DPTR
ORG 0100H.
DB 0,1,4,9,16,25
如果R0中的值为2,则最终地址为100H+2为102H,到102H单元中找到的是4。这个能看懂了吧?
那为什么不这样写程序,要用标号呢?不是增加疑惑吗?
如果你喜欢这个程序,然后,在写程序,我们必须确定这在ROM形式的具体位置,如果完成的过程中,要在之前举行的节目插播这一计划,那么这个位置的形式也改变,改变牛津100h后这句话,我们经常需要修改程序,和这么多麻烦,所以我使用的标签,而不是作为一个编译器,只要的位置自动改变,我们有这个麻烦支付到计算机我们必须做电脑。
   堆栈操作
   PUSH direct
   POP direct
   第一条指令称之为推入,就是将direct中的内容送入堆栈中,第二条指令称之为弹出,就是将堆栈中的内容送回到direct中。推入指令的执行过程是,首先将SP中的值加1,然后把SP中的值当作地址,将direct中的值送进以SP中的值为地址的RAM单元中。例:
   MOV SP,#5FH
   MOV A,#100
   MOV B,#20
   PUSH ACC
   PUSH B
则执行第一条PUSH ACC指令是这样的:将SP中的值加1,即变为60H,然后将A中的值送到60H单元中,因此执行完本条指令后, 内存60H单元的值就是100,同样,执行PUSH B时,是将SP+1,即变为61H,然后将B中的值送入到61H单元中,即执行完本条指令后,61H单元中的值变为20。
POP指令的在单片机中执行是这样的,首先将SP中的值作为地址,并将此地址中的数送到POP指令后面的那个direct中,然后SP减1。
接上例:
   POP B
   POP ACC
   则执行过程是:将SP中的值(现在是61H)作为地址,取61H单元中的数值(现在是20),送到B中,所以执行完本条指令后B中的值是20,然后将SP减1,因此本条指令执行完后,SP的值变为60H,然后执行POP ACC,将SP中的值(60H)作为地址,从该地址中取数(现在是100),并送到ACC中,所以执行完本条指令后,ACC中的值是100。
有什么意义?ACC中的值本来就一直是100,B值一直是20,是在这种情况下,确实没有什么意义,但在实际工作中,那么单键乙通常在其他指令的执行,但这些说明将阿值,B值Gaidiao,所以在节目的最后,如果我们想A和B,恢复实际值的值,然后指示意义。
有一个问题,如果我不栈,例如,用于单键协调会指示署检验手段60H章,A,在单键B组,并指示MOV61H,乙,然后使用MOV A,60H章,MOV B,61H以取代两个持久性有机污染物的指示,不也一样吗?是从结果,是同一个观点,但是从这个进程中是不一样的,PUSH和POP指令是单字节,单周期指令,而MOV指令是一个双字节双周期指令。此外,堆栈的作用不止于此,它通常是计算机与栈单芯片设备是相同的,而我们在处理日常需要保存数据,往往是背后的做法没有被通过,但堆栈的方式实现。
例:写出以下单片机程序的运行结果
MOV 30H,#12
MOV 31H,#23
PUSH 30H
PUSH 31H
POP 30H
POP 31H
其结果是将23值30h内,而在该值31H变为12。还进行了两者之间的数据交换。可以看出,这个程序:使用堆栈,堆栈的书面命令,并有书面命令堆栈必须是逆,以确保数据发送回原位,还是一个错误。


发表时间:2012年6月26日14:34:49

  
回复该帖

本主题共有 1 帖,分页:>>>>>该主题的所有内容[1]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

[上一篇帖子]:【嘉立创】最新报价单、双面板:长和宽单边在5厘米以内的 喷锡 绿油/白字&nbs
[下一篇帖子]:三旺串口服务器在铁路机电设备控制系统中的应用三旺[URL=http://www.3onedata.c