。一切需求传送入外部RAM的数据必需求经过A送去,而一切要读入的外部RAM中的数据也必需经过A读入。在此咱们能看出内外部RAM的区别了,内部RAM间能直接进行数据的传递,而外部则不可,比方,要将外部RAM中某一单元(设为0100H单元的数据)送入另一个单元(设为0200H单元),也有必要先将0100H单元中的内容读入A,然后再传送到0200H单元中去。
要读或写外部的RAM,当然也有必要要知道RAM的地址,在后两条单片机指令中,地址是被直接放置在DPTR中的。而前两条指令,由于Ri(即R0或R1)仅仅一个8位的寄存器,所以只供应低8位地址。由于有时扩展的外部RAM的数量比较少,少于或等于256个,就只需求供应8位地址就够了。
例:将单片机外部RAM中100H单元中的内容送入外部RAM中200H单元中。
MOVC A,@A+DPTR 本指令是将ROM中的数送入A中。本指令也被称为单片机查表指令,常用此指令来查一个已做好在ROM中的表格 阐明:
此条指令引出一个新的寻址方法:变址寻址。本指令是要在ROM的一个地址单元中找出数据,明显有必要了解这一个单元的地址,这个单元的地址是这样确认的:在履行本指令立脚点DPTR中有一个数,A中有一个数,履行指令时,将A和DPTR中的数加起为,就成为要查找的单元的地址。
例:有一个数在R0中,要求用查表的方法确认它的平方值(此数的取值规模是0-5)
设R0中的值为2,送入A中,而DPTR中的值则为TABLE,则终究确认的ROM单元的地址便是TABLE+2,也便是到这个单元中去取数,取到的是4,明显它正是2的平方。其它数据也能类推。
标号的实在意义:从这一个区域也能看到另一个问题,个人会使用了标号来代替详细的单元地址。事实上,标号的实在意义便是地址数值。在这里它代表了,0,1,4,9,16,25这几个数据在ROM中寄存的起点方位。而在曾经咱们学过的如LCALL DELAY单片机指令中,DELAY 则代表了以DELAY为标号的那段程序在ROM中寄存的开始地址。事实上,CPU正是经过这一个地址才找到这段程序的。
假如R0中的值为2,则终究地址为100H+2为102H,到102H单元中找到的是4。这个能看懂了吧?