单片机实验讲义
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一软件实验
1.1 实验目的
通过实验熟悉DAIS软件仿真环境和MCS-51系列单片机指令系统。掌握程序编制、调试方法和技巧。
1.2 实验内容
1、把R1中内容传送至R0中。
2、把内部数据存储器20H单元中的内容传送至内部数据存储器30H单元中。
3、把外部数据存储器2000H单元中的内容传送至内部数据存储器20H单元中。
4、把外部程序存储器2000H单元中的内容传送至内部数据存储器20H单元中。
5、应用MOVC A,@A+PC指令求累加器A的平方值Y(设Y<=255),并把结果送至R7中保存。
6、将(R2R3)和(R4R5)中的双字节无符号数相加,结果存放在40H和41H单元中。
7、设自变量X为一无符号数,存放在内部数据存储器的V AX单元,函数Y存放在FUNC 单元,请编写满足如下关系的程序:
当x>=50时y=x;
当x<50时y=5x。
8、在外部数据存储器从2000H到2030H地址单元中存放有一数据块,请将它们分别传送至3000H单元到3030H单元中。
9、将8051片内的数据存储器20H单元中存放的单字节二进制数,转化为ASCII码,存放在30H31H单元中,(要求将ASCII码转换部分设计为子程序)。
汇编语言程序如下
;1、把R1中内容传送至R0中。
;2、把内部数据存储器20H单元中的内容传送至内部数据存储器30H单元中。
;3、把外部数据存储器2000H单元中的内容传送至内部数据存储器20H单元中。
;4、把外部程序存储器2000H单元中的内容传送至内部数据存储器20H单元中。
org 0000h
mov r1,#22h
mov a,r1 ;1、把R1中内容传送至R0中
mov r0,a
mov 20h,#33h
mov 30h,20h ;2、把内部数据存储器20H单元中的内容传送至内部数据存储器30H单元中
mov dptr,#2000h ;3、把外部数据存储器2000H单元中的内容传送至内部数据存储器20H单元中
mov a,#66h
movx @dptr,a
clr a
movx a,@dptr
mov dptr,#2000h ;4、把外部程序存储器2000H单元中的内容传送至内部数据存储器20H单元中。
clr a
movc a,@a+dptr
sjmp $
org 2000h
db 88h
end
;5、应用MOVC A,@A+dptr指令求累加器A的平方值Y(设Y<=255),并把结果送至R7中保存。
org 0000h
mov a,#3h ;查3的平方值
mov dptr,#tab ;指向平方表的表头
movc a,@a+dptr ;查表指令
sjmp $
tab:db 0,1,4,9,16,25,36,47,64,81,100,121,144,169,196,255;平方表
end
;6、将(R2R3)和(R4R5)中的双字节无符号数相加,结果存放在40H和41H单元中。
org 0000h
clr c
mov r2,#22h
mov r3,#33h
mov r4,#44h
mov r5,#55h
mov a,r3
add a,r5
mov 40h,a
mov a,r2
addc a,r4
mov 41h,a
sjmp $
end
;7、设自变量X为一无符号数,存放在内部数据存储器的V AX单元,函数Y存放在FUNC 单元,请编写满足如下关系的程序:
;当x>=50时y=x;
;当x<50时y=5x。
V AX equ 30H
FUNC equ 40H
org 0000h
mov V AX,#10
mov a,V AX
cjne A,#50,fen1
fen1:jc fen2 ;小于50跳到fen2
sjmp exit1
fen2:mov b,#5
mul ab
exit1:mov func,a
sjmp $
end
;8、在外部数据存储器从2000H到2030H地址单元中存放有一数据块,请将它们分别传送至3000H单元到3030H单元中。
org 0000h
mov dptr,#2000h
mov r2,#31h
loop:movx a,@dptr
mov dph,#30h
movx @dptr,a
inc dpl
mov dph,#20h
djnz r2,loop
sjmp $
end
;9、将8051片内的数据存储器20H单元中存放的单字节二进制数,转化为ASCII码,存放在30H,31H单元中,(要求将ASCII码转换部分设计为子程序)。
org 0000h
mov 20h,#2ah
mov a,20h
anl a,#0fh
acall asc1
mov 30h,a
mov a,20h
anl a,#0f0h
swap a
acall asc1
mov 31h,a
sjmp $
asc1:cjne a,#10,fen1 ;ASCII码转换子程序
fen1:jc fen2
add a,#7h
fen2:add a,#30h
ret
sjmp $
end