华南师范大学单片机课程实验报告和程序.docx

上传人:b****7 文档编号:23928736 上传时间:2023-05-22 格式:DOCX 页数:62 大小:323.94KB
下载 相关 举报
华南师范大学单片机课程实验报告和程序.docx_第1页
第1页 / 共62页
华南师范大学单片机课程实验报告和程序.docx_第2页
第2页 / 共62页
华南师范大学单片机课程实验报告和程序.docx_第3页
第3页 / 共62页
华南师范大学单片机课程实验报告和程序.docx_第4页
第4页 / 共62页
华南师范大学单片机课程实验报告和程序.docx_第5页
第5页 / 共62页
点击查看更多>>
下载资源
资源描述

华南师范大学单片机课程实验报告和程序.docx

《华南师范大学单片机课程实验报告和程序.docx》由会员分享,可在线阅读,更多相关《华南师范大学单片机课程实验报告和程序.docx(62页珍藏版)》请在冰豆网上搜索。

华南师范大学单片机课程实验报告和程序.docx

华南师范大学单片机课程实验报告和程序

 

单片机实验报告

 

华南师范大学

 

姓名:

学号:

专业:

通信工程

班级:

09通信8班

 

数字量输入输出实验

一、实验目的

1.熟悉教学板电路及其结构。

2.掌握利用μVisionC51软件编辑、调试(包括仿真调试、单步调试)、运行单片机程序的步骤和方法,掌握利用STC-ISPV39软件和下载线将程序写入单片机的方法。

3.通过实验熟悉51单片机的并行I/O口,并掌握它们的应用。

4.掌握矩阵键盘、LED动态显示的工作原理。

二、实验设备

PC机一台、实验教学板一块。

三、实验准备

1.阅读实验讲义附录一、实验教学板电路图和附录二、μVision软件使用说明

2.按实验题目要求设计好硬件电路,画出电路原理图,设计出相应程序,并给程序加上较详细的注释。

四、实验内容

1.实验线路如附图所示,51单片机的P0口输出接8个发光二极管的阴极,P2.4经NPN三极管9011控制发光管的阳极。

P3口支持一个8位行列式键盘,其中P3.4~P3.7供键盘扫描输出,P3.2、P3.3作键盘扫描输入。

实验要求:

编程实现键盘对发光二极管的控制,每按一个按键,使对应的二极管点亮。

2.51单片机P0口输出同时接4个数码管的阴极,P2.0~P2.3,经NPN三极管9011接数码管的阳极,该端口用于分别控制相应数码管的导通。

实验要求:

编程实现对任意按键动作的次数进行计数(最大99次),同时将计数值实时显示。

五、实验步骤

1.将实验板与PC机通过COM口连接。

启动PC机,进入μVision软件环境,选择建立新工程文件,即可开始输入源程序。

2.完成汇编、编译、连接,若有错误,则修改源程序,直至编译、连接通过为止。

3.接上实验板上的电源。

3.运行“STC-ISPV39.EXE”,将程序代码下载到实验板的单片机中。

操作的顺序是:

1)选择单片机(MCUTYPE)型号。

如:

“STC89C51RC”要与实验板上所装单片机的型号一至。

2)打开文件(OpenFile)。

即把要下载到单片机的程序文件(已通过编译了的机器码文件——二进制(.Bin)或十六进制(.Hex)的)调到“文件缓冲区”,这时可看到右边的“文件缓冲区”有数字变化。

3)选择串行通信口。

选对时,软件上的小灯会变绿。

否则小灯是灰色。

且在左下窗口提示“出错信息”。

4)下载:

按“Download/下载”按键下载。

5)把实验板上的供电的直流电源拔掉或关掉3秒钟再插入或打开电源(为单片机上电复位)。

4.观察单片机运行情况,验证程序是否能完成题目给出的控制要求,若不能达到要求,分析原因、查找错误,修改源程序,再次汇编、连接,重新下载、运行,直至达到题目的控制要求。

六、

参考程序流程图

 

实验内容1流程图

实验内容2流程图

 

键盘处理程序流程图

七、相应的程序

1.按键点亮对应相应的二极管。

ORG0000H

MAIN:

MOVP2,#10H//二极管一段高电平,点亮准备

STA:

MOVA,#11101111B//按键测试

MOVR7,#05H

STA1:

MOVP3,A

DJNZR7,NEXT

SJMPSTA//为0时则跳回......

NEXT:

RLA

PRESS0:

JBP3.3,PRESS1//无按键等待

LCALLDELAY30MS//去抖动

JBP3.3,PRESS0//测试是哪一行接通了!

JNBP3.3,$

SJMPPRE_P33

PRESS1:

JBP3.2,STA1//无按键等待,如果P3.2为1时,则说明木有按过.....

LCALLDELAY30MS//去抖动

JBP3.2,PRESS1

JNBP3.2,$

SJMPPRE_P32

PRE_P33:

DECR7//点亮对应的LED灯

MOVA,R7

MOVDPTR,#TABLE

MOVCA,@A+DPTR

MOVP0,A

SJMPSTA

PRE_P32:

DECR7

MOVA,R7

MOVDPTR,#TABLE1

MOVCA,@A+DPTR

MOVP0,A

SJMPSTA

DELAY30MS:

MOVR4,#55

DELAY:

MOVR3,#250

DJNZR3,$//1.085us(指令周期)*2*250+2=547.5us

DJNZR4,DELAY

RET

TABLE:

DB0F7H,0FBH,0FDH,0FEH//第一行按键,对应LED左边的4个灯

TABLE1:

DB7FH,0BFH,0DFH,0EFH//第二行按键,对应LED右边的4个灯

END

2.按键让数码管从00-99计数。

ORG0000H

STA:

MOVDPTR,#TABLE

MOVP2,#0H//关闭数码管选通

MOVP3,#0FFH

MOVR0,#0H//R0作为计数

KEY:

MOVA,#0EFH//按键扫描初始化第一列

MOVR1,#4H

KEYB:

MOVP3,A

JNBP3.2,KEYC

JNBP3.3,KEYC

JMPMUY//该列无按键按下,进入下一列扫描

KEYC:

LCALLDELAY20

JNBP3.2,KEYCC

JNBP3.3,KEYCC

JMPMUY

KEYCC:

JNBP3.2,$

JNBP3.3,$

INCR0//按一次,增加R0的值

MUY:

RLA

DJNZR1,KEYB//一轮扫描结束后

MOVA,R0

CJNEA,#100,DIS//判断是否达到100,不是,转到显示区

MOVA,#0//是,重新给A赋值0

MOVR0,#0

DIS:

MOVB,#10

DIVAB//把A/10的商给A,余数给B

MOVCA,@A+DPTR

MOVP0,A

MOVP2,#4//十位显示

LCALLDELAY1

MOVA,B

MOVCA,@A+DPTR

MOVP0,A

MOVP2,#8//个位显示

LCALLDELAY1

JMPKEY

DELAY1:

MOVR6,#2

DE11:

MOVR5,#248

DJNZR5,$

DJNZR6,DE11

RET

DELAY20:

MOVR7,#10

DJNZR7,DELAY1

RET

TABLE:

DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

END

八、思考题

1.按键程序为什么要有去抖动功能,如何去抖动?

答:

按键由于机械弹性的作用,键在闭合与断开的瞬间均有抖动过程,所以需要去抖动功能,去抖动有软件和硬件的方法,比如采用滤波电路防抖等硬件方法,软件去抖是检测到有键按下,执行一个10-20ms的延时程序,再确认该键是否仍保持闭合状态,若仍闭合则确认为此键按下,消除抖动影响。

2.在显示时,为什么要延时1ms,这个时间过长或过短,会出现什么现象?

答:

因为人眼看事物有一个暂留效果,如果延时过短的话,可能看不到led灯或者数码管的变化,如果延时太长,则一直保持那原来的效果,没有变化。

 

交通灯控制实验

一、实验目的

通过实验熟悉51单片机的并行I/O口,并掌握它们的应用。

二、实验内容及原理

模拟实现一个路口交通灯管理

在路口当中,一条为“干线”,另一条为“支线”。

两个方向上各设有红、黄、绿3盏交通灯。

一般情况下(初始状态),干线亮绿灯,支线亮红灯。

当支线上有三辆车到达路口(用按键按下模拟一辆车到达),则6秒后,干线亮黄灯,持续3秒后,转为干线亮红灯,支线亮绿灯,过24秒后,支线转黄灯亮,3秒后,回到初始状态。

交通灯实验程序

