好好学习,天天向上,一流范文网欢迎您!
当前位置:首页 >> 最新范文 内容页

单片机原理实验报告

单片机原理实验报告 本文关键词:单片机,原理,实验,报告

单片机原理实验报告 本文简介:实验报告01_排序程序实验目的1.熟悉MCS-51指令系统,掌握程序设计方法。2.掌握控制转移指令的功能,以及冒泡排序法原理。3.熟悉51单片机汇编语言编程环境。实验要求设30H开始的10个存储单元中,存放的是无符号数,编写程序实现:将它们排序,并存放到50H开始的单元中。实验原理冒泡算法的思想

单片机原理实验报告 本文内容:

实验报告01_排序程序

实验目的

1.

熟悉MCS-51指令系统,掌握程序设计方法。

2.

掌握控制转移指令的功能,以及冒泡排序法原理。

3.

熟悉51单片机汇编语言编程环境。

实验要求

设30H开始的10个存储单元中,存放的是无符号数,编写程序实现:将它们排序,并存放到50H开始的单元中。

实验原理

冒泡算法的思想为,每次取相邻单元的两个数比较,判断是否需要交换数据的位置。第一次循环,比较N-1次,取到数据表的最大值;第二次循环,比较N-2次,取到次大值;……第N-1次循环,比较一次,排序结束。

流程框图

开始

R4?外循环次数

R3?内循环次数

R0?缓冲区首地址

R0?缓冲区首地址

B?((R0))

A?((R0)+1)

(A)>(B)?

((R0))?

à((R0)+1)

R0?(R0)+1

(R3)-1=0?

(R4)-1=0?

结束

实验程序及调试仿真:

实验程序如下:

N

EQU

10

TAB

EQU

30H

TAC

EQU

50H

ORG

0000H

SORT:

MOV

R4,#N-1

LOOP1:

MOV

A,R4

MOV

R3,A

MOV

R0,#TAB

LOOP2:

MOV

A,@R0

MOV

B,A

INC

R0

MOV

A,@R0

CLR

C

SUBB

A,B

JNC

UNEXCH

MOV

A,@R0

DEC

R0

XCH

A,@R0

INC

R0

MOV

@R0,A

UNEXCH:

DJNZ

R3,LOOP2

DJNZ

R4,LOOP1

MOV

R1,#TAB

MOV

R7,#N

MOV

R0,#TAC

AGAIN:

MOV

A,@R1

MOV

@R0,A

INC

R1

INC

R0

DJNZ

R7,AGAIN

SJMP

$

END

程序调试及运行结果

实验结论

通过本实验,我对冒泡排序法的原理有了更深入的理解,同时在掌握此算法思想的基础上能够用汇编语言进行编程,并学会在Keil

μVersion4调试界面的Memory窗口中查看内存地址的内容,从而验证设计的源程序的正确性,提高了自己解决问题的能力。

实验报告02_

外部中断实验

实验目的

学会使用Keil

μVersion4和Proteus软件进行单片机汇编语言和C语言程序设计与开发;了解和掌握MCS-51单片机的中断组成、中断控制工作原理、中断处理过程、外部中断的中断触发方式,掌握中断功能的编程方法。

实验要求

单片机的P1.0引脚连接LED指示灯D0;单片机的P3.2引脚(INT0)连接按键开关K,作为中断源,每次按键都会触发INT0中断;在INT0中断服务程序中将P1.0端口的信号取反,使LED指示灯D0在点亮和熄灭两种状态间切换,产生LED指示灯按键开关K控制的效果。

实验原理

本实验采用外部中断0。中断请求信号由按键BUTTON来实现,由引脚INT0(P3.2)引入;通过按键可以控制P1.0所接的LED灯的点亮熄灭。其中中断请求信号设置为边沿触发方式。当按键按下,INT0出现负跳变,发出中断请求信号。CPU响应中断,停止其他工作,跳转到INT0中断入口地址0003H单元,转入EX_INT0执行中断服务程序,当执行到中断返回指令RETI时,使CPU返回断点处,继续处理其他工作。

中断处理流程图示:

INT0中断入口

计数加一

保护现场

恢复现场

中断返回

开始

设置有关中断控制寄存器开外中断INT0、INT1

设置P1.0~

3初始状态

显示循环等待中断

主程序框图

INT0中断处理程序框图

实验电路原理图

实验程序及调试仿真

ORG

0000H

AJMP

MAIN

ORG

0003H

AJMP

EX_INT0

ORG

0100H

MAIN:

MOV

SP,#40H

SETB

IT0

SETB

EA

SETB

EX0

HERE:

SJMP

HERE

