1、用程序实现c=a2+b2,假设a、b、c分别存放于单片机片内RAM的30H、31H、32H三个单元。主程序通过调用子程序“SQR”用查表方式分别求得a2 和b2的值,然后进行相加得到最后的c值。利用Keil软件完成工程的建立、代码编译和调试功能
ORG 0000H;
START: LJMP MAIN
ORG 0030H
MAIN: MOV 30H,#03
MOV 31H,#04
MOV A,30H
LCALL SQR
MOV R1,A
MOV A,31H
LCALL SQR
ADD A,R1
MOV 32H,A
WAIT: SJMP $
ORG 0F00H
SQR: MOV DPTR,#TAB
MOVC A,@A+DPTR
RET
TAB: DB 0,1,4,9,16
DB 25,36,49,64,81
END
可以得到32H存放的是十六进制数19(转换为十进制为25),则程序正确。
2、通过Keil单步仿真如下汇编程序,截图并写出每一步执行后的结果:
ORG 0000H
START:
MOV 40H,#08H
MOV R1,#40H
MOV A,@R1
RL A
MOV R0,A
RL A
RL A
ADD A,R0
MOV @R1,A
RET
END
可以得到40H存放的是50H,则每一步执行正确
3、通过汇编语言实现软件延时10ms的子程序。
START:
MOV P1,#0FFH
LCALL DELAY
MOV P1,#0FEH
DELAY: MOV R0,#10
DL2: MOV R1,#7DH
DL1: NOP
NOP
DJNZ R1,DL1
DJNZ R0,DL2
RET
END
4、利用汇编语言的延时子程序实现单片机P2口循环点亮8个LED灯。先使用Keil软件进行编译和仿真,需要对仿真时序进行截图。然后使用Proteus软件进行仿真。
ORG 0000H
SJMP MAIN
ORG 0040H
MAIN: MOV A,#001H
LOOP: MOV P1,A
LCALL DELAY
RL A
AJMP LOOP
DELAY: MOV R0,#0FFH
DL2: MOV R1,#0FFH
DL1: NOP
NOP
DJNZ R1,DL1
DJNZ R0,DL2
RET
END
仿真图:
|