中国地质大学武汉单片机实验报告.docx

上传人:b****6 文档编号:8087484 上传时间:2023-01-28 格式:DOCX 页数:22 大小:330.58KB
下载 相关 举报
中国地质大学武汉单片机实验报告.docx_第1页
第1页 / 共22页
中国地质大学武汉单片机实验报告.docx_第2页
第2页 / 共22页
中国地质大学武汉单片机实验报告.docx_第3页
第3页 / 共22页
中国地质大学武汉单片机实验报告.docx_第4页
第4页 / 共22页
中国地质大学武汉单片机实验报告.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

中国地质大学武汉单片机实验报告.docx

《中国地质大学武汉单片机实验报告.docx》由会员分享,可在线阅读,更多相关《中国地质大学武汉单片机实验报告.docx(22页珍藏版)》请在冰豆网上搜索。

中国地质大学武汉单片机实验报告.docx

中国地质大学武汉单片机实验报告

中国地质大学(武汉)

 

单片机实验报告

 

姓名:

_吴泽光______

班号:

_075122______

学号:

_20121001873

院系:

___机电_____

专业:

__通信_____

指导教师:

_王巍_

实验一、实验开发环境学习

一、实验目的

1、学习keil软件的使用方法;

2、学习单片机汇编程序的开发流程;

3、学习程序的调试仿真方法。

二、实验内容

1、设有两个4位的BCD码,分别存放在片内RAM的23H、22H单元和33H、32H单元中,求他们的和,并送入43H、42H单元中(低位在低字节中,高位在高字节中)。

2、将8bit二进制数转换为3位BCD码。

3、找出放在内存单元40H开始的10个数的最大值,并放在内存单元50H中。

三、程序设计

1、设计思路:

(23H)(22H)+(33H)(32H)(43H)(42H)

相关程序:

ORG0000H

AJMPSTART

ORG0030H

START:

MOVA,22H

ADDA,32H

DAA

MOV42H,A

MOVA,23H

ADDCA,33H

DAA

MOV43H,A

END

END调试过程:

使用软件仿真,通过改变22H、23H、33H及32H的内容,再观察42H及43H的内容是否符合要求来判断程序是否正确。

刚开始对DA指令不太会用,仿真的时候出不来结果,最后问了老师才发现没有进行BCD码的调整,加上“DAA”后得到了正常的结果。

2、设计思路:

相关程序:

ORG0000H

AJMPMAIN

ORG0030H

MAIN:

MOVB,#100

DIVAB

MOVR0,#21H

MOV@R0,A

DECR0

MOVA,#10

XCHA,B

DIVAB

SWAPA

ADDA,B

MOV@R0,A

END

调试过程:

使用软件仿真,通过改变不同的值,再观察输出值是否符合要求来判断程序的正误。

因为这个程序较为简单,所以调试过程比较顺利。

3、设计思路:

相关程序:

ORG0000H

AJMPMAIN

ORG0030H

MAIN:

CLR00H

MOVR0,#40H

MOVA,@R0

MOVR7,#0AH

MOVR2,#50H

LOOP:

INCR0

MOVR2,A

SUBBA,@R0

MOVA,R2

JNCNEXT

MOVA,@R0

NEXT:

MOVR2,A

DJNZR7,LOOP

END

调试过程:

使用软件仿真,通过输入不同大小的几个值,再看其输出的值是否符合要求来判断程序的正误。

实验二、单片机输入及输出实验

一、实验目的

1、学习单片机的I/O口的使用方法;

2、学习延时子程序的编写和使用;

3、学习分支指令的使用;

4、学习使用定时器完成延时的方法。

二、实验内容

1、P1口做输出口,接八只发光二极管,编写程序,使得发光二极管循环点亮,每个发光二极管点亮时间为1秒。

仔细思考,画出程序流程图;编写程序并写清注释;

2、P2.0和P2.1做输入口接两个拨动开关,P1口做输出口,接八只发光二极管,编写程序读取开关状态,根据此状态,改变发光二极管点亮方式。

(至少两种)。

编程时应注意P2.0、P2.1作为输入口时应先置1,才能正确读入值。

仔细思考,画出程序流程图;编写程序并写清注释;

三、实验电路及连线

连线

连接孔1

连接孔2

1

P1.0

