文档库 最新最全的文档下载
当前位置:文档库 › 数据传送指令

数据传送指令

数据传送指令
数据传送指令

数据传送指令

数据传送指令包括数据的传送、交换、堆栈数据的压入与弹出,是最基本、使用率最高的一类指令。助记符有MOV、MOVX、MOVC、XCH、XCHD、SWAP、PUSH、POP共八种。

1.MOV类指令及功能(16条)

这类指令的功能是从源操作数到目的操作数的数据传送。

MOV A, Rn ;Rn→A,寄存器Rn的内容送到累加器A

MOV A, direct ;(direct)→A,直接地址中的内容送A

MOV A, @Ri ;(Ri)→A,Ri间址的内容送A

MOV A, #data ;data→A,立即数送A

MOV Rn,, A ;A→Rn,累加器A中的内容送寄存器Rn

MOV Rn, direct ;(direct)→Rn;直接地址中的内容送Rn

MOV Rn, #data ;data→Rn;立即数送Rn

MOV direct, A ;A→(direct),A中的内容送入直接地址中

MOV direct, Rn ;Rn→(direct),寄存器内容送入直接地址中

MOV direct, direct ;(direct) →(direct),源操作数直接地址的内容送

;目的操作数的直接地址中

MOV direct, @Ri ;(Ri)→(direct),Ri间址内容送入直接地址中

MOV direct, #data ;data→(direct),立即数送入直接地址中

MOV @Ri, A ;A→(Ri),A中内容送到Ri间址单元中

MOV @Ri, direct ;(direct)→(Ri),直接地址中内容送入Ri间址单元中

MOV @Ri, #data ;data→(Ri),立即数送入Ri间址单元中

MOV DPTR, #data16 ;data16→DPTR,16位常数送入数据指针DPTR中,高8

;位送入DPH,低8位送入DPH,低8位送入DPL中从上述指令可以看出目的操作数有A累加器、Rn寄存器、直接地址direct及间接地址@Ri,源操作数除此之外还多一种立即数data。

例1 R0中有常数30H,而30H地址中有常数50H

执行MOV A, R0后,A=30H,R0不变。

执行MOV A, @R0后A=50H,而不是30H,这条指令的功能是把R0中内容为地址的单元的书送入A,R0中是30H也就是把30H地址中内容50H送入A。

例2 若(40H)=20H,(50H)=30H

执行MOV 40H, 50H; (50H) →(40H)

结果:(40H)=30H,50H地址中内容仍为30H。

例3若A=40H,R0=30H,

执行MOV @R0, A ;A→(R0)

结果:(30H)=40H,A与R0皆不变,即A=40H,R0=30H。

该指令功能是把A中内容送入R0间址单元即R0中内容为地址的单元。

例4执行MOV DPTR, #2040H ;2040H→DPTR

结果:DPH=20H, DPL=40H

DPTR是片外RAM地址指针,只有这一条指令是传送16位数据。

2.MOVC类指令及功能(2条)

MOVC A, @A+PC ;PC+1→PC, (A+PC) →A

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

功能:该类属于查表指令,利用这两条指令很方便地查找放在程序存储器中数据表格的内容。

例1程序

1000H MOV A, #10H ;10H→A

1002H MOVC A, @A+PC ;PC+1→PC,PC=1003H,(A+PC)=(10H+1003H)→A

...

1010H 02H

1011H 04H

1012H 06H

1013H 08H

程序执行结果:A=08H

用MOVC A, @A+PC指令需注意两点:

1)指令中的PC是执行完本条指令后的PC值,即PC等于本条指令地址加1。

2)A是修正值,它等于查表指令和欲查数据相间隔字节数。A的范围是0~255,一次该指令只能查找本指令后的256B范围内的表格,故称为近程查表。

例2 程序

1000H MOV A, #01H ;01H→A

1002H MOV DPTR, #6000H ;6000H→DPTR

1005H MOVC A,@A+DPTR ;(A+DPTR)=(01H+6000H)=(6001H) →A

...

6001H 0AH

6002H 0BH

6003H 0CH

6004H 0DH

程序执行结果:A=0AH,查到了地址为6001H单元中的数据。

用MOVC A, @A+DPTR指令查表特点:A, DPTR都可以改变,因此可在64KB范围内查表,故称为远程查表。这条指令更方便。

3.MOVX类指令(4条)

MOVX A, @DPTR ;(DPTR) →A,DPTR间址单元内容送A

MOVX @DPTR, A ;A→(DPTR), A 中内容送入DPTR间址单元

MOVX A, @Ri ;(Ri) →A,Ri间址单元内容送A

MOVX @Ri, A ;A→(Ri), A中内容送Ri间址单元MOVX类指令功能:这四条指令专门用来与外部数据存储区传送数据。CPU与外部RAM传送数据时只能用间接寻址方式。

例1把外部数据存储单元2000H中的数据送到4000H单元中,设2000H中有数据30H。

程序各条指令执行结果

MOV DPTR, #2000H ;2000H DPTR, DPTR=2000H

MOVX A, @DPTR ;(DPTR) A即(2000)A,A=30H

MOV DPTR, #4000H ;4000H→DPTR, DPTR=4000H

MOVX @DPTR, A ;A→(DPTR)即A→(4000H), (4000H)=30H 例2把内部RAM50H单元数据送到片外20H单元,设50H中单元存有数据10H。

程序各条指令执行结果

MOV A,50H ;(50H) 各条指令执行结果A, A=10H

MOV R0,#20H ;20H→R0, R0=20H

MOVX @R0, A ;A→(R0)即A→(20H)则20H=10H 注意:与外部RAM传送数据时,地址小于256B用Ri间址,大于256B时用DPTR间址。

4.交换指令

XCH A, Rn ;Rn A, Rn与A内容交换

XCH A,direct ;(direct) A, 直接地址内容与A内容交换

XCH A, @Ri ;(Ri) A,Ri间址内容与A内容交换

XCHD A, @Ri ;(Ri.3~Ri.0) A.3~A.0, Ri间址内容低4

位与A中低4 位内容交换 SWAP A ;A.3~A.0 A.7~A.4, A中高4位与低4位

