单片机实验一片内外清零、数据块的传送
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机实验报告
专业:电子信息工程
班级:
姓名:
学号:
指导教师:
单片机实验报告
实验项目名称:片内外清零、置位和数据块传送程序
实验日期: 2010-10-27 实验成绩:
实验评定标准:
1)实验内容否完整A()B()C()2)实验结果分析是否正确A()B()C()3)实验报告是否按照规定格式A()B()C()
一、实验目的
1、掌握汇编语言中对芯片内外存储器的清零,置位。
2、掌握8031 内部RAM 和外部RAM 之间的数据传送方法;掌握这两部分RAM 存贮器的特点与应用,掌握各种数据传送方法。
二、实验内容及要求
1、将片内从50H开始的连续30个地址内容清零;
将片外7000H_79FFH单元内容清零;
将片内从20H开始的连续30个地址内容设置为0FEH。
2、试编写将外部的数据存贮区6030~607FH 的内容写入外部RAM 3030~307H 中。
三、实验步骤
1、片内外清零、置位
打开Keil程序,执行菜单命令“Project”→“New Project ”创建“片内外清零置位”项目,并选择单片机型号为AT89C51。
执行菜单命令“File”→“New ”创建文件,输入源程序,保存为“片内外清零置位.A51”。
在“Project”栏的File项目管理窗口中右击文件组,选择“Add Files to Group ‘Source Group1’”将源程序“片内外清零置位.A51”添加到项目中。
执行菜单命令“Project”→Options for Target ‘Target 1’”,在弹出的对话框中选择“Output”选项卡,选中“Greate HEX File”。
执行菜单命令“Project”→“Build Target 1”,编译源程序。
如果编译成功,则在“Outp ut Window”窗口中显示没有错误,并创建了,“片内外清零置位. HEX”文件。
执行菜单命令“Debug”→“Start/Stop Debug Seesion”,按键F11键,单步运行程序。
在“Memory”窗口的“Address”栏中键入“D:20H”或“D:50H”或“X:7000”可看出20H—3EH单元,50H-6EH,7000H-70FFH的内容变化置。
2、数据块传送程序
打开Keil程序,执行菜单命令“Project” “New Project”创建“数据块传送”项目,并选择单片机型号为AT89C51。
执行菜单命令“File” “New”创建文件,输入源程序,保存为“数据块传送.A51”。
在“Project”栏的File项目管理窗口中右击文件组,选择“Add Files to Group ‘Source Group1’”将源程序“数据块传送.A51”添加到项目中。
执行菜单命令“Project” “Options for Target ‘Target 1’”,在弹出的对话框中选择“Output”选项卡,选中“Greate HEX File”。
执行菜单命令“Project” “Build Target”,编译源程序。
如果编译成功,则在“Output Window”窗口中显示没有错误,并创建了“数据块传送.HEX”文件。
执行菜单命令“Debug” “Start/Stop Debug Seesion”,按F11键,单步运行程序。
将在40~4Fh 数据单元中分别送数,例如:1,2,3,4,…等16 个数据。
单步运行(断点设在BP2,程序运行至断点),检查外部RAM(7E00~7F0FH)数据是16 个数据传送到40~4F,单元(40)~(4FH)传送到7E00~7E0FH是否与40~4FH 数据一一对应。
如果程序运行不能进入某一断点,则应单步、断点分段检查程序,排除错误直至
正确为止。
四、主要代码
1、片内外清零、置位
ORG 0000H
AJMP 0030H
ORG 0030H
MOV R0,#30
MOV R1,#50H CLEAR: CLR A
MOV @R1,A
INC R1
DJNZ R0,CLEAR
MOV R0,#0D8H
MOV R1,#20H SETD: MOV A,#0FEH MOV @R1,A
INC R1
INC R0
CJNE R0,#00H,SETD
MOV R0,#00H
MOV DPTR,#7000H CLEAR2: CLR A
MOVX @DPTR,A
INC DPTR
INC R0
CJNE R0,#00H,CLEAR2
SJMP $
END
(2)、数据块传送
ORG 0000H AJMP 0020H ORG 0020H MOV 30H,#00H MOV 31H,#01H MOV 32H,#02H MOV 33H,#03H MOV 34H,#04H MOV 35H,#05H MOV 36H,#06H MOV 37H,#07H MOV 38H,#08H MOV 39H,#09H MOV 3AH,#0AH MOV 3BH,#0BH
五、实验结果分析及思考
1. 片内外清零、置位 (1)仿真结果:
片内从50H 开始的连续30个地址内容清零:
MOV 3CH,#0CH MOV 3DH,#0DH
MOV 3EH,#0EH MOV 3FH,#0FH MOV R0,#30H MOV DPTR,#7E00H MOV R1,#0FH LP: MOV A,@R0
MOVX @DPTR,A INC R0 INC DPTR DJNZ R1,LP SJMP $ END
片内20H开始的连续30个地址内容为0FEH:
片外7000H-70FFH单元内容清零:
(2)仿真结果分析:
程序输完之后,编译没有错误之后,执行菜单命令“Debug”中的“Start/Stop Debug Seeing”,在“Memory”窗口的“Address”栏中键入“D:20H”、“D:50H”或“X:7000”。
按F11键,单步运行程序,在Address窗口里面可以看出片内从20H开始的连续30个地址内容全部变为0FEH,片内50H开始的连续30个地址内容全部变为0,片外7000H—70FFH 单元内容也全部变为零。
实验结果与实验所要求的一致。
(3)思考:
将所有单元送入06H:
ORG 0030H
MOV R0, #30H MOV R1, #50H MOV R2, #06H LOOP: MOV A, @R1 MOV @R2, A INC R1
INC R2
DJNZ R0,LOOP
将7000H-70FFH各单元分别依次送入00H至FFH:
MOV R0, #FFH
MOV R1, #7000H
MOV R2, #00H
LOOP: MOV A, @R1
MOV @R2, A
INC R1
INC R2
DJNZ R0,LOOP
2、数据块传送
思考程序如下:
ORG 0000H
AJMP 0020H ORG 0020H MOV 30H,#00H MOV 31H,#01H MOV 32H,#02H MOV 33H,#03H MOV 34H,#04H MOV 35H,#05H MOV 36H,#06H MOV 37H,#07H MOV 38H,#08H MOV 39H,#09H MOV 3AH,#0AH MOV 3BH,#0BH
MOV 3CH,#0CH
MOV 3DH,#0DH
MOV 3EH,#0EH
MOV 3FH,#0FH
MOV R0,#6030H
MOV DPTR,#3030H
MOV R1,#4FH LP: MOV A,@R0
MOVX @DPTR,A
INC R0
INC DPTR
DJNZ R1,LP
SJMP $
END。