单片机实验报告.docx
- 文档编号:29831698
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:17
- 大小:167.17KB
单片机实验报告.docx
《单片机实验报告.docx》由会员分享,可在线阅读,更多相关《单片机实验报告.docx(17页珍藏版)》请在冰豆网上搜索。
单片机实验报告
成绩:
计算机原理实验室实验报告
课程:
单片机原理及接口技术
姓名:
聂建建
专业:
计算机科学与技术
学号:
112054206
日期:
2014年6月10日
太原工业学院
计算机工程系
实验一:
循环程序实验(排序)
实验环境
PC机+Win2003+8051单片机与接口+MedWin中文版
实验日期
2014.04.22
一.实验内容
1.熟悉51仿真系统
2.设计并单步调试实现将R5中一字节数拆分成两位独立的数据分别存于R6,R7中
3.将R6,R7中的一位HEX数据转换为输出ASCII编码
二.理论分析或算法分析
取高四位时将累加器A中的值与0F0H相与(保留高四位,低四位清零),并将结果保存在R6中;取低四位时将累加器A中的值与0FH相与(保留第四位,高四位清零),并将结果保存在R7中。
将R6、R7中的内容分别取出来存放在累加器A中,把A中的内容与9H比较大小,如果小于则加30H,等于则保持不变,大于则加37H,转换成ASCII码,并将结果保存到R6、R7中。
三.实现方法(含实现思路、程序流程图、实验电路图和源程序列表等)
设计并单步调试实现将R5中一字节数拆分成两位独立的数据分别存于R6,R7中,将R6,R7中的数据转换为输出ASCII编码
源程序:
org2000h
mova,#4ah
movr5,a
anla,#0f0h
movr6,a
mova,r5
swapa
anla,#0fh
movr7,a
mova,r6
adda,#0f6h
mova,r6
jncadd1
adda,#07h
add1:
adda,#30h
movr6,a
mova,r7
adda,#0f6h
mova,r7
jncadd2
adda,#07h
add2:
adda,#30h
movr7,a
ret
end
四.实验结果分析(含执行结果验证、输出显示信息、图形、调试过程中所遇的问题及处理方法等)
1.验证了基本要求,实现了单步调试实现将R5中一字节数拆分成两位独立的数据分别存于R6,R7中,将R6,R7中的数据转换为输出ASCII编码的功能.
1)将数据4ah送给寄存器r5
2)将数据4ah的低四位送给r6,将数据4ah的高四位送给r7
3)将低四位的数据转换成ASCII编码输出,将高四位的数据转换成ASCII编码输出
2.思考问题的个人想法,以及算法设想.
分析BIN,HEX,BCD,ASCII等不同编码的数学意义及表现形式上的异同.
BCD码:
十进制的数以二进制形式表示的十进制,常用8421码
HEX文件是可以烧写到单片机中,被单片机执行的一种文件格式,生成Hex文件的方式由很多种,可以通过不同的编译器将C程序或者汇编程序编译生成hex。
Hex文件如果用特殊的程序来查看(一般记事本就可以实现)。
打开后可发现,真个文件以行为单位,每行以冒号开头,内容全部为16进制码。
五.结论
这是学习单片机以来的第一个实验,之前只是听课,觉得很简单,但是当自己亲手去操作的时候,就发现不是自己想的那样。
对单片机有了初步的了解。
对之前的汇编语言也有了一定的理解。
实验二:
分支程序实验
实验环境
PC机+Win2003+8051单片机与接口+MedWin中文版
实验日期
2014.05.09
一.实验内容
1.掌握51汇编语言调试技巧
2.实现三个数(R5,R6,R7)中找出最大和最小值,最大值存到R3,最小值存到R4
3.将数据从R5,R6,R7改为内部数据存储器30H开始的连续多个数据
二.理论分析或算法分析
文字描述以及算法流程图(文字主要描述基本要求和扩展要求的算法流程区别)
首先将R3清零,然后进行(R5)与(R3)减法,若(R5)-(R3)>0,则(R5)>(R3),把(R5)送(R3);否则(R3)保持不变。
再将(R3)分别于(R6)和(R7)比较,比较处理的方法与(R5)与(R3)的比较方法相同,这样比较3次后,R3中的数即为最大值。
其次将R4赋值为FFH,然后进行(R4)与(R5)减法,若(R4)-(R5)>0,则(R4)>(R5),把(R5)送(R4);否则(R4)保持不变。
再将(R4)分别于(R6)和(R7)比较,比较处理的方法与(R5)与(R4)的比较方法相同,这样比较3次后,R4中的数即为最小值。
三.实现方法(含实现思路、程序流程图、实验电路图和源程序列表等)
基本要求源代码,扩展要求关键代码
org2500h
movr3,#00h
movr4,#0ffh
movr5,#11h
movr6,#22h
movr7,#33h
mova,r5
acallcomp
acallcomp1
mova,r6
acallcomp
acallcomp1
mova,r7
acallcomp
acallcomp1
here:
ajmphere
comp:
movr1,a
clrc
subba,r3
jcm1
mova,r1
movr3,a
comp1:
movr2,a
clrc
subba,r4
jncm2
mova,r2
movr4,a
m1:
ret
m2:
ret
四.实验结果分析(含执行结果验证、输出显示信息、图形、调试过程中所遇的问题及处理方法等)
验证了基本要求,实现了.....功能.
给r3,r4,r5,r6,r7赋值
比较大小后最大值存放于R3中,最小值存放于R4中结果:
思考问题的个人想法,以及算法设想.
思考如果数据保存在外部数据存储器中应该如何解决
不可以直接处理.而是通过硬盘读取外部闪存然后CPU直接从硬盘缓冲区读取.是间接的
五.结论
分支结构的程序设计方法的关键在于构造合适的分支条件和分析程序流程,根据不同的程序流程选择适当的分支语句。
完成了本次实验要求的实现三个数(R5,R6,R7)中找出最大和最小值,最大值存到R3,最小值存到R4、将数据从R5,R6,R7改为内部数据存储器30H开始的连续多个数据。
实验内容。
实验三:
循环程序实验(排序)
实验环境
PC机+Win2003+8051单片机与接口+MedWin中文版
实验日期
2014.05.23
一.实验内容
1.掌握排序算法
2.实现对五个字节数据从大到小排序
3.实现两种不同的排序算法,并比较各自的排序效率
二.理论分析或算法分析
选择排序的基本思想:
第i趟简单选择排序是指通过n-i次关键字的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录进行交换。
共需进行i-1趟比较,直到所有记录排序完成为止。
例如:
进行第i趟选择时,从当前候选记录中选出关键字最小的k号记录,并和第i个记录进行交换。
流程图如下:
三.实现方法(含实现思路、程序流程图、实验电路图和源程序列表等)
源程序:
MOVR6,#04H
MOVR0,#40H
L0:
MOVR7,6
MOVA,@R0
movr1,0
L1:
INCR0
MOVB,@R0
CJNEA,B,J1
SJMPJ2
J1:
JNCJ2
XCHA,@R0
J2:
DJNZR7,L1
mov@r1,a
incr1
movr0,1
DJNZR6,L0
SJMP$
END
四.实验结果分析(含执行结果验证、输出显示信息、图形、调试过程中所遇的问题及处理方法等)
验证了基本要求,实现了对五个字节数据从大到小排序的功能.
运行前输入数据:
运行后的排序结果:
思考问题的个人想法,以及算法设想.
思考是否可以实现快速排序,该怎样实现。
可以实现快速排序.
快速排序采用递归调用,每调用一次,正在被排序的当前数组被划分为两个子数组,接下来对两个子数组分别进行快速排序。
排序的过程实际上是在分割数组,直到每个数组的大小为1则结束。
每轮排序前选举数组的任一元素为本轮排序的基准数,一般取数组的第一个元素为基准数,一轮排序结束后,基准数前面的数字都比基准数小,基准数后面的数都比基准数大。
五.结论
平时敲代码,总是对快速排序,选择排序,冒泡排序这些方法的原理总是搞混了。
尝试了一遍之后,又加深了记忆,经常接触,总是没有问题的。
做过实验之后,不仅对选择排序有了理解,对单片机也有了进一步的提高
实验四:
子程序实验(递归)
实验环境
PC机+Win2003+8051单片机与接口+MedWin中文版
实验日期
2014.06.05
一.实验内容
1.掌握子程序设计及调用
2.通过子程序递归实现求阶乘
3.编程找到51可以直接乘法求阶乘的最大值
二.理论分析或算法分析
1.首先将需要求阶乘的数输入到r0中。
2.接着如果r0等于0,则直接输出1,并结束运行。
如果r0不等于0,则r0减1,求r0*a的值。
3.然后将结果的高低位分别保存到r3、r2、r0减1中,计算r0*r2的值保存到r4、r2中,再计算r0*r3的值并加上r4。
4.最后如果r0等于0,则直接输出结果并结束运行;如果r0不等于0,则继续执行上一步,直到r0等于0为止。
三.实现方法(含实现思路、程序流程图、实验电路图和源程序列表等)
源程序:
org2000h
mova,r0;给r0赋初值
cjnea,#1H,Loop1;如果输入值为0或1,则结果恒为1,并保存到r2中
mova,#1H
movr2,a
ajmpLoop2
cjnea,#1H,Loop1
movr2,a
ajmpLoop2
Loop1:
decr0
movb,r0
mulab
movr2,a;暂存乘机的低8位
movr3,b;暂存乘机的高8位
decr0
Loop3:
;不断循环实现阶乘
mova,r0
movb,r2
mulab
movr2,a
movr4,b
mova,r3
movb,r0
mulab
adda,r4
movr3,a
djnzr0,Loop3;当r0=0时,循环结束
Loop2:
nop
四.实验结果分析(含执行结果验证、输出显示信息、图形、调试过程中所遇的问题及处理方法等)
验证了基本要求,实现了通过子程序递归实现求阶乘的功能.
思考问题的个人想法,以及算法设想.
观察并思考递归过程中的栈
栈是一种重要的线性结构。
从数据结构角度看,栈也是线性表,其特殊性在于栈的基本操作是线性表操作的子集,它们是操作受限的线性表。
栈是限定仅在表尾进行插入或删除操作的线性表。
栈还有一个重要的应用是在程序设计语言中实现递归。
一个直接调用自己或通过一系列的调用语句间接的调用直接的函数,称为递归函数
五.结论
通过本次实验,掌握子程序的设计方法,并掌握了内部数据存储器间的比较、传送、转移指令、子程序调用以及返回的使用及编写方法。
本程序是运用递归调用子程序的方法实现来求阶乘,子程序调用其实是相同或相似的一段或几段程序代码不断实现其循环过程,最终实现结果的输出。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 实验 报告