单片机课设.docx

上传人:b****5 文档编号:4044988 上传时间:2022-11-27 格式:DOCX 页数:15 大小:399.89KB
下载 相关 举报
单片机课设.docx_第1页
第1页 / 共15页
单片机课设.docx_第2页
第2页 / 共15页
单片机课设.docx_第3页
第3页 / 共15页
单片机课设.docx_第4页
第4页 / 共15页
单片机课设.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

单片机课设.docx

《单片机课设.docx》由会员分享,可在线阅读,更多相关《单片机课设.docx(15页珍藏版)》请在冰豆网上搜索。

单片机课设.docx

单片机课设

 

课程名称:

单片机原理与接口技术

实验项目:

双字节加法实验;冒泡排序实验;

子程序及其调用实验;定时器中断实验

实验地点:

跨越机房

专业班级:

通信0902学号:

2009001349

学生姓名:

施玉彬

指导教师:

武娟萍

2012年5月18日

实验一:

双字节加法实验

一、实验目的:

1、通过常用指令的编辑练习,进一步理解并掌握MCS-51单片机的指令系统。

2、学习并掌握双字节加法的程序设计

3.学习汇编语言的程序设计基本方法

二、实验内容:

将两个双字节十进制数机加,相加所得和个位放入R4中,十位放入R5中。

三、实验设备:

计算机一台

操作系统:

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软件

四、上机源程序:

源程序:

ORG0000H

LJMPMAIN

ORG40H

MAIN:

MOVR5,#10H

MOVR0,#40H

MOVA,#0H

MOVR1,#0H

MOVR2,#10H

LOOP0:

ACALLLOOP

INCR0

INCR1

DJNZR5,LOOP0

LOOP1:

MOVR0,#40H

MOVB,#0FH

LOOP2:

MOVA,@R0

MOV10H,A

INCR0

MOV11H,@R0

LOOP3:

CJNEA,11H,LOOP4

LOOP4:

JCLOOP5

MOVA,@R0

MOV@R0,10H

DECR0

MOV@R0,A

INCR0

LOOP5:

DJNZB,LOOP2

DJNZR2,LOOP1

SJMP$

LOOP:

MOVDPTR,#TAB

MOVA,R1

MOVCA,@A+DPTR

MOV@R0,A

RET

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

MAIN:

MOV10H,#3

MOV11H,#2

MOV12H,#4

MOVR0,#10H

MOVR6,#3

MOVA,#0

MOVR2,A

MOVR3,A

LOOP:

MOVA,@R0

ACALLSORT

ADDA,R2

MOVR2,A

CLRA

ADDCA,R3

MOVR3,A

INCR0

DJNZR6,LOOP

SJMP$

SORT:

MOVDPTR,#TAB

MOVCA,@A+DPTR

RET

TAB:

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):

A

MOVB,#10;10:

B

DIVAB;(A)/(B):

A,(A)%(B):

B

SWAPA;将得到的十位数乘以10:

ADDA,B;(A)+(B):

A

MOVP1,A;把A中的值输出到平

INCR1

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定时

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1