交换

例若R0=30H, A=F0H, (30H)=46H

执行 XCH A, R0 ;结果:A=30H,R0=F0H, R0与A 内容交换

执行 XCH A, @R0 ;结果:A=46H, (30H)=F0H, R0中不变,

;实际上是(R0)

若执行XCHD A, @R0 ;结果:A=F6H,(30)H=40H

;A与(30H)中低4位交换,高4位不变执行SWAP A ;结果:A=0FH, 高低4位互换

5.堆栈操作指令(2条)

PUSH、POP属堆栈操作指令,其功能是把直接地址中的内容压入堆栈保存,或从堆栈中取出(弹出)数据到直接地址中。

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

;直接地址内容压入堆栈顶

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

;堆栈栈顶内容弹出到直接地址

注意:堆栈是用户自己设定的内部RAM中的一块专用存储区,使用堆栈时一定先设堆栈指针。堆栈遵循后进先出的原则安排数据。压入数据时SP先加1,再压入;弹出时,先弹出数据,SP再减1。

例设堆栈指针为30H,为保护现场把A和B中的内容压入堆栈保护,然后根据需要再把两者弹出。设A中为30H,B中为01H。

程序执行结果

MOV SP, #30H ;30H→SP, SP=30H设堆栈指针为30H

PUSH ACC ;SP+1→SP=31H, A→(SP)即A→(31H),(31H)=30H

PUSH B ;SP+1→SP=32H, B→(SP)即B→(32H),(32H)=01H

POP B ;SP→B即(32H)→B, B=01H, SP-1→SP=31H

POP ACC ;SP→A即(31H)→A, A=30H, SP-1→SP=30H 从此例可以看出压入、弹出过程SP的变化规律

单片机数据传送实验报告

实验名称: 数据传送实验 实验类型: 设计性实验 姓名:袁志生 时间:第五六节课 一、实验目的与要求 实验目的:1、掌握单片机的汇编指令系统及汇编语言程序设计方法。 2、掌握单片机的存储器体系结构。 3、熟悉keil软件的功能和使用方法。 4、掌握单片机应用程序的调试方法。 实验要求:1、实现单片机内部RAM之间,外部RAM之间以及内部RAM 与外部RAM之间的数据传送。 2、利用Keil软件编辑、汇编、调试、运行实验程序并记录实验数据。 二、设计要求 1、编写程序将00H~0FH 16个数据分别送到单片机内部RAM 30H~3FH 单元中。 2、编写程序将片内RAM 30H~3FH的内容传送至片内RAM 40~4FH单元中。 3、编写程序将片内RAM 40H~4FH单元中的内容传送到外部RAM 4800H~480FH单元中。 4、编写程序将片外4800H~480FH单元内容送到外部RAM 5800H~580FH 单元中。 5、编写程序将片外RAM 5800H~580FH单元内容传送回片内RAM 50H~5FH 单元中。

三、实验程序流程框图和程序清单.

程序清单: ORG 0000H START: MOV R0, #30H MOV DPTR, #QW1 MOV R5, #0 MOV R7, #16 LOOP: MOV A, R5 MOVC A, @A+DPTR MOV @R0, A INC R0 INC R5 DJNZ R7, LOOP LJMP QW2 QW1: DB 00H, 01H, 02H, 03H, 04H, 05H, 06H, 07H DB 08H, 09H, 0AH, 0BH, 0CH, 0DH, 0EH, 0FH QW2: MOV R0, #30H MOV R1, #40H MOV R5, #16 LOOP1: MOV A, @R0 MOV @R1, A INC R0 INC R1 DJNZ R5, LOOP1 MOV R1, #40H MOV DPTR, #4800H MOV R5, #16 LOOP2: MOV A, @R1 MOVX @DPTR, A INC R1 INC DPTR DJNZ R5, LOOP2 MOV SP, #60H MOV 11H, #48H MOV 10H, #58H MOV R2, #00H LOOP3: MOV DPL, R2 PUSH 10H PUSH 11H

单片机数据传送指令

单片机的累加器A与片外RAM之间的数据传递类指令 MOVX A,@Ri MOVX @Ri,A MOVX A,@DPTR MOVX @DPTR,A 说明: 1)在51系列单片机中,与外部存储器RAM打交道的只能是A累加器。所有需要传送入外部RAM的数据必需要通过A送去,而所有要读入的外部RAM中的数据也必需通过A读入。在此我们能看出内外部RAM的区别了,内部RAM间能直接进行数据的传递,而外部则不行,比如,要将外部RAM中某一单元(设为0100H单元的数据)送入另一个单元(设为0 200H单元),也必须先将0100H单元中的内容读入A,然后再传送到0200H单元中去。 要读或写外部的RAM,当然也必须要知道RAM的地址,在后两条单片机指令中,地址是被直接放在DPTR中的。而前两条指令,由于Ri(即R0或R1)只是一个8位的寄存器,所以只供给低8位地址。因为有时扩展的外部RAM的数量比较少,少于或等于256个,就只需要供给8位地址就够了。 使用时应当首先将要读或写的地址送入DPTR或Ri中,然后再用读写命令。 例:将单片机外部RAM中100H单元中的内容送入外部RAM中200H单元中。 MOV DPTR,#0100H MOVX A,@DPTR MOV DPTR,#0200H MOVX @DPTR,A 程序存储器向累加器A传送指令