ORG

0200H

EX_INT0:

CPL

P1.0

RETI

END

Proteus仿真

按键为按下时:

按键按下后

实验结论

本实验通过Keil

μVersion4的中断程序汇编语言设计和Proteus软件的仿真,成功实现了按键对信号灯的熄灭点亮控制。通过实验,也加深了我对51单片机中断系统的认识。

实验03_定时器实验

实验目的

了解MCS-51单片机中定时器、计数器的基本结构、工作原理和工作方式,掌握工作在定时器模式下的编程方法。

实验要求

设单片机的晶振频率fosc=12MHZ,使用T0定时100ms,在P1.2引脚产生周期为200ms的方波信号,并通过示波器观察P1.2输出的波形。

实验原理

定时器/计数器是单片机应用系统中经常使用的部件之一。根据工作要求及实际需要,选择合适的工作方式。如果有定时要求,就选择定时功能;如果要求检测外部脉冲信号个数,就选择计数功能。对定时器工作方式选择一般考虑定时时间和计数值的长度。若定时时间长则选用方式1,;若定时时间短则选择方式2.门控选择主要考虑是否要求外部信号来控制定时器/计数器的启动。

要实现更长时间的定时,一般有两种方式:一是采用两个定时/计数器串联使用,一个定时并输出定时脉冲,另一个计数定时脉冲;二是采用一个定时/计数器定时工作,再加一个软件计数器记录溢出的次数。

实验设计

按定时要求,可选择T0为定时功能并工作在方式1,用定时器T0定时100ms,则计数初值X计算如下:

X=216-(t

fosc)/12=216-(100103

12*

106)/12=10000H-100000

由于X小于0,说明定时时间过长,因此需要采用实验原理中所述的两种方法之一实现实验要求。本实验采用方法二,即采用一个定时/计数器定时工作,再加一个软件计数器记录溢出的次数。

具体实现为:用T0定时50ms,工作在工作方式1,然后在定时器中断服务子程序中由软件计数器(寄存器R2)对定时中断的次数进行统计,达到2次即输出周期为200ms的方波,此时模式字是01H。

程序框图

实验程序:

ORG

0000H

AJMP

START

ORG

000BH

AJMP

INT_T0

ORG

0100H

START:

MOV

SP,#60H

MOV

TMOD,#01H

MOV

TL0,#0B0H

MOV

TH0,#3CH

MOV

R2,#02H

SETB

ET0

SETB

EA

SETB

TR0

HERE:SJMP

HERE

ORG

0200H

INT_T0:

MOV

TL0,#0B0H

MOV

TH0,#3CH

DJNZ

R2,LOOP

MOV

R2,#02H

CPL

P1.2

LOOP:

RETI

END

Proteus仿真电路

示波器显示周期为200ms的方波:

实验结论

通过本实验,我对51单片机中定时器、计数器的基本结构、工作方式以及工作原理有了更深入的认识,同时发现可以运用定时器和计数器来产生方波。不仅如此,本实验的给定参数还使我意识到当定时时间过长使初值为负超出范围时,需要使用计数器来帮助实现功能。本实验巩固了我所学的理论知识,在设计实验时又使我注意到了许多细节,增强了我设计实验、排查错误的能力。

实验04_两个单片机之间双向通信实验

实验目的

了解MCS-51单片机串行口(UART)的结构、工作方式,了解串行通信的原理和数据交换过程,掌握单片机之间进行串行通信的编程方法。

实验要求

将甲、乙两台MCS-51单片机串行口连接,即甲机的TXD与乙机的RXD相连;甲机的RXD与乙机的TXD相连;并实现双机共地。整个系统实现双向通信。具体是:

(1)

甲机的K1按键可通过串行口分别控制乙机的LED1点亮;LED2点亮;LED1和LED2全亮或全灭。

(2)

乙机的K2按键可通过串行口向甲机发送数字,甲机将接收到的数字显示在其P0端口的LED数码管显示器上。

实验原理

CPU与外界的信息交换称为通信。当数据的各位同时传送时,称为并行通信;当数据一位接一位顺序传送时,则称为串行通信。其中,串行数据通信分为同步通信和异步通信两种形式。MCS-51单片机内部有一个全双工的串行通信口,即串行接收和发送缓冲器(SBUF),

这两个在物理上独立的接受发送器,既可以接受数据也可以发送数据。但接收缓冲器只能读出不能写入,而发送缓冲器只能写入不能读出,它们的地址为99H。串行通信控制寄存器(SCON)是一个8位的专用寄存器,用于串行数据的通信控制,电源管理寄存器PCON主要是为CHMOS型单片机的电源控制而设置的专用寄存器,可以设置波特率。

