单片机实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汇编语言程序设计
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
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 21H 22H 23H 24H 25H 26H 27H
87H 54H 36H 23 19H 43H 77H 69H 2000H 2002H2004H2006H2008H200AH200CH200EH
07H 04H 06H 03H 09H 03H 07H 09H 2001H 2003H2005H2007H2009H200BH200DH200FH
08H 05H 03H 02H 01H 04H 07H 06H
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 ,因此,返回断点继续执行主程序。
结论:掌握顺序结构程序设计。
掌握分支结构程序设计。
掌握控制转移类指令。
掌握子程序设计。
基本指令实验
程序执行结果
MOV R0, #30H (R0)=30H
MOV A , @R0 (A)=07H
MOV A , R0 (A)=30H
MOV 31H, 30H (31H)=07H
MOV 32H, #30H (32H)=30H
INC @R0 (30H)=08H
MOV 31H, @R0 (31H)=08H
MOV DPTR, #0010H (DPTR)=0010H
MOVX A, @DPTR (A)=01H
MOVC A, @A+DPTR (A)=93H
SWAP A (A)=39H
XCHD A, @R0 (A)=38H(30H)=09H
PUSH ACC (SP)=08H ((SP))=38H
PUSH 07H (SP)=09H ((SP))=15H
POP ACC (A)=15H (SP)=08H
POP 07H (R7)=38H (SP)=07H
MOV A,R7 (A)=15H
END
内部RAM之间数据传送用指令MOV ,内部RAM与外部RAM之间数据传送只能使用MOVX指令,且必须通过累加器A传送;内部RAM与外部ROM之间数据传送只能使用指令MOVC ,且必须通过累加器A传送;但只能由外部ROM向内部RAM单向传送。