MOVC A,@A+DPTR 本指令是将ROM中的数送入A中。本指令也被称为单片机查表指令,常用此指令来查一个已做好在ROM中的表格说明: 此条指令引出一个新的寻址办法:变址寻址。本指令是要在ROM的一个地址单元中找出数据,显然必须知道这个单元的地址,这个单元的地址是这样确定的:在执行本指令立脚点D PTR中有一个数,A中有一个数,执行指令时,将A和DPTR中的数加起为,就成为要查找的单元的地址。 查找到的结果被放在A中,因此,本条指令执行前后,A中的值不一定相同。 例:有一个数在R0中,要求用查表的办法确定它的平方值(此数的取值范围是0-5) MOV DPTR,#TABLE MOV A,R0 MOVC A,@A+DPTR TABLE: DB 0,1,4,9,16,25 设R0中的值为2,送入A中,而DPTR中的值则为TABLE,则最终确定的ROM单元的地址就是TABLE+2,也就是到这个单元中去取数,取到的是4,显然它正是2的平方。其它数据也能类推。 标号的真实含义:从这个地方也能看到另一个问题,我们使用了标号来替代具体的单元地址。事实上,标号的真实含义就是地址数值。在这里它代表了,0,1,4,9,16,25这几个数据在ROM中存放的起点位置。而在以前我们学过的如LCALL DELAY单片机指令中,DE LAY 则代表了以DELAY为标号的那段程序在ROM中存放的起始地址。事实上,CPU正是通过这个地址才找到这段程序的。 能通过以下的例程再来看一看标号的含义: MOV DPTR,#100H

实验一 数据传送

数据传送实验 验证性实验 2012年10月31日第三四节课 一、实验目的 1、掌握单片机的汇编指令系统及汇编语言程序设计方法。 2、掌握单片机的存储器体系结构。 3、熟悉Keil软件的功能和使用方法。 4、掌握单片机应用程序的调试方法。 二、设计要求 1、编写程序将00H~0FH 16个数据送到单片机内部RAM 30H~3FH单元中。 2、编写程序将片内RAM 30H~3FH的内容传送至片内RAM 40~4FH单元中。 3、编写程序将片内RAM 40H~4FH单元中的内容传送到外部RAM 4800H~480FH单元中。 4、编程将片外4800H~480FH单元内容送到外部RAM 5800H~580FH单元中。 5、编写程序将片外RAM 5800H~580FH单元内容传送回片内RAM 50H~5FH 单元中。 三、实验程序流程框图

四、程序清单 ORG 0000H MOV R0, #30H ;初始化数据指针 MOV A, #00H MOV R2, #10H ;设置循环次数LOOP1: MOV @R0, A ;循环体部分 INC R0 ;修改数据指针 INC A DJNZ R2, LOOP1 ;循环控制部分 MOV R0, #30H ;初始化数据指针 MOV R1, #40H MOV R2, #10H LOOP2: MOV A, @R0 ;循环体部分 MOV @R1, A INC R0 ;修改数据指针 INC R1 DJNZ R2, LOOP2 ;循环控制部分

MOV R1, #40H ;设置数据指针R0单元内容 MOV DPTR, #4800H ;外部RAM4800H单元地址作为16位立即数送数 据指针DPTR MOV R2, #10H ;设置循环次数 LOOP3: MOV A, @R1 ;循环体部分 MOVX @DPTR, A INC R1 ;修改数据指针 INC DPTR DJNZ R2, LOOP3 ;循环控制部分 MOV R0, #00H ;初始化数据指针 MOV R1, #48H MOV R2, #58H LOOP4: MOV DPL, R0 ;设置数据指针的低八位内容 MOV DPH, R1 ;设置数据指针的高八位内容 MOVX A, @DPTR ;将外部RAM内容送累加器A MOV DPH, R2 ;重新设置数据指针高八位内容 MOVX @DPTR, A ;将累加器A的内容送回外部RAM INC R0 ;修改数据指针 CJNE R0, #10H, LOOP4 ;循环控制部分 MOV R0, #50H ;初始化数据指针 MOV DPTR, #5800H MOV R2, #10H CLR A ;累加器A清零 LOOP5: MOVX A, @DPTR ;循环体部分 MOV @R0, A INC R0 ;修改数据指针 INC DPTR DJNZ R2, LOOP5 ;循环控制部分 END 五、程序数据

单片机数据传送实验报告

竭诚为您提供优质文档/双击可除单片机数据传送实验报告 篇一:单片机数据传送实验报告 实验名称:数据传送实验 实验类型:设计性实验 姓名:袁志生 时间:04.17第五六节课 一、实验目的与要求 实验目的:1、掌握单片机的汇编指令系统及汇编语言程序设计方法。 2、掌握单片机的存储器体系结构。 3、熟悉keil软件的功能和使用方法。 4、掌握单片机应用程序的调试方法。 实验要求:1、实现单片机内部RAm之间,外部RAm之间以及内部RAm与外部RAm之间的数据传送。 2、利用Keil软件编辑、汇编、调试、运行实验程序并记录实验数据。 二、设计要求

1、编写程序将00h~0Fh16个数据分别送到单片机内部RAm30h~3Fh单元中。 2、编写程序将片内RAm30h~3Fh的内容传送至片内RAm40~4Fh单元中。 3、编写程序将片内RAm40h~4Fh单元中的内容传送到外部RAm4800h~480Fh单元中。 4、编写程序将片外4800h~480Fh单元内容送到外部RAm5800h~580Fh单元中。 5、编写程序将片外RAm5800h~580Fh单元内容传送回片内RAm50h~5Fh单元中。 三、实验程序流程框图和程序清单. 程序清单: oRg0000h sTART:moVR0,#30h moVDpTR,#Qw1 moVR5,#0 Loop: Qw1: Qw2: Loop1: Loop2: Loop3:

R7,#16A,R5A,@A+DpTR@R0,AR0IncR5R7,LoopQw200h,01h,02 h,03h,04h,05h,06h,07h08h,09h,0Ah,0bh,0ch,0Dh,0eh,0F hR0,#30hR1,#40hmoVR5,#16A,@R0@R1,AR0R1R5,Loop1R1,#4 0hmoVDpTR,#4800hR5,#16A,@R1@DpTR,AR1DpTRR5,Loop2moV sp,#60h11h,#48h10h,#58hR2,#00hDpL,R210h11hDphmoVxA, @DpTRmoVmoVmoVcmoVIncDJnZLJmpDbDbmoVmoVmoVmoVIncInc DJnZmoVmoVmoVmoVxIncIncDJnZmoVmoVmoVmoVpushpushpop pop moVx Inc cJne moV moV moV Loop4:moVx moV Inc Inc DJnZ enD 四,实验小结

数据传送类指令

3.2.1 数据传送类指令 数据传送指令用于实现寄存器与存储器之间、寄存器之间、累加器AL/AX与I/O端口之间、立即数到寄存器或存储器之间的字节或字的传送。这类指令的共同特点是不影响标志寄存器的内容(SAHF,POPF除外)。堆栈操作指令、标志位传送指令和地址传送指令也归入这一类中,共14条指令,又可分为4组,如表3.4所示。 1.通用数据传送指令 通用数据传送指令包括传送指令MOV、堆栈操作指令PUSH、POP、输入/输出指令(累加器传送指令)、数据交换指令XCHG和查表转换指令XLAT。这类指令是唯一允许以段寄存器作为操作数的指令(XCHG除外)。 表3.4 数据传送类指令 指令类型指令书写格式指令功能 通用数据传送指令MOV 目标,源 PUSH 源 POP 目标 XCHG 目标,源 XLAT 字节或字传送 字压入堆栈 字弹出堆栈 字节或字交换 字节翻译 目标地址传送指令LEA 目标,源 LDS 目标,源 LES 目标,源装入有效地址

装入DS寄存器 装入ES寄存器 标志位传送指令LAHF SAHF PUSHF POPF 将FR低字节装入AH寄存器 将AH内容装入FR低字节 将FR内容压入堆域 从堆栈弹出FR内容 I/O数据传送指令IN 累加器,端口 OUT 端口,累加器从端口输入字节或字 将字节或字输出到端口 (1)MOV 传送指令 指令格式:MOV OPD,OPS 指令功能:将源操作数OPS传送到目的操作数OPD,即(OPD)→(OPS)。 源操作数OPS可以是8/16位的通用寄存器、段寄存器、存储器中某单元或8/16位的立即数。 (2)PUSH进栈(压入)指令 指令格式:PUSH OPS 指令功能:将源操作数OPS压入堆栈,即SP–2 → SP,OPS → (SPH,SP)。 源操作数0PS可以是16位通用寄存器、段寄存器或存储器中的数据字,以保证堆栈按―字‖操作。源操作数OPS不能是立即数。 由于堆栈是按―后进先出‖方式工作,所以每次执行PUSH指令时,总是首先修改栈指针(S P)–2 → SP (即SP先减2),使之指向新栈顶,然后把源操作数压入堆栈中SP所指示

实验一 单片机数据区传送程序设计

实验一单片机数据区传送程序设计 一、实验目的 1.进一步掌握汇编语言程序设计和调试方法。 2.了解单片机RAM中的数据操作 二、实验说明 要求:编写程序把R2、R3源RAM区首地址内的R6、R7字节数据传送到R4、R5目的地址的RAM区。 三、实验仪器 计算机 伟福软件(lab2000P ) 四、实验内容 在R0、R1中输入源地址(例如:3000H),R2、R3中输入目的地址(例如4000H),R6、R7中输入字节数(例如:1FFFH)。 查看RAM 区3000~30FFH和4000~40FFH内容,也可自己重新赋值。 运行程序,首先单步,然后用执行到指定位置,最后用连续运行方式。 记录下运行结果,检查3000~30FFH中内容是否和4000~40FFH内容完全一致。 五、思考题 1、改变源地址,例如00FFH; 2、改变目的地址,例如2000H; 3、改变传输的个数,小于256个和大于256个的情况。 4、把程序改为对某一数据存储区RAM赋都相同一个数值。 六、源程序及其修改原理 org 0000H Block equ 2000h mov dptr, #Block ; 起始地址 mov r0,#12h mov a,#20h ;修改2000h开始的地址所存放的内容为20h Loop: mov r1,#14h ;增加r1计数,用循环方式实现大于256的数据传输(思 考题3) Loop1: movx @dptr,a inc dptr ; 指向下一个地址 djnz r1,Loop1 djnz r0, Loop ; 双循环实现r0,r1计数相乘 (以上程序实现对某一数据存储区2000h~2168hRAM赋都相同一个数值20h,思考题4) mov r0, #20h ;改变源地址为2000h(思考题1) mov r1, #00h mov r2, #50h;改变目的地址为5000h(思考题2) mov r3, #00h

汇编传送指令

汇编传送指令 r8——任意一个8位通用寄存器AH/AL/BH/BL/CH/CL/DH/DL r16——任意一个16通用寄存器AX/BX/CX/DX/SI/DI/BP/SP reg——代表r8或r16 seg——段寄存器CS/DS/ES/SS m8——一个8位存储器操作数单元(包括所有主存寻址方式) m16——一个16位存储器操作数单元(包括所有主存寻址方式) mem——代表m8或m16 i8——一个8位立即数 i16——一个16位立即数 imm——代表i8或i16 dest——目的操作数 src——源操作数 ---------------------------------------------------------------------------------------------------------------------------- 一、通用数据传送指令 1、传送指令MOV 格式:MOV dest,src ;dest←src MOV指令把一个字节或字的操作数从源地址src传送至目的地址dest。源操作数可以是立即数、寄存器或是主存单元,目的操作数可以是寄存器或主存单元,但不能是立即数。用约定的符号表达如下: MOV reg/mem, imm ;立即数送寄存器或是存储器 MOV reg/mem/seg, reg ;寄存器送寄存器(包括段寄存器)或贮存 MOV reg/seg, mem ;主存送寄存器(包括段寄存器) MOV reg/mem, seg ;段寄存器送主存或寄存器 特别说明:(1)立即数传送至通用寄存器(不包括段寄存器)或存储单元MOV reg/mem,imm 例: mov al,4 ;al←4,字节传送 mov cx,0ffh ;cx←00ffh,字传送 mov byte ptr [si],0ah ;ds:[si]←0ah, byte ptr说明是字节操作 mov word ptr [si+2],0bh ;ds:[si+2]←0bh, word ptr 说明是字操作 绝大多数说操作数的指令中(除非特别说明)目的操作数与源操作数必须类型一致,或同为字节,或同为字,否则为非法指令。8086不允许立即数传送至段寄存器。 特别说明(2)8086指令系统除串操作类指令外,不允许两个操作数都是存储单元,所以也就没有主存至主存的数据传送。可以通过寄存器间接实现 。例: mov ax,buffer1 ;ax←buffer1(将buffer1内容送ax)

单片机ROM、RAM之间数据传送