串行工作口有四种工作方式,分别为工作方式0,工作方式1,工作方式2,工作方式3。串行通信只使用方式1、2、3。发送数据时,TI位置0,发送完毕时TI置位。接收数据时,RI位置0,接收完毕时置位RI。

实验设计

题(1):按键接甲机P1.1口,通过计数按键次数发送不同指令。乙机的P1.0,P1.1分别接两盏灯,接受甲机的指令从而实现乙机的灯的亮暗。甲机的按键接地,因此按下时P1.1应赋值为0。没按下一次,计数值加1,因为题目中两灯共出现四种情况,四种状态可设置分别为01,02,03,04,通过在四种状态下分别给乙机P1.0和P1.1口置1或置0(通过SETB和CLR实现),可以实现甲机对乙机灯的控制。本实验可采用查询方式也可采用中断方式。

题(2):按键接乙机的P3.2口,即INT0口,LED数码管接甲机的P0端口,程序采用中断方式。乙机发送指令,通过按键次数控制甲机数码管上显示的数字,具体控制情况为,乙机按键按一次,甲机数码管显示“1”,按键按两下,数码管显示“2”,按键按三下,数码管显示“3”,按键按四下,数码管显示“4”。只需通过计数按键按下次数,没按下一次,计数值加1,同时启动一次发送即可。甲机没启动一次接受,子程序中就将需要显示的数字所对应的相应值传送给P0端口的数码管即可。

程序框图

N

Y

Y

N

清标志位RI、TI

取数并显示

串行口中断

按键松开?

按键次数加一,

计算编号

按键按下?

关中断,发编号

开中断

实验程序

题(1)采用查询方式:

甲机(按键控制)

ORG

0000H

LJMP

MAIN

ORG

0030H

MAIN:MOV

SCON,#40H

MOV

PCON,#00H

MOV

TMOD,#20H

MOV

TL1,#0F4H

MOV

TH1,#0F4H

SETB

TR1

NEXT:JNB

P1.1,L1

SJMP

NEXT

NEXT1:JNB

P1.1,L2

SJMP

NEXT1

NEXT2:JNB

P1.1,L3

SJMP

NEXT2

NEXT3:JNB

P1.1,L4

SJMP

NEXT3

L1:MOV

A,#00H

MOV

SBUF,A

WAIT1:JBC

TI,NEXT1

SJMP

WAIT1

L2:MOV

A,#01H

MOV

SBUF,A

WAIT2:JBC

TI,NEXT2

SJMP

WAIT2

L3:MOV

A,#02H

MOV

SBUF,A

WAIT3:JBC

TI,NEXT3

SJMP

WAIT3

L4:MOV

A,#03H

MOV

SBUF,A

WAIT4:JBC

TI,NEXT

SJMP

WAIT4

END

乙机(接受程序,实现灯的亮暗)

ORG

0000H

LJMP

MAIN

ORG

0080H

MAIN:MOV

SCON,#50H

MOV

PCON,#00H

MOV

TMOD,#20H

MOV

TL1,#0F4H

MOV

TH1,#0F4H

SETB

TR1

WAIT:JBC

RI,NEXT

SJMP

WAIT

NEXT:MOV

A,SBUF

CJNE

A,#00H,L2

SETB

P1.0

CLR

P1.1

SJMP

WAIT

L2:CJNE

A,#01H,L3

SETB

P1.1

CLR

P1.0

SJMP

WAIT

L3:CJNE

A,#02H,L4

SETB

P1.0

SETB

P1.1

SJMP

WAIT

L4:CJNE

A,#03H,WAIT

CLR

P1.0

CLR

P1.1

SJMP

WAIT

END

题(1)采用中断方式

甲机(按键控制)

ORG

0000H

LJMP

MAIN

ORG

0003H

LJMP

L1

ORG

0030H

MAIN:

MOV

SCON,#40H

MOV

PCON,#00H

MOV

TMOD,#20H

MOV

TH1,#0F4H

MOV

TL1,#0F4H

SETB

TR1

MOV

SP,#40H

SETB

IT0

SETB

EA

SETB

EX0

L2:

SJMP

L2

ORG

0200H

L1:

MOV

A,P1

MOV

SBUF,A

WAIT:

JBC

TI,NEXT

SJMP

WAIT

NEXT:

RETI

END

乙机(接受程序,实现灯的亮暗)

ORG

0000H

LJMP

MAIN

ORG

0030H

MAIN:

MOV

SCON,#50H

MOV

PCON,#00H

MOV

TMOD,#20H

MOV

TH1,#0F4H