L0

2

P1.1

L1

3

P1.2

L2

4

P1.3

L3

5

P1.4

L4

6

P1.5

L5

7

P1.6

L6

8

P1.7

L7

9

P2.0

S0

10

P2.1

S1

四、实验说明

1、对于MCS51MCU,P2口是准双向口。

它作为输出口时与一般的双向口使用方法相同。

由准双向口结构可知当P2口用为输入口时,必须先对它置“1”。

若不先对它置“1”,读入的数据是不正确的。

2、8051延时子程序的延时计算问题,需要考虑系统晶振和延时时长,对于较长的延时需要采用多重循环的方式得到。

如实验要求发光二极管点亮1秒,请参考课件上延时50ms的例子进行修改。

3、如果需要使用定时器完成较长时间的延时,需要定时器多次定时来完成。

五、程序设计

1、设计思路:

相关程序:

ORG10000H

AJMPSTART

ORG001BH

AJMPINT_T1;中断的入口地址

ORG0030H

START:

MOVSP,#68H

MOVA,#001H;首先点亮第一个二极管

MOVTMOD,#10H;选择定时器1,方式1

MOVTH1,#3CH

MOVTL1,#0B0H;定时50ms

MOVR7,#20;响应20次,达到1S

SETBTR1;开定时器

SETBEA;开总中断

SETBET1;中断允许

SJMP$;等待中断

INT_T1:

PUSHPSW

MOVTH1,#3CH

MOVTL1,#0B0H;定时器重新赋初值

DJNZR7,EXIT

MOVR7,#20

MOVP1,A;改变P1口的输出

RLA;左移一位

EXIT:

POPPSW

RETI

END

调试过程:

先使用软件仿真,观察外围设备中P1口是否为循环变化来判断程序的正误,再进行硬件仿真,观察八只发光二极管是否按照要求循环点亮。

2、设计思路

相关程序:

ORG0000H

AJMPSTART

ORG000BH

AJMPINT_T1

ORG0030H

START:

MOVSP,#68H

MOVP2,#0FFH;P2口置1,作为数据输入口

MOVA,#001H;先点亮第一个LED

MOVTMOD,#10H;选择定时器1,方式1

MOVTH1,#3CH

MOVTL1,#0B0H;定时50ms

MOVR7,#20;20次

SETBTR1;

SETBEA;开总中断

SETBET1;中断允许

SJMP$;等待中断

INT_T1:

PUSHPSW

MOVTH1,#3CH

MOVTL1,#0B0H;定时器重新赋初值

DJNZR7,EXIT

MOVR7,#20

MOVP1,A;P1口输入数据

JNBP2.0,LOOP;判断P2.0口按键是否被按下

RLA;按键没有被按下时,流水灯循环左移

AJMPEXIT

LOOP:

;有按键被按下时,流水灯循环右移

RRA

EXIT:

POPPSW

RETI

END

调试过程:

先使用软件仿真,通过按键P2.0的状态,再观察P1都是否按要求实行两种不同的点亮方式来判断程序的正误。

然后进行硬件操作,通过拨动连接P2口的开关来控制八只发光二极管的点亮方式。

延续上一个流水灯的程序,加一个按键,通过按键改变流水灯的流向。

 

实验三、单片机定时器及中断实验

一、实验目的

1、学习单片机的定时器的使用方法;

2、学习中断的使用及中断服务程序的编写;

3、学习查询方式和中断方式进行信息传递的不同。

二、实验内容

1)使用单片机定时器资源,在P1.0口上输出一个周期为1s的方波,占空比为50%。

采用查询和中断的方式分别实现。

思考并回答以下问题:

定时器工作在什么模式?

定时器工作方式?

定时器初值如何确定?

使用T0还是T1?

如何用定时器得到较长的延时时间?

中断还是查询方式?

两种方法在设计时有何区别?

给出设计思路并画出程序流程图。

2)单片机P1口接8个LED,有一个LED点亮;P2.0接一个按键,首先采用查询的方式实现:

每按一次按键,LED向左或向右移位一次。

如初始时L0亮,按一次按键,则L0熄灭,L1点亮;再按一次按键,L1熄灭,L2点亮,……给出设计思路并画出程序流程图。

3)采用单片机外部中断实现同样的功能。