数据传送实验 一、实验目的 1、掌握单片机的汇编指令系统及汇编语言程序设计方法。 2、掌握单片机的存储器体系结构。 3、熟悉Keil软件的功能和使用方法。 4、掌握单片机应用程序的调试方法。 二、实验内容或原理 1、实现单片机内部RAM之间,外部RAM之间以及内部RAM 与外部RAM之间的数据传送。 2、利用Keil软件编辑、汇编、调试、运行实验程序并记 录实验数据。 三、设计要求 1、编写程序将00H~0FH 16个数据分别送到单片机内部 RAM 30H~3FH单元中。 2、编写程序将片内RAM 30H~3FH的内容传送至片内RAM 40~4FH单元中。 3、编写程序将片内RAM 40H~4FH单元中的内容传送到外 部RAM 4800H~480FH单元中。 4、编写程序将4800H~480FH单元内容送到外部RAM 5800H~580FH单元中。 5、编写程序将片外RAM 5800H~580FH单元内容传送回 片内RAM 50H~5FH单元中。 四、实验报告要求 1、实验目的和要求。 2、设计要求。 3、实验程序流程框图和程序清单。 4、实验总结。 5、思考题。 五、思考题 1、说明MCS-51系列单片机对片内RAM和片外RAM存贮器各有 哪些寻址方式? 2、说明指令MOV A,20H和MOV C,20H中的20H含义有什 么不同?传送指令中的助记符MOV,MOVX,MOVC各适用 于访问哪个存储器空间? 程序如下: ORG 0000H START: LJMP MAIN ORG 0030H MAIN: MOV PSW, #00H MOV R0, #20H MOV R3, #96 ML: MOV @R0, #00H

单片机 实验1-2

实验一数据存储器实验 一、实验目的 1.掌握片内数据存储器的地址分配。 2.掌握对片内数据存储器进行数据读写的方法。 3. 掌握用Proteus调试汇编源程序的方法。 二、实验预备知识 8051的片内数据存储器共有256个单元,按其功能划分为两个部分:低128单元(单元地址00H~7FH)和高128单元(单元地址80H~FFH)。 低128单元按其用途划分为工作寄存器区(单元地址00H~1FH)、位寻址区(单元地址20H~2FH)、用户RAM区(单元地址30H~7FH)三个区域。如图2-1所示。 高128单元是分配给特殊功能寄存器使用的,其中部分单元(单元地址能被8整除的)可以进行位寻址。 三、实验内容 通过执行程序中的相关指令,将有关数据写入工作寄存器区、位寻址区、数据缓冲区和特殊功能寄存器区各存储单元,观察当前在用工作寄存器组的选择与数据传送目标的对应关系、字节地址与位地址的区别、特殊功能寄存器的字节地址、程序计数器PC在执行指令中的作用。 四、实验步骤 1. 新建设计文件。单击“文件”→“新建设计”,在弹出的“Create New Deign”对话框中选择“DEFAULT”模板后单击“OK”。 2. 设置图纸尺寸。单击“系统”→“设置图纸尺寸”,在弹出的“Sheet Size Configuration”对话框中选择“A4”图纸尺寸或自定义尺寸后单击“OK”。 3. 设置网格。单击“查看”→“网格”,网格显示(再次单击,网格不显示)。单击“查看”→“Snap xxth”(或Snap x.xin),可改变网格单位,默认为“Snap 0.1in”。 4. 保存设计文件。单击“文件”→“保存设计”,在弹出的“Save ISIS Design File”对话框中指定文件夹(如D盘电信061××文件夹)、输入文件名“reg”并选择保存类型为“Design Files”后单击“保存”。 5. 选取元器件。从Proteus元器件库中选取元器件AT89C51(单片机)。单击模式选择工具栏“元件”按钮,单击器件选择按钮“P”,在弹出的“Pick Devices”(选取元器件)对话框的“Keywords”(关键字)栏中输入元器件名称“AT89C51”(也可以是分类、小类、属性值),与关键字匹配的元器件“AT89C51”显示在元器件列表(Results)中。双击选中的元器件“AT89C51”,便将所选元器件“AT89C51”加入到对象选择器窗口。单击“OK”完成元器件选取。参见图1-2选取元器件对话框。 6. 放置元器件。单击对象选择器窗口的元器件“AT89C51”,元器件名“AT89C51”变为蓝底白字,预览窗口显示“AT89C51”元器件;单击方向工具栏按钮可实现元器件的左旋、右旋、水平和垂直翻转,以调整元器件的摆放方向;将鼠标指针移到编辑区某一位置,单击一次就可放置元器件“AT89C51”。按图2-3所示放置元器件。 7. 编辑元器件。单击模式选择工具栏“编辑”按钮,进入编辑状态。右击(或单击)元器件,该元器件变为红色表明被选中,鼠标指针放到被选中的元器件上,按住左键拖动,将鼠标移到编辑区某一位置松开,即完成元器件的移动。鼠标指针放到被选中的元器件

数据传送指令

1.8086指令系统操作数符号表示 DST->目的操作数 SRC->源操作数 TARGET->循环、转移和调用指令操作数 reg->寄存器操作数,字节或字 reg8->寄存器操作数,字节 reg16->寄存器操作数,字 mem->存储器操作数,字节或字 mem8->字节型存储器操作数 mem16->字型存储器操作数 mem32->双字型存储器操作数 acc->累加器AL或AX seg->段寄存器 imm->立即操作数,字节或字 imm8->8位立即操作数 imm16->16位立即操作数 short_label->短标号(8位偏移量) near_label->近标号(16位地址或偏移) far_label->远标号(32位地址) 指令的功能——该指令能够实现何种操作。通常指令助记符就是指令功能的英文单词或其缩写形式 指令支持的寻址方式——该指令中的操作数可以采用何种寻址方式 指令对标志的影响——该指令执行后是否对各个标志位有影响,以及如何影响 其他方面——该指令其他需要特别注意的地方,如指令执行时的约定设置、必须预置的参数、隐含使用的寄存器等 一、数据传送类指令 1.Mov(mov目的操作数,源操作数) 目的操作数:reg、seg、mem 源操作数:reg、seg、mem、imm 注意事项: 1、立即数不能直接送入段寄存器内 2、存储器之间不能互相送数 3、段寄存器之间不能相互送数 4、目的操作数不允许用段寄存器CS 5、送数的时候需要明确是字操作还是字节操作,即源操作数和目的操作数的位数 要统一,除非目的操作数的位数大于源操作数。(寄存器有明确的字节或字类型, 有寄存器参与的指令其操作数类型就是寄存器的类型;对于存储器单元与立即 数同时作为操作数的情况,必须显式指明;byte ptr指示字节类型,word ptr 指示字类型) 如何判断 ?两个操作数都明确了,两者必须一致 ?两个操作数有一个明确,另一个就以明确的为依据

