单片机课设Word格式.docx
- 文档编号:16961037
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:15
- 大小:399.89KB
单片机课设Word格式.docx
《单片机课设Word格式.docx》由会员分享,可在线阅读,更多相关《单片机课设Word格式.docx(15页珍藏版)》请在冰豆网上搜索。
三、实验设备:
计算机一台
操作系统:
Win7
应用软件:
WAVE6000
四、实验步骤:
双字节加法流程图
上机调试程序:
ORG0000H
CLRC;
清进位位
MOVR0,#0ACH
MOVR1,#0B8H
MOVR2,#7BH
MOVR3,#89H
MOVA,R0
ADDA,R2
MOVR4,A
MOVA,R1
ADDCA,R3
MOVR5,A;
若Cy=1,则程序转AGG
JCAGG
AGG:
MOVR6,#01H
RET
END
程序单步运行:
查看结果:
五、实验总结:
通过对双字节加法编程的练习,掌握了WAVE6000软件的使用,,学会了双字节加法的程序设计,对汇编语言的程序设计基本方法与基本思路有深入的认识。
实验二:
冒泡排序实验
一、实验目的和要求:
1.熟悉MCS-51指令系统,掌握程序设计方法。
2.掌握排序程序算法。
3.掌握用循环程序实现数据排序的基本方法。
4.根据实验内容,编写C51源程序。
5.上机调试程序,记录相关调试信息。
二、实验内容和原理:
编写并调试一个通用排序子程序,其功能为将RAM的40H~4FH单元16字节无符号二进制整数按从小到大顺序排序,将排序后数据存储于RAM的50H~5FH单元中。
从40H单元的第一个数开始依次和相邻单元的另一个数比较,如果顺序对,则不作任何操作;
如果顺序不对,则将这两个数交换位置。
这样,在完成第1遍n-1次比较后,最大的数到最后,所以第2遍比较只需要比较n-2次,最多作n-1遍比较就可完成排序。
在比较中设立一个标志位flag,每次进入外循环时把flag清零,在内循环结束时若flag=1,说明排序未完成,进入外循环;
若flag=0.说明排序完成,程序结束。
三、主要仪器设备:
计算机一台;
WAVE6000软件
四、上机源程序:
源程序:
LJMPMAIN
ORG40H
MAIN:
MOVR5,#10H
MOVR0,#40H
MOVA,#0H
MOVR1,#0H
MOVR2,#10H
LOOP0:
ACALLLOOP
INCR0
INCR1
DJNZR5,LOOP0
LOOP1:
MOVB,#0FH
LOOP2:
MOVA,@R0
MOV10H,A
MOV11H,@R0
LOOP3:
CJNEA,11H,LOOP4
LOOP4:
JCLOOP5
MOV@R0,10H
DECR0
MOV@R0,A
LOOP5:
DJNZB,LOOP2
DJNZR2,LOOP1
SJMP$
LOOP:
MOVDPTR,#TAB
MOVCA,@A+DPTR
TAB:
DB3,5,4,1,7,9,3,4,6,1,12,45,23,17,34,12
END
五、实验结果与分析:
仿真:
仿真结果:
执行后可见实现了数据由小到大的排序
六、讨论、心得:
这次通过冒泡排序法对一组数据进行了排序,再一次复习了排序的算法,并且利用了查表,以及多层次循环,提高了对程序设计的敏感程度,以及设计能力。
实验三:
子程序及其调用实验
一.实验目的:
(1)熟悉MCS-51指令系统,掌握程序设计方法
(2)掌握子程序的调用算法
(3)掌握查表程序的使用
二.实验设备:
计算机一台WAVE6000软件
三.实验内容:
编写并调试一个通用的求y=a^2+b^2+c^2的程序,其功能为将RAM的10H11H12H单元的无符号二进制整数求平方和,并将结果放在R2内,溢出放在R3内。
四.实验原理提示:
设定一个指针指向地址的起始位10H,在设定计数指针,通过循环,依次调用求一个数平方和的子程序,子程序可以编成查表程序,并将得到的结果相加,放入R2中,并在循环中,判定有没有溢出,将溢出存入R3。
五.实验程序:
ORG0
LJMPMAIN
ORG1000H
MOV10H,#3
MOV11H,#2
MOV12H,#4
MOVR0,#10H
MOVR6,#3
MOVA,#0
MOVR2,A
MOVR3,A
MOVA,@R0
ACALLSORT
ADDA,R2
CLRA
ADDCA,R3
DJNZR6,LOOP
SORT:
MOVDPTR,#TAB
MOVCA,@A+DPTR
DB0,1,4,9,16,25,36,49,64,81
编译调试成功
六.结果记录:
编译调试成功后,执行程序,并记录求得的结果,检验程序对错
记录:
实验四:
一.实验目的:
(1).加深对MCS—51单片机定时器/计数器内部结构,工作原
理和工作方式的理解;
(2).掌握定时器/计数器工作在定时状态下的编程方法;
(3).掌握中断服务程序的设计方法。
二.实验设备:
计算机一台;
WAVE6000软件。
三.实验内容:
在使用12MHz晶振的条件下,从T1产生50ms定时,计数从“00”开始,每一秒加1,到达“59”后,再从“00”开始,完成60s定时工作。
四.实验原理提示:
定时/计数器实际上是加1计数器,当他对具有固定时间间隔的内部机器周期进行计数时,它是定时器;
当它对外部时间进行计数时,他是计数器。
MCS—51单片机内部包括T0和T1两个定时/计数器,每个定时/计数器有四种工作方式。
1)定时器计数初值得确定
在定时工作状态下,输入的时钟脉冲是由晶体振荡器的输出经12分频取得的,因此,定时器可看作是对单片机机器周期的计数器。
若晶振频率为12MHz。
则定时器的加1计数器每隔1us加1。
加1计数器记满溢出时才申请中断,所以在给加1计数器赋初值时,输入的是加1计数器的最大值与这一计数值得差值。
设加1计数器计数的最大值为M,计数值为N,计数初值为Count,则Count的计算方法如下
计数状态:
Count=M-N
定时状态:
Count=M-定时时间/T,T=12/fosc
若单片机的时钟频率为12MHz,T1工作在定时方式1,定时时间为50ms,则其计数初值Count为:
Count=M-定时时间/T=2^16-50000=15536=3CBB0H
所以,定时器的计数初值为TH1=3CH,TL1=0B0H。
2)定时器初始化程序
定时器包括两个控制寄存计数器TMOD和TCON,向TMOD和TCON写入相应的值来设置各个定时器的操作模式和控制功能。
启动定时器的步骤如下:
(1).设定TMOD的值:
TMOD=10H,设置T1工作方式1
(2).设定IE的值:
启动中断SETB ET1
(3).设定TL1和TH1的值:
TL1=0B0H,TH1=3CH
(4).启动T1定时:
SETB TR1
五.实验程序:
ORG0000H
AJMPSTART;
跳到START处开始执行
ORG001BH;
定时器1中断入口地址
AJMPTIME1;
跳转到中断执行程序
ORG0030H
START:
MOVSP,#60H;
设定堆栈起始地址
MOVTMOD,#10H;
设定T1工作于定时方式1
SETBEA;
开启总中断
SETBET1;
开启T1中断
MOVR3,#60;
设定时60s
MOVR0,#0;
初始化软件计数器1
MOVR1,#0;
初始化软件计数器1
MOVTL1,#3CH;
装入定时器计数初值
MOVTH1,0B0H;
定时时间为50ms
SETBTR1;
启动T1定时
AJMP$;
等待中断
TIME1:
PUSHACC;
ACC入栈
PUSHPSW;
PSW入栈
INCR0;
软件计数器1加1
MOVA,R0;
(R0):
A
CJNEA,#20H,T_LP2;
1S到了吗,到了则输出LED;
把R1中值转换为十进制数输出
MOVA,R1;
(R1):
MOVB,#10;
10:
B
DIVAB;
(A)/(B):
A,(A)%(B):
SWAPA;
将得到的十位数乘以10:
ADDA,B;
(A)+(B):
MOVP1,A;
把A中的值输出到平
CJNER1,#60,LP0;
判断软件计数器2是否到达60
MOVR1,#00H;
到达60清零
LP0:
MOVR0,#00H;
软件计数器1清零
T_LP2:
MOVTH1,#3CH;
重新装入定时器计数初值
MOVTL1,#0B0H;
定时50MS
POPPSW;
取回数据?
POPACC
RETI
END
六.结果记录:
上机编译调试程序成功。
执行调试成功的程序,并记录结果;
程序编译调试成功
结果记录:
执行到光标处结果记录:
七.思考与拓展:
(1)MCS-51单片机定时器计数器的定时和计数状态的区别及适用场合
(2)改变定时长度,实现100s定时
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机