3.2.1 MOV-内部8位数据传送指令

MOV指令是8051单片机中最基本的数据传送指令之一,用于在不同的寄存器或存储器之间传送8位数据。其基本格式为:

MOV指令的常见用法包括:

  1. 寄存器之间的数据传送例如:MOV A, R0 - 将R0中的内容传送到累加器A中
  1. 立即数传送例如:MOV A, #25H - 将立即数25H传送到累加器A中
  1. 直接地址传送例如:MOV P1, A - 将累加器A的内容传送到P1端口
  1. 间接地址传送例如:MOV A, @R0 - 将R0指向的内部RAM单元的内容传送到累加器A中
所有的断路都来自两个工作寄存器之间的操作 ❗❗❗
notion image

3.2.2 MOV-16位数据传送指令

这是80C51中唯一的一条16位指令(因为DPTR是唯一一个可以读写的16位寄存器。此指令把16位常数装入数据指针DPTR,即数据高8位送入DPH寄存器,数据低8位送入DPL寄存器。16位常数在指令的第二、第三字节中(第二字节为高位字节DPH,第三字节为低位字节DPL)。
此操作不影响标志位。
例:执行指令 MOV DPTR, #1234H
执行结果:(DPH)=12H, (DPL)=34H

3.2.3 MOVX-外部数据传送指令

实现累加器A与外部数据存储器或I/O口之间传送一个字节数据。
MOVX指令必须要以累加器A为中转

/DPTR

采用间接寻址方式访问外部数据存储器,有Ri和DPTR两种间接寻址方式:

1. 使用R0/R1间接寻址

采用R0或R1作间址寄存器时:
  • 可寻址256个外部数据存储器单元
  • 8位地址和数据均由P0口分时输入和输出
  • 此时口不用做地址线,可以当一般的GPIO口使用

2. 使用DPTR间接寻址

采用16位DPTR作间址:
  • 可寻址整个64KB片外数据存储空间
  • P0口输出地址的低8位(DPL)
  • P2口输出地址的高8位(DPH)
这样就可以寻址完整的64KB外部存储空间。P0口会分时使用,即先用于输出地址(的低8位),然后再用于数据的输入/输出。

读/写

1. 外部存储器或I/O口内容送累加器A

说明:指令执行时,在P3.7引脚上输出有效信号,可用作外部数据存储器或I/O的读选通信号。

2. 累加器A内容送外部数据存储器或I/O

notion image

3.2.4 MOVC-程序存储器数据转送指令(查表指令)

MOVC(Move Code)指令是用于从程序存储器中读取数据的指令。这是一个特殊的数据传送指令,主要用于查表操作。
无论是片内ROM还是片外ROM,都使用MOVC(MOV-CODE)
MOVC指令有两种形式:
MOVC指令的主要特点:
  • 只读操作:MOVC只能从程序存储器中读取数据,不能向其写入数据
  • 累加器必需:数据必须读入累加器A中
  • 变址寻址:通过A与DPTR或PC的内容相加来获取要读取的数据地址

MOVC A,@A+DPTR(远程查表)

  1. 将累加器A的内容与DPTR的内容相加,得到程序存储器的地址
  1. 从该地址读取一个字节的数据
  1. 将读取的数据存入累加器A中

MOVC A,@A+PC(近程查表)

  1. 将累加器A的内容与PC+3的内容(因为PC指向下一条指令的地址,而这个指令是3个字节的)相加,得到程序存储器的地址
  1. 从该地址读取一个字节的数据
  1. 将读取的数据存入累加器A中
notion image
这个方法其实很不方便,因为偏移量需要自己计算

3.2.5 数据交换指令

1.字节交换指令XCH组

notion image
这类指令的功能是将累加器A与源操作数的字节内容互换。源操作数有寄存器寻址、直接寻址和寄存器间接寻址等寻址方式。操作码分别为C5H~CFH。
目的操作数只能是累加器A ❗
示例:

2. 半字节交换指令组

XCHD A,@Ri

XCHD指令用于交换累加器A的低4位(低半字节)与由Ri(R0或R1)间接寻址的内部RAM单元的低4位。高4位保持不变。
这个指令的主要特点:
  • 只能与内部RAM进行交换
  • 只交换低4位数据
  • 只能使用R0或R1进行间接寻址
示例代码:
在上述示例中,只有低4位(1011B和0101B)进行了交换,而高4位(0011B和1100B)保持不变,因此不影响符号位

SWAP A

SWAP A指令用于交换累加器A中高4位和低4位的内容。这是一个单字节指令,执行时不影响任何标志位。
notion image
示例代码:
在上述示例中:
  • 原始值3BH的高4位(0011B)和低4位(1011B)互换位置
  • 执行SWAP A后得到B3H,即高4位变为1011B,低4位变为0011B
这个指令在BCD码运算和其他需要处理4位数据的场合特别有用。

3.2.6堆栈操作指令

入栈:PUSH direct

  • 执行指令后堆栈指示器SP+1指向栈顶的一个空单元
  • 将直接地址direct单元内容送入SP所指示的堆栈单元。
  • 此操作不影响标志位
例如,中断响应时保护DPTR的内容

出栈:POP direct

  • 将堆栈指示器SP所寻址的栈顶内容送入直接寻址单元direct
  • 然后执行SP-1并送入SP
  • 此操作不影响标志位
Loading...