基于WIFI模块和单片机的无线数据传输附代码

工业大学 计算机科学与技术学院 Project3课程设计 2014-2015学年第二学期 班级:浦电子1203 组员: 组员学号: 指导老师:武晓光,胡方强,包亚萍 袁建华,毛钱萍 2015年7月8日

目录 第一章阶段任务 第二章基于WIFI模块的无线数据传输的原理 1.1 时钟模块 1.2 最小单片机系统的原理 1.3 温度传感器DS18B20 1.4 串口 1.5 WIFI模块 第三章基于WIFI模块的无线数据传输的实现 2.1 WIFI模块设置 2.2 串口部分设置 2.3 调试与运行过程 第四章程序与框图 第五章小结

第一章阶段任务:

第四阶段:2天(2天)写报告 第二章基于WIFI模块的无线数据传输的原理 1.1时钟DS1302模块: 电路原理图:DS1302与单片机的连接也仅需要3条线:CE引脚、SCLK串行时钟引脚、I/O 串行数据引脚,Vcc2为备用电源,外接32.768kHz晶振,为芯片提供计时脉冲。 读写时序说明:DS1302是SPI总线驱动方式。它不仅要向寄存器写入控制字,还需要读取相应寄存器的数据。控制字总是从最低位开始输出。在控制字指令输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从最低位( 0位)开始。同样,在紧跟8位的控制字指令后的下一个SCLK脉冲的下降沿,读出DS1302的数据,读出的数据也是从最低位到最高位。数据读写时序如图

1.2单片机最小系统的原理: 说明 复位电路:由电容串联电阻构成,由图并结合"电容电压不能突变"的性质,可以知道,当系统一上电,RST脚将会出现高电平,并且,这个高电平持续的时间由电路的RC值来决定.典型的51单片机当RST脚的高电平持续两个机器周期以上就将复位,所以,适当组合RC的取值就可以保证可靠的复位. 晶振电路:典型的晶振取11.0592MHz(因为可以准确地得到9600波特率和19200波特率,用于有串口通讯的场合)/12MHz(产生精确的uS级时歇,方便定时操作) 单片机:一片AT89S51/52或其他51系列兼容单片机 特别注意:对于31脚(EA/Vpp),当接高电平时,单片机在复位后从部ROM的0000H开始执行;当接低电平时,复位后直接从外部ROM的0000H开始执行. 1.3温度传感器DS18B20的原理(连接到单片机最小系统,并将温度发送给WIFI模块):

单片机4个dd实验

班级:12数控1 姓名:李嘉敏学号:2012984225 实验一查表实验 一、实验目的 1.掌握汇编语言编程软件的使用及调试方法 2.掌握查表指令MOVC的使用 3.熟悉整个实验流程实验步骤 二、实验内容 编写并调试一个查表程序,根据输入值不同查表得到不同值,比如求1-9的平方 三、实验设备 计算机、实验箱、keil uVision3软件、若干根连接电线、USB接线 四、实验步骤(过程) 1.将串口线与实验箱连接,将开关“kc”拨至上 2.查看仿真器的串口号 3.在keil中创建新项目 4.新建文件,添加源程序并保存 5.添加源代码文件到项目Source Group1中并设置好仿真驱动 6.编译检查 7.接好USB线以及其他接线,打开电源开关 8.按下“debug”进行调试 9.观看实验想象并记录数据 五、实验数据及结果(或者现象) 程序所得的结果是随着dptr的值的变化而r7的值也随之呈平方变化。 六、实验源程序 org 0000h ljmp main org 0030h main: mov a, r7 mov dptr, #tab mov a, @a+dptr mov r7, a tab: DB 00,01,04,09,16 DB 25,36,49,64,81 七、问题分析 1.问题:程序编译检查有错误执行不了。解决方案:回头检查是源程序中 出现逻辑错误。 2.问题:实验箱的指示灯没有亮。解决方案:检查各线路是否连接好。 八、思考题: MOVC指令有几种格式?并写出来 答:两种。分别是movc a,@a+dptr和movc a,@a+pc

实验二数据传送实验 一、实验目的 1.掌握MCS51单片机数据传送指令; 2.掌握MCS51单片机内部和外部数据存储空间的编程和调试方法 二、实验内容 编程实现单片机不同存储空间的数据传输 三、实验设备 keil uVision3软件、计算机 四、实验步骤(过程) 1.查看仿真器的串口号 2.在keil中创建新项目 3.新建文件,添加源程序并保存 4.添加源代码文件到项目Source Group1中并设置好仿真驱动 5.编译检查 6.按下“debug”进行调试 7.观看实验想象并记录数据 五、实验数据及结果(或者现象) 外部RAM的20h后八个地址存放的数据分别为0,3,8,9,57,43,63, 19 六、实验源程序 org 0000h ljmp main org 0030h main: mov dptr,#tab mov r0,#20h mov r7,#8 loop2:clr a movc a,@a+dptr mov @r0,a inc r0 inc dptr djnz r7,loop2 mov r0,#20h mov r7,#8 mov dptr,#0100h loop1: mov a,@r0 movx @dptr,a inc r0 inc dptr djnz r7,loop1 here: ajmp here tab:db 00,3,08,9,87,67,99,25 end

8086 8088数据传送指令

第3章 8086/8088指令系统数据传送指令(1)