MOV

TL1,#0F4H

SETB

TR1

MOV

R1,#00H

MOV

P1,#0FFH

WAIT:

JBC

RI,NEXT

SJMP

WAIT

NEXT:

MOV

A,SBUF

INC

R1

SJMP

L1

L1:

MOV

A,R1

SUBB

A,#01H

JZ

L2

MOV

A,R1

SUBB

A,#02H

JZ

L3

MOV

A,R1

SUBB

A,#03H

JZ

L4

MOV

A,R1

SUBB

A,#04H

JZ

L5

L2:

CLR

P1.0

SETB

P1.1

CLR

RI

SJMP

WAIT

L3:

CLR

P1.1

SETB

P1.0

CLR

RI

SJMP

WAIT

L4:

CLR

P1.0

CLR

P1.1

CLR

RI

SJMP

WAIT

L5:

SETB

P1.0

SETB

P1.1

CLR

RI

MOV

R1,#00H

SJMP

WAIT

END

Proteus仿真电路

题(1)采用查询程序的仿真

甲机P1.1口按键按下第一次,亮灯全亮

甲机按键按下第二次,两灯全灭:

甲机按键按下第三次,D1灯灭,D2灯亮:

甲机按键按下第四次,D1灯亮,D2灯灭:

可以看出,甲机通过按键实现了对乙机所接的两灯亮灭的控制。

题(2)采用中断程序设计的程序

乙机按键控制甲机数码管程序(采用中断方式)

org

0000h

ajmp

send

org

0003h

ajmp

e_int

org

0023h

ajmp

trani

org

0030h

send:mov

scon,#090h

mov

pcon,#80h

setb

ea

setb

es

setb

ex0

setb

it0

mov

a,#0fh

add

a,#01h

mov

c,p

mov

tb8,c

mov

sbuf,a

sjmp

$

trani:jbc

ti,loop2

jbc

ri,loop3

loop3:mov

a,sbuf

cjne

a,#10h,loop5

mov

r0,#00h

loop5:cjne

a,#11h,loop6

mov

r0,#01h

loop6:cjne

a,#12h,loop7

mov

r0,#02h

loop7:cjne

a,#13h,loop4

mov

r0,#03h

loop4:

mov

P1,r0

reti

e_int:cjne

a,#13h,loop1

mov

a,#0fh

loop1:

add

a,#01h

mov

c,p

mov

tb8,c

mov

sbuf,a

loop2:

reti

end

甲机接收程序

org

0000h

ajmp

send

org

0003h

ajmp

e_int

org

0023h

ajmp

trani

send:

mov

scon,#090h

mov

pcon,#80h

mov

p0,#0ffh

mov

p2,#01h

setb

ea

setb

es

setb

ex0

setb

it0

mov

a,#0fh

add

a,#01h

mov

c,p

mov

tb8,c

mov

sbuf,a

loop4:

mov

p0,r0

sjmp

loop4

trani:jbc

ti,loop2

jbc

ri,loop3

loop3:mov

a,sbuf

cjne

a,#10h,loop5

mov

r0,#0f9h

loop5:cjne

a,#11h,loop6

mov

r0,#0a4h

loop6:cjne

a,#12h,loop7

mov

r0,#0b0h

loop7:cjne

a,#13h,loop8

mov

r0,#099h

loop8:

reti

e_int:cjne

a,#13h,loop1

mov

a,#0fh

loop1:

add

a,#01h

mov

c,p

mov

tb8,c

mov

sbuf,a

loop2:reti

end

题(2)仿真结果

按下按键第一次,甲机数码管显示’1’

按下按键第二次,数码管显示‘2’

按键按下第三次,数码管显示‘3’

按键按下第四次,数码管显示‘4’

可以看出,乙机通过按键实现了对甲机LED数码管上数字的控制。

实验结论

本实验通过对甲、乙两台51单片机的发送、接收程序的汇编语言编写,以及在Proteus中电路仿真,将甲、乙机的串行口相连,并进行电路的连接,最终仿真实现了双机的串口通信,即甲机通过按键实现了对乙机两端口所接LED灯亮暗的控制,而乙机通过按键实现了对甲机LED数码管显示数字的控制。通过本实验,我学会了串口通信发送、接受程序的编写,并且掌握了查询、中断方式编写改程序的不同思路,加深了对理论内容的学习。

实验05_数码管显示4x4键盘矩阵按键实验

实验目的

熟悉和掌握矩阵式键盘的工作原理、电路设计和软件编程方法;熟悉和掌握矩阵式键盘的行扫描法和行反转法两种键盘扫描识别方法;掌握键盘延时消抖的软件方法;掌握LED静态扫描显示方式。

