首页 理论教育 单片机数据传送指令用法

单片机数据传送指令用法

时间:2023-10-17 理论教育 版权反馈
【摘要】:传送类指令是指令系统中最基本、使用最多的一类指令,主要用于数据的传送、保存及交换等。传送类用于把源操数传送到目的操作数,指令执行后,源操作数不变,目的操作数修改为源操作数。数据传送类指令用到的助记符有MOV、MOVC、MOVX、XCH、XCHD、SWAP、PUSH、POP共8种。MOV20H,#32H利用寄存器间接寻址把立即数32H送入内部RAM的20H单元。

单片机数据传送指令用法

传送类指令是指令系统中最基本、使用最多的一类指令,主要用于数据的传送、保存及交换等。

传送类用于把源操数传送到目的操作数,指令执行后,源操作数不变,目的操作数修改为源操作数。

数据传送类指令用到的助记符有MOV、MOVC、MOVX、XCH、XCHD、SWAP、PUSH、POP共8种。源操作数可以采用寄存器、寄存器间接、直接、立即、变址5种寻址方式,目的操作数采用前三种寻址方式。

1.对内部RAM和SFR的一般数据传送指令(15条)

(1)以累加器A为目的操作数的指令(4条)。

这组指令的功能是把源操作数指定的内容送入累加器A中。使用寄存器寻址、直接寻址、寄存器间接寻址和立即寻址4种寻址方式。

MOV A,Rn ;A←(Rn)

MOV A,direct ;A←(direct)

MOV A,@Ri ;A←((Ri))

MOV A,#data ;A←data

【例3.1】已知(A)=40H,(R6)=50H,(6FH)=32H,(R0)=18H,(18H)=10H,执行下列程序段:

MOV A,R6 ;A←50H

MOV A,6FH ;A←32H

MOV A,@R0 ;A←((R0))

执行后,A=10H。

(2)以寄存器Rn为目的操作数的指令(3条)。

这组指令的功能是把源操作数指定的内容送到所选定的工作寄存器Rn中。使用寄存器寻址、直接寻址和立即寻址3种寻址方式。

MOV Rn,A ;Rn←(A)

MOV Rn,direct ;Rn←(direct)

MOV Rn,#data ;Rn←data

【例3.2】已知(A)=3FH,(4EH)=2FH,(R1)=20H,(R3)=30H,执行下列程序段:

MOV A,#2EH ;A←2EH

MOV R1,A ;R1←(A)

MOV R2,4EH ;R2←(4EH)

MOV R3,#6FH ;R3←6FH

执行后,A=2EH,R1=2EH,R2=2FH,R3=6FH。

(3)以直接地址为目的操作数的指令(5条)。

这组指令的功能是把源操作数指定的内容送到由直接地址direct所指定的片内RAM中。使用寄存器、直接、寄存器间接和立即4种寻址方式。

MOV direct,A ;(direct)←(A)

MOV direct,Rn ;(direct)←(Rn)

MOV direct1,direct2 ;(direct1)←(direct2)

MOV direct,@Ri ;(direct)←((Ri))

MOV direct,#data ;(direct)←data

【例3.3】已知(30H)=1FH,(40H)=5FH,执行指令:

MOV 30H,40H ;(30H)←(40H)

执行后,(30H)=5FH。

(4)以间接地址为目的操作数的指令(3条)。

这组指令的功能是把源操作数指定的内容送到以Ri中的内容为地址的片内RAM中。使用寄存器、直接和立即3种寻址方式。

MOV @Ri,A ;((Ri))←(A)

MOV @Ri,direct ;((Ri))←(direct)

MOV @Ri,#data ;((Ri))←data

【例3.4】利用直接寻址把立即数32H送到内部RAM的20H单元

MOV 20H,#32H

【例3.5】利用寄存器间接寻址把立即数32H送入内部RAM的20H单元。(www.xing528.com)

MOV R0,#20H

MOV @R0,#32H

2.累加器A与程序存储器的传送指令(2条)

这组指令的功能是对存放于程序存储器中的表格数据进行查找传送。使用变址寻址方式。

MOVC A,@A+DPTR ;A←((A)+(DPTR))

MOVC A,@A+PC ;A←((A)+(PC))

3.累加器A与片外RAM传送指令(4条)

这组指令用于累加器A与片外RAM间的相互传送。由于MCS-51指令系统中没有专门的输入/输出指令,且片外扩展的I/O口与片外RAM是统一编址的,故以下4条指令也可以作为输入/输出指令。其使用寄存器间接寻址方式。

MOVX A,@DPTR ;A←((DPTR))或读I/O线

MOVX @DPTR,A ;((DPTR))←(A)或写I/O线

MOVX A,@Ri ;A←((Ri))或读I/O线

MOVX @Ri,A ;((Ri))←A或写I/O线

4.堆栈操作类指令(2条)

该类指令的功能是把直接寻址单元的内容传送到堆栈指针SP所指向的单元中,以及把SP所指单元的内容送到直接寻址单元。

PUSH direct ;SP←(SP)+1,((SP))←(direct)

POP direct ;(direct)←((SP)),SP←(SP)-1

前一条指令称为入栈指令,后一条指令称为出栈指令,51单片机复位后,(SP)=07H,为防止与工作寄存器组发生冲突,一般需重新设定SP的初始值。由于压入堆栈的第一个数必须存放在SP+1所指存储单元,故实际的栈底为SP+1所指向的存储单元。

【例3.6】设(10H)=01H,(20H)=1AH。将内部RAM 10H与20H单元的内容交换。

MOV SP,#30H

PUSH 10H ;10H单元内容进栈

PUSH 20H ;20H单元内容进栈

POP 10H ;将栈顶元素弹出,送往10H单元

POP 20H ;再将下一个元素出栈,送往20H单元

执行结果:(10H)=1AH,(20H)=01H

[例3.7]根据累加器A中的数(0~9)查平方表的子程序。

COUNT:PUSH DPH ;保护DPTR内容

PUSH DPL

MOV DPTR,#TABLE ;赋表首址

MOVC A,@A+DPTR ;查表并传送给A

POP DPL ;恢复DPTR原值

POP DPH

RET ;返回主程序控制

TABLE:DB 00,01,04,09,16,25,36,49,64,81

5.交换指令(4条)

该类指令的功能是把累加器A中的内容与源操作数所指出的数据相互交换。使用寄存器、直接和寄存器间接3种寻址方式。

XCH A,Rn ;(A)↔(Rn)

XCH A,direct ;(A)↔(direct)

XCH A,@Ri ;(A)↔((Ri))

XCHD A,@Ri ;(A3~0)↔((Ri)3~0

6.16位数据传送类指令(1条)

MOV DPTR,#data16

该指令的功能是把16位常数送入数据指针寄存器。使用立即寻址方式。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