实验四
来源:百度文库 编辑:神马文学网 时间:2024/04/27 20:54:34
实验四 数据传送类指令编程应用
一、实验目的
(1) 掌握数据传送类指令和功能
(2) 掌握各种数据指令的编程应用。
二、实验设备
单片机IDE集成开发软件KEIL
三、实验要求
验证“实验原理”一节中给出的实例程序,最基本、最主要的指令,共有29条,包括数据传送、数据交换、栈操作三类。目的单元为A时影响P标志。
四、实验原理及实验内容
作为软件实验,可以在没有硬件及仿真仪的情况下,利用集成开发环境进行。
1、内部RAM间的数据传送(16条)
(1)指令格式
指令格式:MOV [目的字节],[源字节]
功能:把源字节指定的变量传送到目的字节指定的存储单元中,源字节内容不变。
(2)操作数
操作数:A,Rn,direct,@Ri,DPTR,#data
传送关系如下图所示:
(3)指令描述举例:
以A目的操作数
MOV A,Rn; (A)←(Rn)
以Rn为目的操作数
MOV Rn,direct; (Rn)←(direct)
以direct为目的操作数
MOV direct1,direct2; (direct1)←(direct2)
MOV direct, @Ri; (direct)←((Ri))
以@Ri为目的操作数
MOV @Ri, A; ((Ri))←(A)
MOV @Ri, #data;((Ri))← data
16位数据传送指令
MOV DPTR, #data16;高8位送DPH,低8位送DPL
实验内容3-1:设(70H)= 60H,(60H)=20H,
MOV R0, #70H
MOV A, @R0
MOV R1, A
MOV B, @R1
MOV @R0, P1
结果: (B) = ?
(R1) = ?
(R0) = ?
要求:掌握指令功能、查表求机器码、寻址方式、结果
实验内容3-2:给出下列指令的执行结果,指出源操作数的寻址方式。
MOV 20H, #25H
MOV 25H, #10H
MOV P1, #0CAH
MOV R0, #20H
MOV A, @R0
MOV R1, A
MOV B, @R1
MOV @R1,P1
MOV P3, R1
结果:
(20H)=?, (25H)=?, (P1)=?,
(R0)=?, (A)=?, (R1)=?,
(B)=?, (25H)=?, (P3)=?
2、ACC与外部数据存储器(或扩展I/O口)传递数据MOVX
MOVX A, @DPTR
MOVX A, @Ri; 均为单字节指令 MOVX @DPTR, A
MOVX @Ri, A
功能:A与外部RAM或扩展I/O口数据的相互传送。
说明:
(1)用Ri进行间接时只能寻址256个单元(0000H~00FF),当访问超过256个字节的外RAM空间时,需利用P2口确定高8位地址(也称页地址),而用DPTR进行间址可访问整个64KB空间。
(2)在执行上述读、写外RAM指令时,P3.7(RD)、P3.6(WR)会相应自动有效。
(3)可用作为扩展I/O口的输入/输出指令
实验内容3-3:将外RAM 2010H中内容送外RAM 2020单元中。
分析:读2010H中内容→A→写数据→2020H中
流程如右图:
程序如下:
MOV P2,#20H ;输出高8位地址
MOV R0,#10H ;置读低8位间接地址
MOVX A,@R0 ;读2010H中数据
MOV R1,#20H;置写低8位间接地址
MOVX @R1,A ;将A中数据写入2020H中
3、查表指令MOVC
表格:程序存储器除存放程序外,还可存放一些常数,这种数据的结构称为表格。
访问:通过两条程序存储器取数指令,即查表指令来访问,完成从ROM中读数,并只能送累加器A。
指令格式:
MOVC A,@A+DPTR;(A)←((A)+(DPTR))
MOVC A,@A+PC ;(PC)←(PC)+1,(A)←((A)+(PC))
特点:单字节指令,源操作数为变址寻址,执行时, PSEN会自动有效。
功能:以DPTR、PC为基地址,与A中的8位无符号数相加,得到一个新16位地址,将其内容送A。
(1)用DPTR作为基寄存器
实验内容3--4:设外部ROM的2000H单元开始的连续10个字节中已存放有0~9的平方数,要求根据A中的内容(0~9)来查找对应的平方值。
START:MOV A, #3
MOV DPTR, #TABLE
MOVC A, @A+DPTR
ORG 2000H
TABLE:DB 0,1,4,9,16,25,36,49,64,81
结果:A ←?,(A)=?
特点:可访问整个ROM的64KB空间,表格可放在ROM的任何位置,与MOVC指令无必然的关系。
(2)用PC作为基寄存器
实验内容3-5:ORG 1000H
1000H MOV A,#30H;
1002H MOVC A,@A+PC;
结果是:A ←?
优点:不改变PC的状态,根据A的内容取表格常数。
缺点:
(1)表格只能存放在查表指令以下的256个单元内。
(2)当表格首地址与本指令间有其他指令时,须用调整偏移量,调整量为下一条指令的起始地址到表格首址之间的字节数。
实验内容3-6:阅读下列程序,给出运行结果 ,设(A)=3。
1000H ADD A,#02H ;加调整量
1002H MOVC A,@A+PC ;查表
1003H NOP
1004H NOP
1005H TAB: DB 66,77,88H,99H,‘W’,‘
结果:(A)=?
显然,2条NOP指令没有时,不需调整。
4、堆栈操作
堆栈,由特殊功能寄存器SP(81H)管理,始终指向其栈顶位置,栈底视需要设在内部RAM低128B内。
(1)进栈操作: PUSH direct
功能:先(SP) ←(SP)+ 1,再((SP))←(direct);
其中:direct为源操作数;目的操作数为@SP,隐含。
实验内容3-7:已知:(A)=30H,(B)=70H
执行: MOV SP, #60H ;设栈底
PUSH ACC ;
PUSH B
结果:(61H)=?,(62H)=?,(SP)=?
(2)出栈操作: POP direct
功能:先(direct)←((SP)),再SP ←(SP)-1
其中:direct为目的操作数,源操作数为@SP,隐含。
实验内容3-8:已知:(SP)=62H,(62H)=70H,(61H)=30H
执行: POP DPH
POP DPL
结果:(DPTR)=?,(SP)=?
5、与A的数据交换指令
数据交换指令共5条,完成累加器和内部RAM单元之间的字节或半字节交换。
(1)整字节交换:
XCH A,Rn ;(A)←→(Rn)
XCH A,direct ;(A)←→(direct)
XCH A,@Ri ;(A)←→((Ri))
(2)半字节交换:
XCHD A,@Ri ;(A)0~3←→((Ri))0~3
(3)累加器自身高低4位交换
SWAP A ;(A)7~4←→(A)3~0
实验内容3-9 设(A)=57H,(20H)=68H,(R0)=30H,(30H)=39H,求下列指令的执行结果
(1)XCH A,20H;
结果:(A)=?,(20H)=?
(2)XCH A,@R0;
结果: (A)=?,(30H)=?
(3)XCH A,R0 ;
结果: (A)=?,(R0)=?
(4)XCHD A,@R0 ;
结果: (A)=?,(30H)=?
(5)SWAP A ;
结果: (A)=?
编写程序
五、实验步骤
1、分别编写调用程序,然后在开发环境中编译运行,写出实验内容的结果
六、实验报告
1、分别编写调用程序,然后在开发环境中编译运行,写出实验内容的结果
2、给出各个程序的清单,要求有注释。
3、MCS-51系列单片机有数据传送指令?列出这些指令,并说明其功能。