MOV AX,1234H MOV AX,[1234H] MOV AX,BX MOV AX,[BX] MOV AX,[BX+02H] MOV AX,[BX+SI] MOV AX,[BX+SI+02H] 请说出右边7条指令中源操作数的寻址方式

用于寄存器、存储器单元、输入输数据传送指令 出端口之间传送数据或地址。(1)通用数据传送指令MOV、PUSH、POP、XCHG (2)累加器专用传送指令IN、 OUT、 XLAT (3)地址传送指令LEA、LDS、LEA (4)状态标志寄存器传送指令LAHF、SAHF、 PUSHF、 POPF

数据传送指令 用于寄存器、存储器单元、输入输 出端口之间传送数据或地址。 (1)通用数据传送指令MOV PUSH、POP、XCHG (2)累加器专用传送指令IN、 OUT、 XLAT (3)地址传送指令LEA、LDS、LEA (4)状态标志寄存器传送指令LAHF、SAHF、 PUSHF、 POPF

MOV 指令 格式: MOV DST, SRC 功能: DST ←(SRC ) ;将源操作数送至目的操作数地址 目的操作数地址 源操作数地址 源/目的操作数之间传送关系图: CS DS,SS,ES 存储器 立即数 AX ,BX ,CX ,DX BP ,SP ,SI ,DI

MOV 指令 格式: MOV DST, SRC 功能: DST ←(SRC ) 目的操作数地址 源操作数地址 源/目的操作数之间传送关系图: 例:将DX 寄存器内容送至CX 。 MOV CX,DX 例:将立即数2000H 送至寄存器BX 。 MOV BX,2000H 例:将CX 寄存器内容送至DX 。 MOV DX,CX 例:将AX 的内容送至ES 。 MOV ES,AX CS DS,SS,ES 存储器 立即数 AX ,BX ,CX ,DX BP ,SP ,SI ,DI

8外部数据传送指令有哪几条

8外部数据传送指令有哪几条?试比较下面每组中2条指令的区别 (1)MOVX A, @R0 MOVX A, @DPTR (2) MOVX @R0, A MOVX @DPTR, A (2)MOVX A, @R0 MOVX @R0, A 答:外部数据传送指令有如下4条: MOVX A, @DPTR ;(DPTR)→A MOVX @DPTR, A ;A→(DPTR) MOVX A, @Ri ;(Ri)→A,以P2为页地址,Ri为低8位地址 MOVX @Ri,A ;A→(Ri),以P2为页地址,Ri为低8位地址 ①MOVX A, @R0 以R0为低8位地址指针的片外数据存储器中的内容传送到累加器A中 MOVX A, @DPTR 以DPTR为地址指针的片外数据存储器中的内容传送到累加器A中 ②MOVX @R0, A 累加器A中的内容传送到以R0为低8位地址指针的片外数据存储器中 MOVX @DPTR, A 累加器A中的内容传送到以DPTR为地址指针的片外数据存储器中 ③MOVX A, @R0 以R0为低8位地址指针的片外数据存储器中的内容传送到累加器A中 MOVX @R0, A累加器A中的内容传送到以R0为低8位地址指针的片外数据存储器中 9 在80C51片内RAM中,已知(30H)=38H,(38H)=40H,(40H)=48H,(48H)=90H。请分析下段程序中各指令的作用,并翻译成相应的机器码;说明源操作数的寻址方式及顺序执行每条指令后的结果答:机器码源程序寻址方式执行每条指令后的结果E5 40 MOV A,,40H 直接寻址A=48H F8 MOV R0,A 寄存器寻址R0=48H 75 90 F0 MOV P1,#0F0H 立即寻址P1=0F0H A6 30 MOV @R0,30H 寄存器间接寻址R0=48H,(48H)=38H 90 12 46 MOV DPTR, #1246H 立即寻址DPTR=1246H 85 38 40 MOV 40H, 38H 直接寻址(40H)=40H A8 30 MOV R0, 30H 直接寻址R0=38H 88 90 MOV 90H, R0 直接寻址P1=38H 75 48 30 MOV 48H, #30H 立即寻址(48H)=30H E6 MOV A, @R0 寄存器间接寻址R0=38H, A=40H 85 90 A0 MOV P2, P1 寄存器寻址P2=38H 10 试说明下列指令的作用,并将其翻译成机器码。执行最后一条指令对PSW有何影响,A的终值为多少? ①机器码源程序执行每条指令后的结果 78 72 MOV R0,#72H 把立即数72H送入R0 E8 MOV A, R0 把72H送入A 24 4B MOV ADD, #4BH 72H加4BH等于BDH送入A 执行此指令后PSW中P=0,OV=0,CY=0 ②机器码源程序执行每条指令后的结果 74 02 MOV A, #02H 把立即数2H送入A F5 F0 MOV B, A 把2H送入B 74 0A MOV A, #0AH 把立即数#0AH送入A 25 F0 ADD A, B A与B中值相加等于0CH,送入A A4 MUL AB A与B中值相乘等于018H,送入A 执行此指令后PSW中P=0,OV=0,CY=0 ③机器码源程序执行每条指令后的结果 74 20 MOV A, #20H 把立即数20H送入A F5 F0 MOV B, A 把20H送入B 25 F0 ADD A, B A与B中值相加等于40H,送入A

实验一_单片机数据区传送排序程序设计

实验一单片机数据区传送/排序程序设计 一、单片机数据区传送/排序程序设计 一、实验目的 1.进一步掌握汇编语言程序设计和调试方法。 2.了解单片机RAM中的数据操作 二、实验说明 要求:编写程序把R2、R3源RAM区首地址的R6、R7字节数据传送到R4、R5目的地址的RAM区。 三、实验仪器 计算机 伟福软件(lab2000P ) 四、实验容 在R0、R1中输入源地址(例如:3000H),R2、R3中输入目的地址(例如4000H),R6、R7中输入字节数(例如:1FFFH)。 查看RAM 区3000~30FFH和4000~40FFH容,也可自己重新赋值。 运行程序,首先单步,然后用执行到指定位置,最后用连续运行方式。 记录下运行结果,检查3000~30FFH中容是否和4000~40FFH容完全一致。 五、思考题 1、改变源地址,例如00FFH; 2、改变目的地址,例如2000H; 3、改变传输的个数,小于256个和大于256个的情况。 4、把程序改为对某一数据存储区RAM赋都相同一个数值。 六、源程序及其修改原理 org 0000H Block equ 2000h mov dptr, #Block ; 起始地址 mov r0,#12h mov a,#20h ;修改2000h开始的地址所存放的容为20h Loop: mov r1,#14h ;增加r1计数,用循环方式实现大于256的数据传输(思 考题3) Loop1: movx dptr,a inc dptr ; 指向下一个地址 djnz r1,Loop1 djnz r0, Loop ; 双循环实现r0,r1计数相乘 (以上程序实现对某一数据存储区2000h~2168hRAM赋都相同一个数值20h,思考题4) mov r0, #20h ;改变源地址为2000h(思考题1) mov r1, #00h

