单片机实验报告 二
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机实验报告二
班级:信息工程(微波通信方向)
姓名:肖丽学号:1195111040
时间:2013.10.29地点:工学院单片机实验室
实验题目:第三章课后习题练习
一、实验目的
1. 掌握Keil集成开发环境基本使用方法;
2. 掌握学林51mini仿真器和下载(编程)器的基本使用方法。
二、实验主要仪器及环境:
硬件:学林51mini仿真器和下载(编程)器
软件:Keil Vision2、XLISP
三、实验内容
P85.6、8、P77有关的极值排序的程序
四、实验步骤
1.将P85.6修改存到自己的文件内,用软件仿真。
2.编写P85.8的程序,然后存到自己的文件里,用软件仿真。
3.编写P77有关的极值排序的程序,然后存到自己的文件里,用软件仿真。
五、实验流程框图、实验程序
P85.6已知程序执行前有A=02H,SP=42H,(41H)=FFH,(42H)=FFH。下述程序执行后, A=(80H);SP=(42H);(41H)=(50H);(42H)=(80H);PC=(001EH)。ORG 0000H
MOV A,#02H
MOV SP,#42H
MOV 41H,#0FFH
MOV 41H,#0FFH
POP DPH
POP DPL
MOV DPTR,#3000H
RL A
MOV B,A
MOVC A,@A+DPTR
PUSH ACC
MOV A,B
INC A
MOVC A,@A+DPTR
PUSH ACC
SJMP $
ORG 3000H
DB 10H,80H,30H,80H,50H,80H
END
P85.8试编写程序,查找在内部RAM的20H~40H单元中出现“00H”这一数据的次数。并将查找到的结果存入41H单元。
ORG 0000H
START: MOV 41H,#00H
MOV R0,#20H
MOV R2,#21H
LOOP: MOV A,@R0
JNZ NEXT
INC 41H
NEXT: INC R0
DJNZ R2,LOOP
SJMP $ END
数据升序排序
ORG 0000H MOV 30H,#14H MOV 31H,#13H MOV 32H,#12H MOV 33H,#11H MOV 34H,#10H MOV 35H,#0FH MOV 36H,#0EH MOV 37H,#0DH MOV 38H,#0CH MOV 39H,#0BH MOV 3AH,#0AH MOV 3BH,#09H MOV 3CH,#08H MOV 3DH,#07H MOV 3EH,#06H MOV 3FH,#05H MOV 40H,#04H
MOV 42H,#02H
MOV 43H,#01H
SORT:MOV R0,#30H
MOV R7,#13H
CLR TR0
LOOP:MOV A,@R0;A=R0
MOV 45H,A;45H=A
INC R0;R0=R0+1
MOV 44H,@R0;44H=R0
CLR C;C清0
SUBB A,@R0;(A)-((R0))-C=A
JC NEXT;C为1跳NEXT
MOV @R0,45H;(R0)=(45H)
DEC R0;R0=R0-1
MOV @R0,44H;(R0)=(44H)
INC R0;R0=R0+1
SETB TR0;TR0置1
NEXT:DJNZ R7,LOOP ;R7-1不等于0,跳LOOP
JB TR0,SORT;TR0=1,跳SORT
HERE:SJMP $
END
六、实验及程序的分析和讨论
P85.6
注释结果
ORG 0000H;汇编语言源程序的开始,通常都用一条ORG伪指
令规定程序的起始地址,目标程序从0000H开始
MOV A,#02H;02H→A (A)=02H
MOV SP,#42H;42H→SP (SP)=42H
MOV 41H,#0FFH;FFH→41H (41H)=FFH
MOV 42H,#0FFH;FFH→42H (42H)=FFH
POP DPH;((SP))→DPH,(SP)-1→SP (DPH)=(42H)=FFH,(SP)=41H
POP DPL;((SP))→DPL,(SP)-1→SP (DPL)=(41H)=FFH,(SP)=40H
(DPTR)=FFFFH
MOV DPTR,#3000H; #3000H→ DPTR (DPTR)=3000H
RL A;A的8位向左循环移动,位7循环移入位0 (A)=04H
MOV B,A;A→B (B)=04H
MOVC A,@A+DPTR; (DPTR)+(A)→A (A)=3004H
PUSH ACC;(SP)+1=41H→SP,A→41H (SP)=41H,(41H)=(3004H)
MOV A,B;B→A (A)=04H
INC A;(A)+1→A (A)=05H
MOVC A,@A+DPTR; (DPTR)+(A)→A (A)=3005H
PUSH ACC;(SP)+1=42H→SP,A→42H (SP)=42H,(42H)=(3005H)
HERE:SJMP HERE;
ORG 3000H;汇编语言源程序的开始,通常都用一条ORG伪指
令规定程序的起始地址,目标程序从3000H开始
DB 10H,80H,30H,80H,50H,80H;DB用于从指定的地址开始, (3000H)=10H
在程序存储器的连续 (3001H)=80H
(3002H)=30H
(3003H)=80H
(3004H)=50H
(3005H)=80H
END
P85.8
注释结果
ORG 0000H;汇编语言源程序的开始,通常都用一条ORG伪指
令规定程序的起始地址,目标程序从0000H开始
START: MOV R0,#20H; #20H→R0R0=20H
MOV R2,#21H; #21H→R2R0=21H
MOV 41H,#00H; #00H→41H41H=00H
LOOP: MOV A,@R0;((R0))→A A=(20H)
JNZ NEXT;若A=00H,则顺序执行,否则转移到LOOP1
INC 41H;(41H)+1→41H
NEXT: INC R0; (R0)+1→R0
DJNZ R2,LOOP;R2减1不为0,则跳LOOP处继续循环
SJMP$;
END
数据升序排序
注释结果
ORG 0000H;汇编语言源程序的开始,通常都用一条ORG伪指
令规定程序的起始地址,目标程序从0000H开始
MOV 30H,#14H;14H→30H (30H)=14H
MOV 31H,#13H;13H→31H (31H)=13H
MOV 32H,#12H;12H→32H (32H)=12H
MOV 33H,#11H;12H→33H (33H)=11H
MOV 34H,#10H;10H→34H (34H)=10H
MOV 35H,#0FH;0FH→35H (35H)=0FH
MOV 36H,#0EH;0EH→36H (36H)=0EH
MOV 37H,#0DH;0DH→37H (37H)=0DH