单片机实验教案 - 图文(3)

2019-03-16 18:29

是MOV A ,#30H是 将立即数30H传送给累加器A ;而MOV A ,30H是 将内部RAM30H单元中的内容传送给累加器A 。

2)内部RAM之间数据传送用指令 MOV ,内部RAM与外部RAM之间数据传送只能使用 MOVX 指令,且必须通过累加器A传送;内部RAM与外部ROM之间数据传送只能使用指令 MOVC ,且必须通过累加器A传送;但只能由外部ROM向内部RAM单向传送。

3)PUSH和POP是 堆栈 操作指令,属于 直接 寻址方式,若SP=07H,执行PUSH ACC指令时,操作顺序是先 (SP)← (SP)+1 ,然后 ((SP))← (A) ,执行POP ACC指令时,操作顺序是先 (A)←((SP)) ,然后 (SP)←(SP)-1 。堆栈数据进出的原则是 后进先出 。

4)MOVC A,@A+DPTR是在 程序存储器64KB 范围内查表;数据指针DPTR必须先 赋值 ,MOVC A, @A+PC其中相对偏移量A是 无符号8位数 ,最大值为 FF H,即 255 字节,因此这个指令是在 当前指令后256字节 范围内查表。程序计数器PC不须先 赋值 。

11

实验二 汇编语言程序设计

一、实验目的

1、掌握顺序结构程序设计。 2、掌握分支结构程序设计。 3、掌握控制转移类指令。 4、掌握子程序设计。

二、实验设备

DVCC仿真系统一套、Medwin(万利)、计算机一台。

三、实验内容

1、SJMP、AJMP和LJMP的区别

2、X、Y以补码的形式存放在20H、21H中,编写程序实现如下函数:

3、将20H~27H中的压缩BCD码拆为两个单字节BCD码,存放在以2000H为首地址的外部RAM中。 四、实验程序及运行记录

1、SJMP、AJMP和LJMP的区别

ORG 0000H

LP0:MOV A,#20H SJMP LP1 ORG 07FFH LP1: MOV A,#30H SJMP $ TEXT6.LST (1) 编译后,系统提示: 目标越界 ,改为AJMP后编译通过,将ORG 07FFH改为0800H, 系统提示: 目标越界 ,这说明AJMP可以在 2K 范围内无条件转移。

(2) 改为LJMP编译通过,这说明LJMP可以在 64KB 范围内无条件转移。 将LJMP LP1改为SJMP LP0,机器码为 80FCH ,其中 FCH 为偏移量,

一个 补 码,01H~7FH说明向PC(增大√、减小)方向跳,80H~FFH说明向PC(增大、减小√)方向跳,这说明SJMP可以在当前PC值 -128~127 范围内无条件转移。

2、X、Y以补码的形式存放在20H、21H中,编写程序实现如下函数:

实验程序:

方法一 ORG 0000H

MOV A,20H JZ ZERO

JB ACC.7, NEG MOV 21H, #01H SJMP OVER

NEG: MOV 21H, #0FFH

SJMP OVER

ZERO:MOV 21H, A OVER:SJMP $

END

方法二 ORG 0000H

MOV A,20H JZ ZERO

CJNE A , #80H,NEG

NEG: JC POSI

MOV 21H, #0FFH SJMP OVER

POSI: MOV 21H, #01H

SJMP OVER

ZERO: MOV 21H, A OVER: SJMP $

END

12

方法一反汇编代码TEXT5.LST

LOC OBJ LINE SOURCE

0000 1 ORG 0000H 0000 E520 2 mov A,20H ; 3

0002 600D 4 JZ ZERO

0004 20E705 5 JB ACC.7,NEG 0007 752101 6 MOV 21H, #01H 000A 8007 7 SJMP OVER

000C 7521FF 8 NEG: MOV 21H, #0FFH 000F 8002 9 SJMP OVER 0011 F521 10 ZERO: MOV 21H, A 0013 80FE 11 OVER: SJMP $ 12 END 方法2反汇编代码TEXT7.LST

LOC OBJ LINE SOURCE 0000 1 org 0000h 0000 E520 2 mov a,20h; 3

0002 600F 4 JZ ZERO

0004 B48000 5 CJNE A , #80H,NEG 0007 4005 6 NEG: JC POSI 0009 7521FF 7 MOV 21H, #0FFH 000C 8007 8 SJMP OVER

000E 752101 9 POSI: MOV 21H, #01H 0011 8002 10 SJMP OVER

0013 F521 11 ZERO: MOV 21H, a 0015 80FE 12 OVER: SJMP $ 13 END 实验步骤及结果记录:

(1) 打开DVCC-598JH实验箱电源。

(2) 启动计算机,运行DVCC-598JH实验系统。 (3) 新建文件、输入程序并保存文件。 (4) 调试程序。

(5) 编译文件。编译无错误,无警告,则通过。

(6) 编译连接传送文件 。 编译 无错误,在DVCC实验系统显示P状态下,按PCDBUG键,显示器全暗。点击:编译连接传送文件至DVCC-598JH实验箱。错误!链接无效。时,数码管闪烁。

(7) 打开内部数据区,将20H单元的值更改为00H运行,观察程序运行情况。 (8) 分别将20H单元的值更改为正数(01H~7FH)、负数(80H~0FFH)运行,观

察程序运行情况。

结果记录: 将20H单元的值更改为00H运行,观察到21H单元的值为00H;

将20H单元的值更改为08H运行,观察到21H单元的值为01H; 将20H单元的值更改为87H运行,观察到21H单元的值为0FFH;

3、将20H~27H中的压缩BCD码拆为两个单字节BCD码,存放在以2000H为首地址的外部RAM中。 实验程序:

MOV R0,#20H CZ: MOV A,@R0 MOV DPTR,#2000H ANL A,#0FH MOV R7,#08H MOVX @ DPTR,A

INC DPTR LL: ACALL CZ

INC R0 MOV A,@R0 INC DPTR SWAP A DJNZ R7,LL ANL A,#0FH SJMP $ MOVX @ DPTR,A

13

RET END

反汇编代码TEXT13.LST

1000 1 org 1000h 1000 7820 2 MOV R0,#20H

1002 902000 3 MOV DPTR,#2000H 1005 7F08 4 MOV R7,#08H 1007 110F 5 LL:ACALL CZ 1009 08 6 INC R0 100A A3 7 INC DPTR 100B DFFA 8 DJNZ R7,LL 100D 80FE 9 SJMP $

100F E6 10 CZ: MOV A,@R0 1010 540F 11 ANL A,#0FH 1012 F0 12 MOVX @ DPTR,A 1013 A3 13 INC DPTR 1014 E6 14 MOV A,@R0 1015 C4 15 SWAP A

1016 540F 16 ANL A,#0FH 1018 F0 17 MOVX @ DPTR,A 1019 22 18 RET 19 END

实验步骤及结果记录:

实验步骤:

(1) 新建文件、输入程序并保存文件。 (2) 按F9键调试程序。

(3) 按Ctrl+F9键编译链接并传送文件至DVCC-598JH实验箱。

(4) 打开内部数据区,更改从20H单元的8个数据,观察程序运行情况。 (5) 打开外部数据区,观察从2000H开始的16个单元数据,检查运行结果的正确性。

结果记录: 20H 21H 22H 23H 24H 25H 26H 27H 给定值 87H 54H 36H 23H 19H 43H 77H 69H 2000H 2002H 2004H 2006H 2008H 200AH 200CH 200EH 观察值 07H 04H 06H 03H 09H 03H 07H 09H 2001H 2003H 2005H 2007H 2009H 200BH 200DH 200FH 观察值 08H 05H 03H 02H 01H 04H 07H 06H 五、实验结果讨论

1、 数在计算机中是以 补 码形式存放的,因此,判断数据的正负,往往采用判断第 7 位,是 0 则为正数,是 1 则为负数。

2、 实验内容2方法一中JZ ZERO 的机器码为 600DH ,其中 0DH 为偏移量,当前PC值 0004H 加上这个偏移量等于 0011H ,这正是即将执行的程序的首地址,即标号为 ZERO 语句。程序计算器PC的功能是 存储将要执行的指令地址,实现程序的转移 ,因此,跳转语句是依靠 偏移量的变化 来改变程序计算器PC的值,从而改变程序的流向。

3、 指令CJNE不仅可以判断数据是否相等,还可以通过CY的值,判断数据的大小,当CY=1,则左操作数 小于 右操作数,CY=0,则左操作数 大于 右操作数。

4、 分支程序一定要注意分支的语句标号的正确性,每一分支之间必须用 条件转移 指令分隔,并跳转到同一标号。

5、 子程序往往用 间址寄存器 传递数据,内部RAM用 @Ri ,外部RAM用 @DPTR ,绝对不能用直接地址。最后以 RET 结尾。

14

6、循环程序往往用 寄存器 传递数据,用R7控制循环 次数 ,用调用 子程序 作为循环体,用指令 INC 修改 地址指针 ,用指令 DJNZ 判断循环 结束 。 7、执行ACALL前(SP)= 07H ,执行ACALL时,(SP)= 09H,(08H)= 09H, (09H)= 00H,(PC)= 000FH ,PC的值正是子程序的 入口地址 ,而堆栈中这两个单元存放的是 断点处PC的值 ;执行到RET后,(SP)= 07H , 原08H的值弹给 (PC)7~0 ,原09H的值弹给 (PC)15~8 ,因此,返回断点继续执行主程序。

15


单片机实验教案 - 图文(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:中职计算机应用能力考试题解(Office办公软件)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: