- 单片机原理及应用系统设计
- 胡景春主编
- 1087字
- 2021-10-27 13:42:52
3.3.1 数据传送指令
数据传送是最基本、最主要的操作,共有29条,可分为内部RAM数据传送、外部RAM数据传送、程序存储器数据传送、数据互换和堆栈操作5组。
1.内部RAM传送指令(16条)
该组指令用于单片机内部数据存储区和寄存器之间的数据传送,指令格式见表3-1。
表3-1 内部RAM传送指令
![](https://epubservercos.yuewen.com/0DCF85/21511155608174006/epubprivate/OEBPS/Images/53_01.jpg?sign=1739251640-ZurMdSQm40VSlILEQcRgKAeKaGPEp3g9-0-7b13e662beaeb2036b0cde9ed32e2b06)
(续)
![](https://epubservercos.yuewen.com/0DCF85/21511155608174006/epubprivate/OEBPS/Images/54_01.jpg?sign=1739251640-31xDyr06lXSdppyhJ3eEHAGMYPKD8UP0-0-c8e72380a3cd7e92b1f230fb4a841f41)
【例3-1】设片内RAM单元存放的数据是:(50H)=55H,(51H)=66H,(66H)=77H。分析以下指令顺序执行的目的操作数。
![](https://epubservercos.yuewen.com/0DCF85/21511155608174006/epubprivate/OEBPS/Images/54_02.jpg?sign=1739251640-saMlFPR9kGsoAd1Lkc8PzmkgBJY753Hd-0-d62a2c2e1864f526a0c801b6f2231daf)
2.外部RAM传送指令(4条)
该组指令用于单片机外部数据存储区和寄存器之间的数据传送,指令格式见表3-2。
表3-2 外部RAM传送指令
![](https://epubservercos.yuewen.com/0DCF85/21511155608174006/epubprivate/OEBPS/Images/54_03.jpg?sign=1739251640-pUcxmAvsVA8hbM92YpX5ba4ofyYsRkrm-0-6433b5d4c7545f6bbec85cfd6310b64b)
这组指令采用了间接寻址方式,当采用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 程序存储器传送指令
![](https://epubservercos.yuewen.com/0DCF85/21511155608174006/epubprivate/OEBPS/Images/55_01.jpg?sign=1739251640-vyVXaXcOiWLD4oYJhSIF94hyv09BNs1T-0-345cb9201833e25b8202b807a60a7dd9)
这组指令又叫查表指令,属于变址寻址方式,是对存放于程序存储器中的数据表格进行查找传送。
第一条指令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
![](https://epubservercos.yuewen.com/0DCF85/21511155608174006/epubprivate/OEBPS/Images/55_02.jpg?sign=1739251640-WzFmJ51QLkh9HgvpIngnQIIegq4VHx4L-0-ca40ac53ea51a315a4d50e5ca53c41a0)
2)使用MOVC A,@A+DPTR
![](https://epubservercos.yuewen.com/0DCF85/21511155608174006/epubprivate/OEBPS/Images/55_03.jpg?sign=1739251640-iMfc5vWhmCRuFdDv2S0bM37PCPvAqv8P-0-d5321faac74102d22bef2e5cdb356a5a)
以上两段程序执行的结果,累加器A中的数都为TAB表第3个单元中的43H。
4.堆栈指令
“堆栈”就是在单片机内部SRAM中定义一块存储空间,对这块区间进行数据“先进出后”的操作,操作的单元由堆栈指针指定。堆栈操作有进栈(PUSH)和出栈(POP)两条,操作数由直接地址确定,属于直接寻址,指令格式见表3-4。
表3-4 堆栈指令
![](https://epubservercos.yuewen.com/0DCF85/21511155608174006/epubprivate/OEBPS/Images/55_04.jpg?sign=1739251640-E9vlX8Y57Tap4y1YEBmnbwHtUNgoJDvd-0-4067563e22c04ba6d9df124ce663a4c6)
【例3-4】通过堆栈,交换两个单元的数据。设(30H)=#12H,(31H)=#34H。
![](https://epubservercos.yuewen.com/0DCF85/21511155608174006/epubprivate/OEBPS/Images/56_01.jpg?sign=1739251640-Rpv9CBsoWtL8J3si6KTyhZnYW0uA6Yv8-0-63c056c52db169ef77845fe593e5dc24)
5.字节交换指令(5条)
该组指令用于字节交换和半字节交换,指令格式见表3-5。
表3-5 字节交换指令
![](https://epubservercos.yuewen.com/0DCF85/21511155608174006/epubprivate/OEBPS/Images/56_02.jpg?sign=1739251640-gUAKUiab5G0O38L9rscU42TRspSIxDAA-0-4add936394e94ab81805fe74f7aeb32f)
【例3-5】设A=60H,R6=A5H,(60H)=69H,顺序执行以下指令的结果。
![](https://epubservercos.yuewen.com/0DCF85/21511155608174006/epubprivate/OEBPS/Images/56_03.jpg?sign=1739251640-Ax367xQ02ZE9nS9RLxxQ3n9CDaX1GdBg-0-8156998f50c7200913c131b423ad1be0)