单片机实验报告 下载本文

内容发布更新时间 : 2024/10/20 16:45:33星期一 下面是文章的全部内容请认真阅读。

单片机实验报告

汇编语言程序设计

1)编译后,系统提示: 目标越界 ,改为AJMP后编译通过,将ORG 07FFH改为0800H, 系统提示: 目标越界 ,这说明AJMP可以在 2KB 范围内无条件转移。

2.改为LJMP编译通过,这说明LJMP可以在 64KB 范围内无条件转移。

3.将LJMP LP1改为SJMP LP0,机器码为 80FC ,其中 FC 为偏移量,它是 一个 补 码,01H~7FH说明向PC(增大√、减小)方向跳,80H~FFH说明向PC(增

大、减小√)方向跳,这说明SJMP可以在当前PC值 -128B~+127B 范围内无条件转移。

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

实验程序: MOV A,20H JZ ZREO

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

ZREO:MOV 21H,A SJMP PEND

NEG:MOV 21H,#0FFH PEND:SJMP$ END

结果记录:

1.将数89H存放于20H中,运行程序,观察到21H单元中的内容为FF; 2.将数05H存放于20H中,运行程序,观察到21H单元中的内容为01; 3.将数00H存放于20H中,运行程序,观察到21H单元中的内容为00;

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

实验程序:

MOV R0,#20H MOV R7,#08H

MOV DPTR,#2000H LOOP:ACALL CZ INC R0

1 / 8

单片机实验报告

INC DPTR DJNZ R7,LOOP SJMP $ CZ:MOV A,@R0 SWAP A

ANL A,#0FH MOVX @DPTR,A INC DPTR MOV A,@R0 ANL A,#0FH MOVX @DPTR,A RET END 结果记录: 20H 87H 2000H 07H 2001H 08H

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

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

3、分支程序一定要注意分支的语句标号的正确性,每一分支之间必须用 跳转(如SJMP) 指令分隔,并跳转到相应标号。

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

5、循环程序往往用 寄存器 传递数据,用R7控制循环 次数 ,用调用 作为循环体,用指令 INC 修改 地址指针 ,用指令 DJNZ 判断循环 结束 。

6、执行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 ,因此,返回断点继续执行主程序。

2 / 8

21H 54H 2002H 04H 2003H 05H 22H 36H 2004H 06H 2005H 03H 23H 23 2006H 03H 2007H 02H 24H 19H 2008H 09H 2009H 01H 25H 43H 200AH 03H 200BH 04H 26H 77H 200CH 07H 200DH 07H 27H 69H 200EH 09H 200FH 06H 单片机实验报告

结论:掌握顺序结构程序设计。 掌握分支结构程序设计。 掌握控制转移类指令。 掌握子程序设计。

基本指令实验

程序 MOV R0, #30H MOV A , @R0 MOV A , R0 MOV 31H, 30H MOV 32H, #30H INC @R0 MOV 31H, @R0 MOV DPTR, #0010H 执行结果 (R0)=30H (A)=07H (A)=30H (31H)=07H (32H)=30H (30H)=08H (31H)=08H (DPTR)=0010H MOVX A, @DPTR (A)=01H MOVC A, @A+DPTR (A)=93H SWAP A XCHD A, @R0 PUSH ACC PUSH 07H POP ACC POP 07H MOV A,R7 END (A)=39H (A)=38H(30H)=09H (SP)=08H ((SP))=38H (SP)=09H ((SP))=15H (A)=15H (SP)=08H (R7)=38H (SP)=07H (A)=15H

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

3 / 8