ORG0000H

STA:

MOVP0,#11011011B//干线亮绿灯,支线亮红灯

MOVP2,#0001000B//选通LED

MOVP3,#11101111B//K1列线置0

MOVR7,#3

STA1:

JBP3.3,$//无按键等待

LCALLDELAY30MS//去抖动

JBP3.3,STA1

JNBP3.3,$//等键释放

DJNZR7,STA1

MOVR6,#200

STA2:

LCALLDELAY30MS//延时30MS

DJNZR6,STA2//延时6秒

MOVP0,#10111011B//干线亮黄灯,支线亮红灯

MoVR6,#100

STA3:

LCALLDELAY30MS

DJNZR6,STA3//延时3秒

MOVP0,#01111110B//干线亮红灯,支线亮绿灯

MOVR5,#4

STA4:

MOVR6,#200

STA5:

LCALLDELAY30MS

DJNZR6,STA5

DJNZR5,STA4//延时24秒

MOVP0,#01111101B//干线亮绿灯,支线亮黄灯

MOVR6,#100

STA6:

LCALLDELAY30MS

DJNZR6,STA6//延时3秒

LJMPSTA

DELAY30MS:

MOVR4,#55

DELAY:

MOVR3,#250

DJNZR3,$//1.085us(指令周期)*2*250+2=547.5us

DJNZR4,DELAY

RET

 

定时与中断实验

一、实验目的

1.通过实验掌握51单片机的定时/计数器的应用。

2.掌握51单片机的中断原理及应用。

3.进一步学习系统应用程序的设计和调试方法

二、实验设备

PC机一台、实验教学板一块。

图2-1

三、实验内容

实验线路如图2-1,通过定时器的定时,产生一定频率的波形信号,经P2.5输出,驱动蜂鸣器,便可发出某一频率的音调,若按乐曲的音调连续发出,并使其按节拍变化,便可演奏一首乐曲。

实验要求:

编程实现演奏一首乐曲

C调常用音频及其对应频率如下表:

音符

频率

T值

音符

频率

T值

SI

494

64603

5So

784

64948

1DO

523

64654

6La

880

65012

2Re

587

64751

7Si

987

65069

3Mi

659

64837

DO

1046

65095

4Fa

698

64875

RE

1174

65143

定时器初值计算方法:

由于软件是通过定时器溢出后对P2.5取反产生方波,故定时器溢出时间为1//2f,则计数器计数初值为:

X=65536—n=65536—(1/2f)/12/fosc=65536—fosc/24f

电路板上的晶振频率为11.0593MHZ,根据不同音调的频率值,就可以计算出上表的初值。

用乐曲最短的1/4拍为一个基本节拍时间,定为0.5秒,基本节拍时间由另一个定时器产生,设此定时器定时时间为50ms,定时时间常数(计数器初值)=65536—(50000*12/11.0593)=02C13H,可以分别通过该定时中断10、20、40、80次满足1/4拍、1/2拍、1拍、2拍的定时要求。

软件编程时,要先将乐谱转换成包含有音符和音长信息的代码,然后,以查表方式通过乐谱代码控制喇叭演奏出乐曲。

具体方法如下:

(1)乐谱代码用字节结构,字节高4位代表音符,从SI到RE分别用0到9表示;字节低4位代表该音符的节拍,用1、2、3、、、8分别表示1/4拍、1/2拍、1拍、、、4拍,按照这样的规则,将整段音乐变换成相应的代码数据表,最后一个字节内容为00H,代表数据表的结束。

(2)在程序执行时按顺序查表,从字节数据中取出音符代码和节拍代码,查频率表得该音符对应频率的定时初值,再根据节拍代码控制音长,启动两个定时器后,即可发出要求的音,这样就控制演奏出完整的乐曲。

四、实验汇编主程序:

ORG0000H

RESET:

AJMPMAIN

ORG000BH//定时器0中断入口

AJMPTT0P

ORG001BH//定时器1中断入口

AJMPTT1P

ORG0030H

MAIN:

MOVSP,#70H//设堆栈区

CLRP2.5//关声音

MOVIE,#8AH//开中断

AJMPKEY//调用键盘程序段

KEY:

MOVP3,#0F0H

MOVA,P3

ACALLDELAY

CJNEA,P3,SI//不相等时,跳到SI

AJMPKEY//相等时,循环

SI:

MOVR4,P3

ACALLDELAY

MOV51H,R4

CJNEA,51H,COUNTKEY

AJMPKEY

COUNTKEY:

MOVA,P3

ANLA,#0F0H

MOVR3,A

MOVP3,#0CH

MOVA,P3

ANLA,#0CH

ADDA,R3

MOV52H,A

MOVDPTR,#KEYZHI

MOVR1,#00H

SUAN:

MOVA,R1

MOVCA,@A+DPTR

CJNEA,52H,JIN

CJNEA,#78H,TT0PCS//按键8播音乐

AJMPBOYIN//转到播音乐程序

AJMPTT0PCS

JIN:

INCR1

AJMPSUAN

TT0PCS:

MOVIE,#8AH

MOVTMOD,#11H

MOVDPTR,#TABL2

MOVA,R1

RLA

MOVR2,A

MOVCA,@A+DPTR

MOVTH0,A

MOV41H,A

MOVA,R2

INCA

MOVCA,@A+DPTR

MOVTL0,A

MOV40H,A

SETBTR0

HERE:

MOVA,P3

ANLA,#0FH

CJNEA,#0FH,HERE

CLRP2.5

CLRTR0

AJMPMAIN//按键释放,关声音关定时器,转到主程序

BOYIN:

MOVIE,#8AH//开中断

MOVR1,#0H//乐谱数据偏移量

ACALLPTOM//调乐曲输出子程序

CLRTR0

CLRTR1

CLRP2.5

HERR:

AJMPHERR//程序结束

PTOM:

MOVTMOD,#11H//设定定时器的工作方式

PTOM1:

MOVDPTR,#MUCI//乐谱的首地址送DPTR

MOVA,R1

MOVCA,@A+DPTR//取乐谱数据

JNZPTOM2//如果数据为00H,则结束

RET

PTOM2:

MOVR2,A//在R2中暂存

ANLA,#0F0H//取得音符数据

SWAPA//把A的高四位和低四位对调

RLA//因为音符是字类型,需要两个字节,所以要乘2

MOVR3,A

MOVDPTR,#TABL//频率表

MOVCA,@A+DPTR//取得频率表的高8位

MOVTH0,A

MOV41H,A

MOVA,R3

INCA

MOVCA,@A+DPTR//取得频率表的低8位

MOVTL0,A

MOV40H,A

MOVA,R2

ANLA,#0FH//保留节拍数据

MOVB,#5//乘8得定时的中断次数

MULAB

MOVR0,A

MOVTH1,#4CH//50MS定时的初值

MOVTL1,#00H

SETBTR1//启动定时器

SETBTR0

HERE2:

CJNER0,#0H,HERE2//判断当前节拍是否已完成

INCR1//如果完成则取下一个数据

AJMPPTOM1

TT0P:

PUSHAcc//定时器0中断服务程序

PUSHPSW

CPLP2.5

MOVTL0,40H

MOVTH0,41H

POPPSW

POPAcc

RETI

TT1P:

MOVTH1,#4cH//定时器1中断服务程序,50MS定时的初值

MOVTL1,#00H

DECR0

RETI

DELAY:

MOVR7,#10//延时程序段

D1:

MOVR6,#50

DJNZR6,$

DJNZR7,D1

RET

TABL2:

DW64654,64751,64837,64875,64948,65012,65069,65095

TABL:

DW64603,64654,64751,64837,64875,64948,65012,65069,65095,65143

KEYZHI:

DB0E4H,0D4H,0B4H,74H,0E8H,0D8H,0B8H,78H

MUCI:

DB54H,32H,52H,88H,64H,82H,62H,58H,54H,12H,22H,34H

DB22H,12H,2CH,54H,32H,52H,86H,72H,64H,84H,58H,54H

DB22H,32H,46H,02H,1CH,64H,84H,88H,74H,62H,72H,88H

DB62H,72H,82H,62H,62H,52H,32H,12H,28H,28H,54H,32H

DB52H,84H,72H,64H,86H,58H,54H,22H,32H,46H,02H,1CH

DB00H

END

 

串行通信实验

一、实验目的

1.了解51单片机串行口的结构、串行通讯的原理。

2.掌握51单片机与PC机之间通讯的方法。

3.学习系统应用程序的设计和调试

二、实验设备

PC机一台、实验教学板一块。

三、实验原理

51单片机的串行接口是全双工的,它能做异步接收器/发送器(UART),也能做同步移位寄存器使用。

在做UART使用时,相关的寄存器有SBUF、SCON、和PCON中的波特率倍增位SMOD。

SBUF是数据发送缓冲器和接收缓冲器,逻辑上用同一个地址,物理上是分开的,用读写操作来选择。

SCON是串行口控制寄存器,用于设定串行口的工作方式;保存方式2和方式3的第9位数据;存放发送、接收的中断标志。

在串行通讯的方式1和方式3中,通信的波特率是可以设置的,满足下式:

PC机的串行通讯口是借助通用异步接收发送器8250(或16C550等)实现的,可使用comdebug.exe等提供了有关串行口的收、发操作窗口的软件实现通讯。

PC机的串行通讯采用RS232电平,因此要求单片机的实验板也要配置RS232接口,解决逻辑电平的配接。

如果通讯距离较远,则要配接调制解调器。

四、实验内容

1,自发自收

用一根短路线,将实验板中RS232插口的RXD和TXD两个插孔短路。

然后编程设定串行口为工作方式1,传送55H和0AAH两个数据。

实验要求:

程序采用查询方式。

每传送、接收一个数据,做一次检查,看是否正确,若两次都正确,则在显示器上显示“GOOD”,若不正确,则不显示,并要重新传送。

2,单片机与PC机的通信

先使用通讯电缆将单片机的RS232接口与PC机的COM1口连接,PC机起动并运行comdebug.exe软件,窗口上设置波特率为1200,8位数据、一个停止位。

单片机端也采用工作方式1,波特率为1200,完成单片机与PC机的通信。

实验要求:

编程实现先由单片机发送8个数据,01、02、03、04、05、0ABH、0CDH、0EFH。

然后进入接收状态,在PC机发送窗口上设置发送数据,点击发送按钮,单片机接收数据后将数据显示在显示器上。

五、程序参考流程图

 

 

(a)自发自收程序流程图(b)与PC机通讯程序流程图

六、汇编程序

1.自发自收

ORG0000H

MOVTMOD,#20H//设置计时器工作于方式2

MOVTL1,#0E8H//波特率为1200

MOVTH1,#0E8H

SETBTR1

MOVSCON,#50H

MOVP2,#0FH

MOVP3,#11101111B//设置按键1

START:

KEY1:

LCALLKEY_STATE//调用按键程序

TX_1:

MOVA,#55H

MOVSBUF,A

WAIT1:

JBCTI,REX_YES1//TI为1时,转移,并清零

SJMPWAIT1

REX_YES1:

JBCRI,NEXT1//测试接收中断RI是否为1,

SJMPREX_YES1

NEXT1:

MOVA,SBUF//把SBUF的值送给A

CJNEA,#55H,KEY1//判断是否相等,不相等的话就悲剧了.......

MOVP0,#92H//相等的话,数码管显示“5555”

KEY2:

LCALLKEY_STATE//同上

TX_2:

MOVA,#0AAH//同上

MOVSBUF,A

WAIT2:

JBCTI,REX_YES2

SJMPWAIT2

REX_YES2:

JBCRI,NEXT2

SJMPREX_YES2

NEXT2:

MOVA,SBUF

CJNEA,#0AAH,KEY2//判断是否相等

MOVP0,#88H//相等的话,数码管显示“AAAA”

JMPSTART

DELAY30MS:

MOVR4,#55

DELAY:

MOVR3,#250

DJNZR3,$//1.085us(指令周期)*2*250+2=547.5us

DJNZR4,DELAY

RET

KEY_STATE:

JBP3.3,$//无按键等待

LCALLDELAY30MS//去抖动

JBP3.3,KEY_STATE//JB等于1转移

JNBP3.3,$//等键释放

RET

END

2.单片机与PC机的通信

ORG0000H

MOVTMOD,#20H//设置计时器工作于方式2

MOVTL1,#0E8H//波特率为1200

MOVTH1,#0E8H

SETBTR1//设置为1

MOVSCON,#50H

MOVDPTR,#TABLE

MOV30H,#00H//存储数码管码型

MOVR0,#08H

MOVP2,#

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

当前位置:首页 > 经管营销 > 经济市场

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

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