购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.2 数据传送指令

数据传送指令是单片机编程中使用最多的指令。前面介绍了P89V51的存储器分布,自然地就应该有这些存储器(区)之间的数据传送指令,但是,由于P89V51的存储器区之间地址有重叠,因而必须用不同的寻址方式和操作数来区别所传送数据的“来源”和“目的”。这部分内容对初学者来说是最难记忆的。为了方便读者快速、准确地掌握P89V51的数据传送指令,一方面详细说明传送指令与数据的“来源”和“目的”之间的关系,如图 3-5所示且参见表 3-4;另一方面,将在 3.3节详细说明数据传送指令,3.4节给出若干数据传送实验,务必请读者按照示例和本章的习题要求尽量多做实验。

图 3-5 传送指令与数据的“来源”和“目的”之间的关系

表 3-4 传送指令与数据的“来源”和“目的”之间的关系

有关传送指令说明如下:

①位传送指令MOV C,bit和MOV bit,C没有在表 3-4中列出。这两条指令是把一位数据在C(进位位、位于程序状态寄存器PSW的第 7位,作为布尔操作的累加器)中与直接位地址(即所有位可寻址的存储器中的位)之间进行操作的。如

都是位传送指令。位地址都可以看成直接地址,但它们之间不能直接传送数据,只能通过C来传送,如

是非法的,要实现 00H到P3.2的数据传送,只能

也是非法的,位数据传送指令中没有立即数作为源地址的指令,只能

位可寻址存储器中的位可用两种方式来寻址:

位可寻址SFR中的位既可用上述两种方式来寻址:

也可用该位所特有的名称来寻址:

这 3条指令都是把C中的数据送到PSW.6(通用标志F0)。

②片内RAM高 128B是IDATA,地址从 80H~ FFH,与特殊寄存器(SFR)的地址完全重叠,对他们的访问完全由寻址方式来区别(在 3.1节介绍IDATA已举例说明)。IDATA采用Ri( i =0,1)来间址,而SFR既可用其名称来寻址,也可用其地址作为立即地址来寻址。

③片内RAM低 128B(DATA)实际上也是IDATA,其地址从 00H~ 7FH。但这些存储器单元既可以立即地址寻址,也能用Ri间接寻址。而处于该区域的工作寄存器还可作为寄存器寻址。

表中有唯一的一条 16位数传送指令:MOV DPTR,#datal6。该指令用于对数据指针DPTR赋值。

④立即数和XCODE只能作为源操作数(即数据源地址)。

⑤ XCODE只能作为源操作数向累加器A传送数据,有两条指令:

注意:指令中采用“MOVC”作为助记符,说明是从程序存储器(CODE)中读取数据。而从XDATA中读取数据的指令为:

指令中采用“MOVX”作为助记符,说明是从外部数据存储器(XDATA)中读取数据的。同样,写到XDATA的指令为

只有XDATA才能与累加器互相传送数据。

⑥立即数、立即地址和累加器(ACC)作为数据源地址,是“O型供血者”,他们有最多的接收数据的目的地。而外部数据存储器(XDATA)最“内向”,它只与ACC互传数据。

⑦ ACC又是最大的数据接收者,这就意味着ACC处于单片机核心地位,是编程用得最多的寄存器。

⑧除ACC外,工作寄存器是交换数据最为方便、最为频繁的存储器。它们具有的寻址方式最多:

都是把数据写到 06H单元。

P89V51单片机具有两个 16位数据指针DPTR0/DPTR。可以通过辅助寄存器AUXR1中的DPS位进行选择,大大增加了程序编制的灵活性。

AUXR1是设置、选择双数据指针的特殊功能寄存器。

GF2:通用功能用户自定义位

DPS:DPTR寄存器选择位。DPS=0,选择DPTR0;DPS=1,选择DPTR。下面是一段通过AUXR1选择DPTR的例程。 6RSjGBuC7cafgjDP0tMsMrzGCNwigJNuHTDfGzShzcW6AOt5vxWJTyaPoYhSN0+5

点击中间区域
呼出菜单
上一章
目录
下一章
×