首页- 新闻中心- 正文

芯片解密基础知识:单片机数据传送类指令

来源:芯片解密-龙芯世纪   时间:2010-03-18   阅读:1079

在与外部存储器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。还进行了两者之间的数据交换。可以看出,这个程序:使用堆栈,堆栈的书面命令,并有书面命令堆栈必须是逆,以确保数据发送回原位,还是一个错误。