微机应用系统设计实验一
MOVX @DPTR,A
SJMP $
END
实验二思考题:
(1)如果将数据存储单元2000H-20FFH单元内容改写为FFH,该如何实现?
解:
ORG 0000H
LJMPMAIN
ORG 0100H
MAIN:
MOV R0,#00H
MOV A,#FFH ;将立即数FFH存入寄存器A中
MOV DPTR,#2000H ;将立即数2000H装入数据指针DPTR
MOVX A,@DPTR ;片外数据存储传送到寄存器A中
MOV B,A ;将原数保存到寄存器B中
ANL A,#0F0H ;将原数的低四位清零
SWAP A ;循环左移4位,将高四位与低四位互换
INC DPTR
MOVX @DPTR,A ;将原数的高四位存入2001H单元中
MOV A,B
ANL A,#0FH ;将原数的高四位清零
如果2000H中存入12H
运行后2001H单元中为01H,2002H单元中为02H。
清零程序源代码:
调试时,用X:2000H查看外部数据存储器的数据。可以在想查询的行程序设置断点。
每个位置来改变外部数据存储器的值,然后用单步或连续方式运行程序,可以看到2000H---20FFH的数据都被清零。
数据块传送结果:
Loop:
MOV DPTR,#2000H
MOVX A,@DPTR ;片外数据存储传送到寄存器A中
MOV B,A ;将原数保存到寄存器B中
ANL A,#0F0H ;将数的低四位清零
SWAP A ;循环左移4位,将高四位与第四位互换
INC DPTR
MOVX @DPTR,A ;将原数的高四位存入2001H单元中
MOV DPL,R0
MOV DPH,R1
MOVX @DPTR,A
INC R0 ;将目的地址的低位字节自增
INC R7
CJNE R7,#00H,Loop1 ;设置循环,当(R7)=#00H,顺序执行
SJMP $
END
结
果
记
录
及
分
析
拆字程序结果:
调试时,在ADDRESS窗口输入X:2000H查看外部数据存储器的数据。可以设置断点,双击每个位置来改变外部数据存储器的值,然后用单步或连续方式运行程序,可以看到:
调试时,在ADDRESS窗口中输入X:1000H~10FFH里的内容进行修改,可以看到程序执行后依次被赋予2000H开始的数据单元中。将X:1000H内容输入12H,1001H为34H,1002H为56H,10FFH为78H,程序运行后查询X:2000H单元内容为12H,2001H为34H,2002H为56H,
微机应用系统设计学生实验报告
课程名称
微机应用系统设计
实验名称
微机应用系统设计实验
实验教室
实验日期
班级学生姓名实验成绩Fra bibliotek任课教师
(签名)
实验目的
学习仿真软件使用方法;通过编写清零程序、拆字和数据块传送等程序,掌握简单汇编语言设计和调试方法。
实验内容
熟悉dais-MCS51仿真开发系统,通过编写简单的汇编语言程序学习仿真软件的使用。观察编译工具、调试工具、调试窗口、寄存器窗口、存储器窗口的内容及使用方法。
CJNE R0,#00H,LOOP ;设置循环条件,当(R0)=#00H,顺序执行
SJMP $
END
(3)在数据传送过程中,地址总线和数据总线上的数据分别是什么?
答:在数据传输过程中,地址总线上的数据是当前所指向的地址,而数据总线上的数据就是00H。
实验三思考题:
(1)如何用断点方式调试上述程序?
答:编译成功后,点击 进入调试环境,双击关注的语句或者点击 即设为断点。点击 开始单步或连续执行程序,当程序运行到断点处时,程序暂停。
INC DPTR
MOVX @DPTR,A;将原数的低四位存入片外2002H单元中
SJMP $
END
清零程序源代码:
ORG 0000H
LJMPMAIN
ORG 0100H
MAIN:MOV R0,#00H
MOV A,#00H ;将立即数00H存入累加器A中
MOV DPTR,#2000H ;将立即数2000H装入数据指针DPTR
MOV R2,#00H
MOV R3,#10H ;将源地址1000H保存到R3,R2
MOV R0,#00H
MOV R1,#20H ;将目的地址2000H保存到R1,R0
Loop2:
MOV R7,#00H
MOV DPL,R2
MOV DPH,R3 ;将源地址送给数据指针DPTR
MOVX A,@DPTR
INC R2 ;将源地址的低位字节自增
LJMPMAIN
ORG 0100H
MAIN:MOV R0,#00H
MOV A,#00H ;将立即数00H存入累加器A中
MOV DPTR,#2000H ;将立即数2000H装入数据指针DPTR
LOOP:MOVX @DPTR,A ;将累加器A中的内容00H送给((DPTR))
INC DPTR
INC R0
LOOP:MOVX @DPTR,A ;将寄存器A中的内容FFH送给((DPTR))
INC DPTR
INC R0
CJNE R0,#00H,LOOP ;设置循环条件,若(R0)=#00H,顺序执行
SJMP $
END
(2)如果将数据存储单元3000H-30FFH单元内容改写为00H,该如何实现?
解:
ORG 0000H
20FF为78H,完成数据块传送。
收
获
感
想
实验一思考题:
(1)如果将2001H存储单元的低位和2002H单元的低位合并放在2003H单元,其中2001H存储单元的低位放在2003H单元低位,2002H单元的低位放在2003H单元高位,该如何编写程序?
ORG 0000H
LJMPLoop
ORG 0010H
MOV A,B
ANL A,#0FH ;将原数的高四位清零
INC DPTR
MOVX @DPTR,A;将原数的低四位存入2002H单元中
MOV DPTR,#2000H ;再让数据指针DPTR指向2000H单元
MOVX A,@DPTR
SWAP A
MOV DPTR,#2003H ;将原数高低四位互换后存入2003H单元中
实验仪器设备
1. PC机一台;
2.单片机教学实验系统一套。包括Dais-52PH+实验箱一个和Dais—MCS51仿真软件一套。
程
序
流
程
图
、
电
路
图
拆字程序流程图:
清零程序流程图:
数据块传送程序流程图:
源
程
序
清
单
拆字程序源代码:
ORG 0000H
LJMPLoop
ORG 0010H
Loop: MOV DPTR,#2000H
(2)如何察看某个数据单元内容?
答:在ADDRESS窗口中,输入要查询的数据单元地址即可。
感想收获:
通过本次实验,学习到如何能熟练掌握逻辑指令ANL的用法,从而完成清零的功能,同时也熟悉了其他移位指令的用法和使用指令CJNE和利用DPTR的高8位指针DPH和低8位指针DPL完成数据块的传输。如在实验二中,实验目的为2000H-200FFH单元一共256个单元,而在第一次循环时R0=1H,即R0值应从1H-257HH,所以在第256位时R0会溢出返回成00H,否则不能完成2000H-20FFH的清零任务。对外部存储器传送的MOVX指令的使用也有了进一步的了解。通过思考题学到了如何通过更改程序来完成不同的实验目的,主要还是要对程序极为熟练。
LOOP:
MOVX @DPTR,A ;将累加器A中的内容00H送给片外((DPTR))
INC DPTR
INC R0
CJNE R0,#00H,LOOP ;设置循环,若(R0)=#00H,顺序执行
SJMP $
END
数据块传送源代码:
ORG 0000H
LJMP Loop1
ORG 0100H
Loop1:
MOV A,#00H