单片机原理及应用系统设计
上QQ阅读APP看书,第一时间看更新

3.3.1 数据传送指令

数据传送是最基本、最主要的操作,共有29条,可分为内部RAM数据传送、外部RAM数据传送、程序存储器数据传送、数据互换和堆栈操作5组。

1.内部RAM传送指令16条

该组指令用于单片机内部数据存储区和寄存器之间的数据传送,指令格式见表3-1。

表3-1 内部RAM传送指令

(续)

例3-1】设片内RAM单元存放的数据是:(50H)=55H,(51H)=66H,(66H)=77H。分析以下指令顺序执行的目的操作数。

2.外部RAM传送指令4条

该组指令用于单片机外部数据存储区和寄存器之间的数据传送,指令格式见表3-2。

表3-2 外部RAM传送指令

这组指令采用了间接寻址方式,当采用16位数据指针DPTR间接寻址,完成DPTR所指定的片外数据存储器与A的数据传送时,可寻址范围达64KB。其中,低8位地址由P0口输出,高8位地址由P2口输出。当采用Ri(R0或R1)间接寻址,完成以R0或R1为间接地址的片外数据存储器与A的数据传送时,低8位地址由Ri指出,由P0口输出,高8位地址需要事先用指令“MOV P2,#data”指定。

例3-2】以下程序实现把片内60H单元的数送到片外RAM的2000H单元。

解1:MOV A,60H

MOV DPTR,#2000H

MOV @DPTR,A

解2:MOV A,60H

MOV R0,#00

MOV P2,#20H

MOV @R0,A

3.程序存储器传送指令2条

该组指令用于从单片机内部ROM读取数据给累加器,指令格式见表3-3。

表3-3 程序存储器传送指令

这组指令又叫查表指令,属于变址寻址方式,是对存放于程序存储器中的数据表格进行查找传送。

第一条指令MOVC A,@A+DPTR,以DPTR作为基址寄存器,用来存放表的起始地址,它可以指向外部ROM的64KB范围内的任意一个地址单元,累加器A作为变址寄存器,在源操作数中作为数据表格起始地址的偏移地址。

第二条指令MOVC A,@A+PC,以PC作为基址寄存器,但指令中PC的地址是可以变化的,它随着指令在程序中位置的不同而不同,一旦指令在程序中位置确定以后,PC中内容也被给定,累加器A作为变址寄存器,在源操作数中作为当前PC值到数据表格中要访问数据的偏移字节,由于A的长度为一个字节,使用能够寻找的偏移地址应在FFH之内。

例3-3】用查表指令把数据表TAB中第三个单元的数传给累加器A,比较使用两种查表指令的不同。

1)使用MOVC A,@A+PC

2)使用MOVC A,@A+DPTR

以上两段程序执行的结果,累加器A中的数都为TAB表第3个单元中的43H。

4.堆栈指令

“堆栈”就是在单片机内部SRAM中定义一块存储空间,对这块区间进行数据“先进出后”的操作,操作的单元由堆栈指针指定。堆栈操作有进栈(PUSH)和出栈(POP)两条,操作数由直接地址确定,属于直接寻址,指令格式见表3-4。

表3-4 堆栈指令

例3-4】通过堆栈,交换两个单元的数据。设(30H)=#12H,(31H)=#34H。

5.字节交换指令5条

该组指令用于字节交换和半字节交换,指令格式见表3-5。

表3-5 字节交换指令

例3-5】设A=60H,R6=A5H,(60H)=69H,顺序执行以下指令的结果。