单片机原理及接口技术实验报告.docx
- 文档编号:10463831
- 上传时间:2023-02-13
- 格式:DOCX
- 页数:19
- 大小:277.05KB
单片机原理及接口技术实验报告.docx
《单片机原理及接口技术实验报告.docx》由会员分享,可在线阅读,更多相关《单片机原理及接口技术实验报告.docx(19页珍藏版)》请在冰豆网上搜索。
单片机原理及接口技术实验报告
成绩:
计算机原理实验室实验报告
课程:
单片机原理及接口技术
姓名:
专业:
计算机科学与技术
学号:
1
日期:
2014年6月
计算机工程系
实验一:
拆字程序实验
实验环境
PC机+Win2003+Medwin
实验日期
2014.4.30
一.实验内容
1.熟悉51仿真系统
2.设计并单步调试实现将R5中一字节数拆分成两位独立的数据分别存于R6,R7中
3.将R6,R7中的一位HEX数据转换为输出ASCII编码
二.理论分析或算法分析
(1)基本要求的描述
在这次实验中,要将R5中存的一字节数拆分成两个独立的数据,主要用到是逻辑运算符中的与功能,进而取得高字节和低字节的数,将R5的数和0f0h进行与取得高字节,和0fh与取得低字节的数,进而将它们分别存于R6、R7中。
(2)扩展要求的描述
在扩展要求中,要求将高低字节的数据转换成ASCII码值,首先先运用操作符subb将高低位字节与0Ah进行比较,根据CY的值来判断高低字节的数据是否在0到9之间,若在则在它们的基础上加上30h即可得到其对应的ASCII码值,否则,若在A到F之间,则需要在它们的基础上加37h即可得到它们对应的ASCII码值。
(3)本实验的基本流程图
三.实现方法(含实现思路、程序流程图、实验电路图和源程序列表等)
(1)源程序代码
org1000h
movr5,#34h
mova,r5
anla,#0f0h
swapa
movr6,a
acallprinta
movr2,a
mova,r5
anla,#0fh
movr7,a
acallprinta
movr3,a
sjmplend
printa:
clrc
movr0,a
subba,#0ah
mova,r0
jch2
adda,#37H
sjmph3
h2:
adda,#30H
h3:
ret
lend:
end
(2)扩展要求的代码为上面程序中的子程序即printa。
四.实验结果分析(含执行结果验证、输出显示信息、图形、调试过程中所遇的问题及处理方法等)
(1)实验结果
其中R5中存的数据为34H,经过功能实现后,R6中存的数据是高字节数据为03H,而R7中存的数据为04H,将它们转换成ASCII码值后,R2中存的数据为高字节的ASCII码值,而R3中存的数据为低字节的ASCII码值。
(2)在本次实验中验证了拆字程序实验,实现了将R5中的一字节数据拆分成两个独立的数据以及将它们分别转换成ASCII码值的功能.
(3)思考题
分析BIN,HEX,BCD,ASCII等不同编码的数学意义及表现形式上的异同.
答:
bin在数字上表示的是二进制,其数值为0和1,是计算机中的最小的存储单位;而HEX表示的是十六进制,其数值范围为0到9、A到F,便于在计算机中进行计算;ASCII是单字节编码系统,定义字符表示;而BCD码是用来解决二进制和十进制之间的一些转换。
五.结论
通过本次本次实验学会了如何用单片机语言来进行写程序,以及如何取得一个字节中的高低字节的数据,同时也明白如何将它们转化成ASCII码值,从而进一步的了解单片机语言与高级语言的不同;另外还进一步的了解51系列的编写软件环境,了解了如何运用环境来编写程序以及运用程序。
对单片机的RAM与ROM的使用有了更加透彻的理解,为以后基于汇编的单片机程序开发打下坚实的基础。
实验二:
分支程序实验
实验环境
PC机+Win2003+Medwin
实验日期
2014.5.9
一.实验内容
1.掌握51汇编语言调试技巧
2.实现三个数(R5,R6,R7)中找出最大和最小值,最大值存到R3,最小值存到R4
3.将数据从R5,R6,R7改为内部数据存储器30H开始的连续多个数据
二.理论分析或算法分析
(1)基本要求的描述
在本次实验中,首先分别为寄存器R5、R6、R7进行赋值,然后将R5中的值赋予寄存器A,而R6、R7的值分别给予数据区中的某一地址,以便运用操作符CJNE;然后运用CJNE进行判断R6和R7中的值的大小,若相等,则进行判断和R7中值的大小;若不等,则跳转到某处,利用标志位CY的值进行判断大于还是小于,将最大值赋予寄存器A,然后再次运用CJNE进行判断A和R7的值的大小,同样不等进行跳转,并根据CY进行判断大小,最后将最大值赋予R3即可。
(2)扩展要求的描述
在扩展要求中,基本同基本要求相似,只需要修改将立即数分别赋给数据区中地址为30H、31H、32H等,然后运用CJNE进行比较即可。
(3)本实验的流程图
三.实现方法(含实现思路、程序流程图、实验电路图和源程序列表等)
(1)基本要求的源程序代码
org2000h
movr5,#31h
movr6,#40h
movr7,#21h
mov50h,r6
mov51h,r7
mova,r5
cjnea,50h,h1
movr3,a
movr4,a
ajmph5
h1:
jch2
movr3,a
movr4,50h
ajmph5
h2:
movr4,a
movr3,50h
ajmph5
h3:
jch4
movr3,a
movr4,51h
ajmplend
h4:
movr4,a
movr3,51h
ajmplend
h5:
mova,r3
cjnea,51h,h3
lend:
end
(2)扩展要求的关键代码
mov30h,#21h
mov31h,#34h
mov32h,#23h
还有有关操作符CJNE的分别改成:
cjnea,31h,h1和cjnea,32h,h3,还有将基本要求的代码中有关的存放的地址改成现在的地址即可。
四.实验结果分析(含执行结果验证、输出显示信息、图形、调试过程中所遇的问题及处理方法等)
(1)验证了判断三个数的最大值和最小值,,实现了数据存放到连续的地址中进行比较大小的功能.
(2)基本要求中的实验结果
R5、R6、R7中分别存放的三个数据,通过运行之后,其R3中存放的为最大值,R4中的最小值。
(3)扩展要求的实验结果
数据区中存放的数据为:
经过运行后,其结果为:
其中R3为最大值,R4为最小值。
(4)思考题
思考如果数据保存在外部数据存储器中应该如何解决?
若数据保存在外部数据存储器中,首先需要运用MOVX将外部数据送到寄存器中,进而再比较数据。
五.结论
通过本次试验学会了如何使用操作符CJNE以及CY进行数据的比较大小,同时还学会了如何查看数据区的内容,进一步熟悉了51仿真系列的软件,也进一步的加深了如何使用汇编语言进行编写程序。
实验三:
循环程序实验
实验环境
PC机+Win2003+midwen
实验日期
2014.6.2
一.实验内容
1.掌握排序算法
2.实现对五个字节数据从大到小排序
3.实现两种不同的排序算法,并比较各自的排序效率
二.理论分析或算法分析
(1)基本要求的描述
在本次实验中,进行排序运用是用CJNE、JCY和DJNZ命令来实现的。
其思想是先进行第一个数据和其它四位数据进行比较,得出最大值并将其放到第一个数据的位置;然后现在的第二个数据和剩余的三个数据进行比较,得出最大值并将其放到第二个数据的位置;然后再分别进行第三个数据和第四个数据对其后面的数据进行比较。
从而可知,其排序过程中运用了两次循环,内循环是用来控制当前数据和其它数据的进行比较,而外循环用来改变当前的位置。
比较运用的命令是CJNE和判断标志位CY的值;内外循环主要运用的命令是DJNZ,其内外循环次数不一致。
(2)其基本要求的流程图如下:
(3)扩展要求的描述
在扩展要求中,排序的思想是每相邻的两个数据进行比较,通过第一次比较把最小的值放到数据区的最后面,然后再进行新一轮的比较,即每次比较都是把小的值挑选出来放到后面,通过内外循环,最后即可得到从大到小的排列值。
(4)其扩展要求的流程图如下:
三.实现方法(含实现思路、程序流程图、实验电路图和源程序列表等)
(1)基本要求的代码:
movr0,#30h
movr6,#04h
h3:
movr5,6
mova,@r0
movr1,0
h0:
incr0
movb,@r0
cjnea,b,h1
sjmph2
h1:
jnch2
xcha,@r0
h2:
djnzr5,h0
mov@r1,a
incr1
movr0,1
djnzr6,h3
sjmp$
end
(2)扩展要求的关键代码:
同基本要求相比,其更改的部分如下:
h3:
movr5,6
mova,@r0
movr1,0
movr2,0
h0:
incr0
movb,@r0
cjnea,b,h1
sjmph2
h1:
jnch2
xcha,@r0
mov@r1,a
incr1
mova,@r0
h2:
djnzr5,h0
movr1,2
movr0,2
djnzr6,h3
四.实验结果分析(含执行结果验证、输出显示信息、图形、调试过程中所遇的问题及处理方法等)
(1)验证了循环程序,实现了对5个数据从大到小的排列的功能.
(2)基本要求的实现结果如下:
如对21,11,34,56,78,33这5个数据进行排序,
经实验运行后的程序如下:
(3)扩展要求的实现结果如下:
如对数据为:
21,34,55,66,77,34这5个数据进行排序:
经过实验后,其结果如下:
(3)思考题
思考是否可以实现快速排序,该怎样实现
可以实现快速排序,在实现中,首先取数据区的一个数据进行参照,然后从数据区中按顺序与参照数据进行对比,比它小的放到它位置的前面,比它大的数据放到它的后面,然后再按这个思路进行它左边数据的排序和右边数据的排序,进行循环,直到左右数据剩下一个数据为止。
五.结论
通过本次试验学会了如何在该环境中进行排序,也学会了如何运用CJNE和DJNZ的命令来实现数据的排序,并且同时复习了排序的几种不同的算法,进一步的巩固了所学到的基础知识。
实验四:
子程序递归实验
实验环境
PC机+Win2003+medwin
实验日期
2014/6/6
一.实验内容
1.掌握子程序设计及调用
2.通过子程序递归实现求阶乘
3.编程找到51可以直接乘法求阶乘的最大值
二.理论分析或算法分析
(1)基本要求的描述
在本次实验中,运用子程序来实现求阶乘。
在主程序中,首先进行保护现场,再将数字赋予累加器A,然后定义这个数减1的数存于B中,最后定义相乘的次数,然后定义一个标志位,里面调用子程序,然后运用循环命令DJNZ进行循环,不为零时一直调用子程序,当循环次数为零时,恢复现场,结束主程序;而在子程序中,将A和B中的进行相乘,然后将B中进行减1操作,返回主程序。
(2)基本要求的流程图
(3)扩展要求的描述
同基本要求相比,本次实验中多次跳转,在主程序中,首先进行从数字1开始求阶乘,并定义一个标志位,然后进行将数加1操作,然后定义A、B和循环次数,同上面的操作一样,在循环里进行子程序,只不过在循环之后,进行判断标志位OV的值是否溢出,用JB命令进行判断,若溢出,则结束,否则跳转主程序开始处,进行求数字加1操作的阶乘。
(4)扩展要求的流程图
三.实现方法(含实现思路、程序流程图、实验电路图和源程序列表等)
(1)基本要求的代码:
pushacc
pushb
mova,#04h
movr1,#04h
decr1
movr0,1
movb,r1
loop:
acallh1
djnzr0,loop
movr3,a
popb
popacc
sjmpled
h1:
mulab
decr1
movb,r1
ret
led:
end
(2)扩展要求的代码:
movr4,#01h
h0:
incr4
mova,r4
movr1,a
decr1
movr0,1
movb,r1
loop:
acallh1
djnzr0,loop
movr3,a
jbov,h4
sjmph0
h4:
popr3
sjmpled
h1:
mulab
decr1
movb,r1
ret
led:
end
四.实验结果分析(含执行结果验证、输出显示信息、图形、调试过程中所遇的问题及处理方法等)
(1)验证了调用子程序实现求阶乘的功能,实现了在51环境中能进行求最大阶乘积的最大值。
.
(2)基本要求的实现结果
假设求数字4的阶乘,即其阶乘和为:
4*3*2*1=24=18H.在本次实验中,最后将阶乘积赋予给R3中。
所以实现结果中,R3中的值为18H,并且最后通过恢复现场后,累加器A和B的值都为0.
(3)扩展要求的实验结果
在这次实验中,首先先求2的阶乘,然后在其基础进行加1求阶乘。
同样每次后的阶乘积存于R3中,而R4中存于的是当前进行求数字几的阶乘积。
所以通过以下观察,R4中的数值为6,所以进行求6的阶乘时,A中的值进行溢出,所以在51环境中,阶乘积的最大值是求5的阶乘,其阶乘积的最大值为78H,即存于R3中。
(4)思考题
观察并思考递归过程中的栈
通过观察可知,先进入栈中数据在栈中底部,后进入的数据在上面,当进行恢复现场时,后进入的数据先出栈。
五.结论
通过本次试验学会了如何进行子程序的编写以及如何在主程序进行调用子程序,同时也学会如何进行保护现场和恢复现场。
同时也明白子程序的运用和设计,此外,还学会了如何进行求在该环境中所求的阶乘积的最大值,进一步的巩固了所学到的基本知识,也通过实践进一步的提高了动手能力,加深了对知识的理解。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 原理 接口 技术 实验 报告