实验四

来源:百度文库 编辑:神马文学网 时间: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’,‘10’

结果:(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)=?

实验内容3-10:设内部RAM 40H、41H单元中连续存放有4个压缩的BCD码数据,试编程序将这4个BCD码倒序排列。

分析:流程如右图 

编写程序

 

 

 

 

五、实验步骤

1、分别编写调用程序,然后在开发环境中编译运行,写出实验内容的结果

六、实验报告

1、分别编写调用程序,然后在开发环境中编译运行,写出实验内容的结果

2、给出各个程序的清单,要求有注释。

3、MCS-51系列单片机有数据传送指令?列出这些指令,并说明其功能。