单片机 数据块传送 软件实验1

实验2:数据块传送程序: 1.数据块传送程序 : ORG 0000H MAIN: MOV R0,#40H MOV R2,#10H MOV A,#0A0H A1: MOV @R0, A INC R0 INC A DJNZ R2, A1 注:此时R2=10h,通过djnz之后,r2=09h≠0,则跳转到A1段

开始重复A1段中之前的语句。R0从40h依次增加至4fh,R2则依次从10h 减少至01h,此时,在运行至djnz之后r0=00h,然后顺序执行语句。从而完成了给40h~4fh赋值的目的。 MOV R0, #40H MOV DPTR, #9800H MOV R2, #10H 注:此处重新给r0 ,dptr, r2.赋初值 A2: MOV A, @R0 MOVX @DPTR, A INC R0 INC DPTR DJNZ R2, A2 MOV R0, #50H MOV DPTR, #9800H MOV R2, #10H A2: MOV A, @R0 注:(40h)=a0h MOVX @DPTR, A INC R0 INC DPTR

DJNZ R2, A2 注:此时r2=10h,经过djnz语句之后,r2=0fh≠0h,则语句跳转至A2处,依次执行之后,r2最后变为00h然后顺序执行。此时,实现数据由片内传至片外的目的 MOV R0, #50H MOV DPTR, #9800H MOV R2, #10H A3: MOVX A, @DPTR MOV @R0, A INC DPTR INC R0 DJNZ R2, A3 注:此时r2=10h,经过djnz语句之后,r2=0fh≠0h,则语句跳转至A3处,依次执行之后,r2最后变为00h然后顺序执行。此时,实现数据由片内外回传至

左静实验三数据传送指令的使用

实验 3 算术运算、逻辑运算指令的应用 姓名:左静学号:08538050 实验日期:2012.-10-14 实验目的:熟练应用算术,逻辑运算指令 实验内容:1.(1)编程计算无符号数9876H÷3456H,将商、余数分别送入BX,CX中。 (2)编程计算有符号数9876H÷3456H,将商、余数分别送入BX,CX 中。 2.赋初值AL=56H,请将AL的D0、D2、D4、D6位取反,其余位不变;然后将AL的D1、D3、D4位清0,其余位不变;最后将AL的D5、D7位置1,其余位不变。 3. 赋初值AL=01H,请将AL逻辑左移1位,再算术右移3位,最后带进位循环左移2位。

4.计算12345678H+87654321H,要求:首先将被加数12345678H、加数87654321H分别放在数据段偏移地址为1000H、2000H的存储单元里(使用MOV指令),然后求两数之和,并将结果存放在原被加数的位置。并在程序运行后,查看相关内存单元,观察运行结果。实验源程序:1.1 mov ax,9876h; mov dx,0000h; mov bx,3456h; div bx; mov bx,ax; mov cx,dx; hlt; 1.2 mov ax,9876h; cwd; mov bx,3456h;

idiv bx; mov bx,ax; mov cx,dx; hlt; 2.MOV AL,56H; XOR AL,55H; AND AL,0E5H; OR AL,0A0H; HLT;

mov al,01h shl al,1 sar al,3 rcl al,2 hlt mov word ptr[1000h],5678h mov word ptr[1002h],1234h mov word ptr[2000h],4321h mov word ptr[2002h],8756h add word ptr[1000h],5678h,4321h adc word ptr[1002h],1234h,8765h hlt

单片机实验分析指导书

\\ 《单片机原理与应用》 实验指导书 注意: 1、做实验前必须预习 2、带教材和实验指导书 哈尔滨理工大学 自动化学院自动化系

实验仪的使用 本实例是仿真INTEL的8031单片机,来循环点亮P1口的发光二极管(低电平有效)。程序是用汇编语言来编写。下面介绍相应的操作步骤: 1、运行桌面“星研集成软件”,画面如下: 2、建立源文件 执行[主菜单?文件?新建],(或者点击图标)打开窗口。 选择存放源文件的目录,输入文件名,注意:一定要输入文件名后缀。对源文件编译、连接、生成代码文件时,系统会根据不同的扩展名启动相应的编译软件。比如:.ASM文件,使用A51来对它编译。本 实例文件名为xunhuan.asm 。窗口如下: 按“确定”即可。然后即出现文件编辑窗口: 输入源程序,参照实验一源程序。 1

这样一个源文件就建立好了。 3.编译、连接文件 首先选择一个源文件,然后可以编译、连接文件了。对文件编译,如果没有错误,再与库文件连接,生成代码文件(DOB、HEX文件)。编译、连接文件的方法有如下二种:(1)使用[ 主菜单?项目?编译、连接]或[主菜单?项目?重新编译、连接]”。(2)点击图标或来“编译、连接”或“重新编译连接”。编译、连接过程中产生的信息显示在信息窗的“建立”视中。编译没有错误的信息如下: 若有错误则出现如下信息框: 有错误、警告信息,用鼠标左键双击错误、警告信息或将光标移到错误、警告信息上,回车,系统自动打开对应的出错文件,并定位于出错行上。 这时用户可以作相应的修改,直到编译、连接文件通过。 4.调试 编译、连接正确后,可以开始调试程序。进入调试状态方法有: a)执行[ 主菜单?运行?进入调试状态] b)点击工具条的进入后的窗口如下: 2

相关文档