思考并回答以下问题:

电路应该如何连接?

如何设置中断控制寄存器?

中断方式选择?

采用INT0还是INT1?

如何中断使能?

中断入口地址在哪里?

中断服务程序要做哪些工作?

如何中断返回?

主程序结构如何?

给出设计思路并画出程序流程图。

思考查询方式和中断方式实现同样功能在程序设计上有和不同?

三、实验电路及连线

连线

连接孔1

连接孔2

1

P1.0

L0

2

P1.1

L1

3

P1.2

L2

4

P1.3

L3

5

P1.4

L4

6

P1.5

L5

7

P1.6

L6

8

P1.7

L7

9

P2.0或P3.X

单脉冲

四、实验说明

1、仔细阅读定时器及中断控制寄存器设置部分内容,理解每一位的意义,再根据程序设计确定相关控制字。

2、中断服务程序的设计要注意现场保护以保证退出中断后程序的状态不发生变化。

3、按键连接单脉冲电路

单脉冲电路由按键(PULSE)和去抖动处理组成,每按一次(PULSE)键产生一个单脉冲。

板上有单脉冲的输出信号插孔,图为“”和“”,分别为正脉冲和负脉冲。

四、程序设计

1、周期为1s的方波,采用中断方式,设计思路:

相关程序:

ORG0000H

AJMPSTART

ORG000BH

AJMPBREAK

ORG0030H

START:

MOVSP,#68H

SETBP1.0

MOVR7,#10

MOVTMOD,#01H

MOVTH0,#3CH

MOVTL0,#0B0H

SETBTR0

SETBEA

SETBET0

SJMP$

BREAK:

PUSHACC

PUSHPSW

MOVTH0,#3CH

MOVTL0,#0B0H

DJNZR7,EXIT

MOVR7,#10

CPLP1.0

EXIT:

POPPSW

POPACC

RETI

END

调试过程:

使用软件仿真,通过观察P1口的输出是否符合要求来判断程序的正误。

因为这个程序较为简单,所以调试过程比较顺利。

2、周期为1s的方波,采用查询方式,设计思路:

相关程序:

ORG0000H

AJMPSTART

ORG0030H

START:

MOVSP,#68H

SETBP1.0

MOVR7,#10

MOVTMOD,#01H

MOVTH0,#3CH

MOVTL0,#0B0H

SETBTR0

LP:

JBCTF0,NEXT

SJMPLP

NEXT:

MOVTH0,#3CH

MOVTL0,#0B0H

DJNZR7,LP

CPLP1.0

MOVR7,#10

AJMPLP

END

调试过程:

一开始对中断和定时两个概念没有理解清楚,采用查询方式也开了中断。

3,按键每按一次,LED灯左移一位,采用查询方式,设计思路:

相关程序:

ORG0000H

AJMPSTART

ORG0030H

START:

MOVSP,#68H

MOVA,#01H

LOOP:

MOVP1,A

KEY:

MOVP2,#0FFH

MOVC,P2.0

JNCKEY;有键被按下

LCALLDELAY

MOVC,P2.0

JCKEY

RLA

AJMPLOOP

DELAY:

MOVR7,#10H

D1:

MOVR6,#0FFH

D2:

DJNZR6,D2

DJNZR7,D1

RET

END

调试过程:

调试的时候,对于案件时序的把握不是很好,软件消抖的时间控制不好,最后采用书上用过的一个历程,完成了这个程序。

4,按键每按一次,LED灯左移一位,采用中断方式,设计思路:

相关程序:

ORG000H

AJMPSTART

ORG0003H

AJMPBREAK

ORG0030H

START:

MOVSP,#68H

MOVA,#001H

MOVP1,A

SETBP3.2

SETBIT0

SETBEA

SETBEX0

SJMP$

BREAK:

PUSHPSW

RRA

MOVP1,A

POPPSW

RETI

END

调试过程:

关于边沿触发和电平触发有了更深的理解,刚开始采用电平触发,结果不理想,最后选用了边沿触发,完成了实验。

实验四、单片机键盘及LED显示实验

一、实验目的

1、学习数码管动态显示的原理和程序编写;

2、学习矩阵键盘的扫描原理和程序。

二、实验内容

1、使用单片机I/O口,完成一个6位7段数码管动态显示程序,显示自己学号的后六位。

数码管共阴,段码为A~H,位码为G0~G5。

思考并回答以下问题:

(1)动态扫描的原理是什么?

(2)什么是位码?

(3)什么是段码?

(4)延时时间如何确定,在此实验要求下为多少合适?

(5)改变延时时间为20ms看看有什么现象发生?

给出设计思路并画出程序流程图。

2、使用单片机I/O口,完成键盘和动态显示程序。

G0~G5是数码管的位码,也是键盘列扫描信号,键盘行信号为K0~K3。

要求:

初始时所有数码管显示“0”,然后每按一次按键,都在最右边显示该键的符号,而旧数据逐渐左移。

思考并回答以下问题:

(1)键盘扫描的原理是什么?

(2)怎么与动态显示结合?

(3)键盘在扫描过程中要注意什么?

(4)如何去抖?

(5)怎样判断一次正常的按键事件?

给出设计思路并画出程序流程图。

三、实验电路及连线

四、实验说明

1、将驱动方式开关拨到“外驱”;

2、仔细阅读课本和课件键盘及动态显示部分内容,理解其原理;

3、理解动态扫描显示的过程,理解键盘扫描的过程;

4、七段数码管的字型代码表如下表:

显示字形

g

f

e

d

c

b

a

段码

0

0

1

1

1

1

1

1

3fh

1

0

0

0

0

1

1

0

06h

2

1

0

1

1

0

1

1

5bh

3

1

0

0

1

1

1

1

4fh

4

1

1

0

0

1

1

0

66h

5

1

1

0

1

1

0

1

6dh

6

1

1

1

1

1

0

1

7dh

7

0

0

0

0

1

1

1

07h

8

1

1

1

1

1

1

1

7fh

9

1

1

0

1

1

1

1

6fh

A

1

1

1

0

1

1

1

77h

b

1

1

1

1

1

0

0

7ch

C

0

1

1

1

0

0

1

39h

d

1

0

1

1

1

1

0

5eh

E

1

1

1

1

0

0

1

79h

F

1

1

1

0

0

0

1

71h

五、程序设计

1、设计思路

相关程序:

ORG0000H

LJMPMAIN

ORG0030H

MAIN:

LJMPDIS

DIS:

MOVR0,#7EH

MOVR2,#01H

MOVA,R2

MOVDPTR,#TAB

LP0:

MOV7EH,#03

MOV7DH,#07

MOV7CH,#08

MOV7BH,#01

MOV7AH,#00

MOV79H,#00

MOVP2,A

MOVA,@R0

MOVCA,@A+DPTR

MOVP1,A

ACALLD1MS

DECR0

MOVA,R2

JBACC.5,LP1

RLA

MOVR2,A

AJMPLP0

LP1:

AJMPMAIN

TAB:

DB3FH,06H,5BH,4FH,66H,6DH

DB7DH,07H,7FH,6FH,77H,7CH

DB39H,5EH,79H,71H,40H,00H

D1MS:

MOVR7,#02H

DL:

MOVR6,#0FFH

DL1:

DJNZR6,DL1

DJNZR7,DL

RET

END

调试过程:

先使用软件仿真,通过观察P1口的输出是否符合要求来判断程序的正误。

再进行硬件操作,看是否能正常显示我的学号。

刚开始,我对单片机每个单元取值显示部分不是很理解,直接在TAB中放我要显示的数字,最后导致所有的字符都无法显示出来。

后来经过翻书发现通过没一个地址单元赋初值,然后用变址寻址方式,可以顺利显示要显示的数字。

通过实验发现,1ms是最好的延迟时间,当时间延迟为20ms时,数码管显示的数字开始很明显地闪烁。

实验总结

这几次单片机的实验过程,弥补了很多单片机知识点的盲点,比如程序仿真,我一直没有弄清楚这个过程,以前都是程序编好了就直接下到单片机看执行结果。

通过仿真,在调试的过程中确实省了很多的时间。

在实验的过程中,对单片机的内部结构有了更深的了解,对汇编语言的使用更加熟练了。

我觉得51单片机的学习是一个入门的课程,相信这些实验会对我以后专业课的学习提供很大的帮助。

 

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

当前位置:首页 > 幼儿教育 > 幼儿读物

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

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