实验要求

4x4键盘矩阵的行线连接单片机的P1.0~P1.3端口,列线连接P1.4~P1.7端口;一位LED数码管连接单片机的P0口。编程实现:当按下任意一个按键时,LED数码管显示它在4x4键盘矩阵上的序号0~F。

实验原理

矩阵键盘又称为行列式键盘,它是用4条I/O线作为行线,4条I/O线作为列线组成的键盘。在行线和列线的每一个交叉点上,设置一个按键。这样键盘中按键的个数是4×4个。这种行列式键盘结构能够有效地提高单片机系统中I/O口的利用率。

确定矩阵式键盘上何键被按下主要有两种方法,分别为行扫描法和行反转法。

行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法,介绍过程如下:

1、判断键盘中有无键按下

将全部行线Y0-Y3置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。

2、判断闭合键所在的位置

在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。

另一种方法是高低电平翻转法。过程如下:

首先让P1口高四位为1,低四位为0,。若有按键按下,则高四位中会有一个1翻转为0,低四位不会变,此时即可确定被按下的键的行位置;

然后让P1口高四位为0,低四位为1,。若有按键按下,则低四位中会有一个1翻转为0,高四位不会变,此时即可确定被按下的键的列位置。

最后将上述两者进行或运算即可确定被按下的键的位置。

实验流程图

键盘扫描开始

有键闭合?

软件延时10mS

有键闭合?

确定按键位置

闭合键释放?

A?按键值

结束

实验程序

ORG

0000H

LJMP

START

ORG

0100H

START:

MOV

SP,#60H

KEY0:

MOV

P1,#0EFH

JNB

P1.0,K0

JNB

P1.1,K4

JNB

P1.2,K8

JB

P1.3,NEXT1

LJMP

K12

NEXT1:

MOV

P1,#0DFH

JNB

P1.0,K1

JNB

P1.1,K5

JNB

P1.2,K9

JB

P1.3,NEXT2

LJMP

K13

NEXT2:

MOV

P1,#0BFH

JNB

P1.0,K2

JNB

P1.1,K6

JNB

P1.2,K10

JB

P1.3,NEXT3

LJMP

K14

NEXT3:

MOV

P1,#07FH

JNB

P1.0,K3

JNB

P1.1,K7

JNB

P1.2,K11

JNB

P1.3,K15

LJMP

KEY0

K0:

MOV

P0,#0C0H

LCALL

DELAY

JMP

KEY0

K1:

MOV

P0,#0F9H

LCALL

DELAY

JMP

KEY0

K2:

MOV

P0,#0A4H

LCALL

DELAY

JMP

KEY0

K3:

MOV

P0,#0B0H

LCALL

DELAY

JMP

KEY0

K4:

MOV

P0,#99H

LCALL

DELAY

JMP

KEY0

K5:

MOV

P0,#92H

LCALL

DELAY

JMP

KEY0

K6:

MOV

P0,#82H

LCALL

DELAY

JMP

KEY0

K7:

MOV

P0,#0F8H

LCALL

DELAY

JMP

KEY0

K8:

MOV

P0,#80H

LCALL

DELAY

JMP

KEY0

K9:

MOV

P0,#90H

LCALL

DELAY

JMP

KEY0

K10:

MOV

P0,#88H

LCALL

DELAY

JMP

KEY0

K11:

MOV

P0,#83H

LCALL

DELAY

JMP

KEY0

K12:

MOV

P0,#0C6H

LCALL

DELAY

JMP

KEY0

K13:

MOV

P0,#0A1H

LCALL

DELAY

JMP

KEY0

K14:

MOV

P0,#86H

LCALL

DELAY

JMP

KEY0

K15:

MOV

P0,#8EH

LCALL

DELAY

JMP

KEY0

DELAY:

MOV

R3,#06H

LP:

MOV

R4,#0A8H

LP1:MOV

R5,#0A8H

LP2:DJNZ

R5,LP2

DJNZ

R4,LP1

DJNZ

R3,LP

RET

END

PROTEUS仿真

当按下相应按键,LED数码管显示它在4x4键盘矩阵上的序号0-F。

下图列出一些仿真结果

实验结论

本实验通过对数码管显示矩阵键盘按键的源程序编写及Proteus仿真,我掌握了:1)矩阵键盘行扫描法和行反转法两种键盘扫描识别方法,以及实现该算法的汇编语言;2)键盘延时消抖的软件方法;3)LED静态扫描显示方式。矩阵式键盘是大型系统设计中不可或缺的一部分,因此,掌握它的原理及其重要。

TAG标签: