单片机实验报告.docx
《单片机实验报告.docx》由会员分享,可在线阅读,更多相关《单片机实验报告.docx(29页珍藏版)》请在冰豆网上搜索。
单片机实验报告
HefeiUniversity
单片机应用技术课程
综合实验报告
专业:
指导老师:
姓名:
学号:
2011-6-8
前言
单片机应用技术课程是一门理论与实践相结合的课程,本课程安排的实验旨在培养学生软硬件开发能力,用编程语言及硬件设备实现串、并行通讯、计数/定时、A/D、D/A等硬件接口的功能,进一步加深对常用硬件芯片的了解和应用,以及学习用单片机解决实际问题。
实验要求学生利用编程语言及硬件设备实现单片机的方案设计、程序编写、硬件连接、调试,从中体会具体硬件接口的应用技巧,进一步理解硬件接口芯片,逐步掌握单片机系统的开发和应用方法。
STARES598PCI提供实验仪具有与微机同步演示功能,允许学生在Windows操作系统下编写、编译、连接、错误定位、调试、观察、修改系统,不需要使用早期的PWB、TD等DOS下的调试环境。
通过本实验的学习,学生可以熟悉各种类型的接口芯片,汇编语言程序的编写、调试,充分锻炼动手及编程能力。
一、实验项目基本要求
实验一构建单片机最小系统和实验环境熟悉
三、实验内容
单片机最小系统实验:
1、熟悉单片机最小系统的组成和工作原理,熟悉KeilC51集成环境软件的安装和使用方法。
2、作出单片机最小系统的组成原理图,分析其各构成单元的工作原理。
存储单元数据传输实验
1、熟悉MCS51汇编指令。
2、进行存储单元数据传输实验,编写程序。
3、运行程序,验证译码的正确性。
实验二跑马灯实验及74HC138译码器
三、实验内容
跑马灯实验:
1、熟悉集成环境软件或熟悉KeilC51集成环境软件的安装和使用方法。
2、照接线图编写程序:
使用P1口控制G6区的8个指示灯,循环点亮,瞬间只有一个灯亮。
3、观察实验结果,验证程序是否正确。
74HC138译码器实验:
1、设计74HC138接口电路,编写程序:
使用单片机的P1.0、P1.1、P1.2控制74HC138的数据输入端,通过译码产生8选1个选通信号,轮流点亮8个LED指示灯。
2、运行程序,验证译码的正确性。
七、实验方法及步骤
跑马灯实验步骤:
1、设计接口电路。
2、编写程序或运行参考程序。
3、实验结果:
通过G6区的LED指示灯(8个指示灯轮流点亮),观察实验的输出结果是否正确。
译码器实验步骤:
1、设计接口电路。
2、调试程序,查看运行结果是否正确。
实验三8255控制交通灯实验
三、实验内容
1、设计8255接口电路,编写程序:
使用8255的PA0..2、PA5..7控制LED指示灯,实现交通灯功能。
2、连接线路验证8255的功能,熟悉它的使用方法。
七、实验内容及步骤
1、设计8255接口电路,并分析其工作原理。
2、观察实验结果,是否能看到模拟的交通灯控制过程。
实验四8253方波实验
三、实验内容
1、设计接口电路,编写程序:
使用8253的计数器0和计数器1实现对输入时钟频率的两级分频,得到一个周期为1秒的方波,用此方波控制蜂鸣器,发出报警信号,也可以将输入脚接到逻辑笔上来检验程序是否正确。
2、连接线路,验证8253的功能,熟悉它的使用方法。
七、实验方法及步骤
1、设计接口电路并分析工作原理。
2、测试实验结果:
三种方法选择其一:
蜂鸣器发出时有时无的声音;用逻辑笔测试蜂鸣器的输入端口;红绿灯交替点亮。
综合以上实验的基本要求,我们以两人为一组,采用B类来完成实验。
二、实验项目内容
实验一、构建单片机最小系统版和实验环境熟悉
1.单片机最小系统的组成原理图
电源电路
单片机最小系统的组成原理图
2.各功能块的划分与组成
(1)AT89S52
2条主电源引脚VCCGND;
2条外接晶体引脚XTAL1/2;
4条控制或与其他电源复用的引脚;
32条I/O引脚。
(2)电源电路
采用7805,将电源降至5V,提供芯片正常工作。
(3)晶振与复位
(a)时钟电路
89S52虽然有内部振荡电路,但要形成时钟,必须外部附加电路。
89S52单片机的时钟产生方法有两种。
内部时钟方式和外部时钟方式。
本设计采用内部时钟方式,利用芯片内部的振荡电路,在XTAL1、XTAL2引脚上外接定时元件,内部的振荡电路便产生自激振荡。
本设计采用最常用的内部时钟方式,即用外接晶体和电容组成的并联谐振回路。
振荡晶体可在1.2MHZ到12MHZ之间选择,我们采用的是11.0592MHZ的晶振。
电容值无严格要求,但电容取值对振荡频率输出的稳定性、大小、振荡电路起振速度有少许影响,CX1、CX2可在20pF到100pF之间取值,但在60pF到70pF时振荡器有较高的频率稳定性。
所以本设计中,振荡晶体选择6MHZ,电容选择65pF。
在设计印刷电路板时,晶体和电容应尽可能靠近单片机芯片安装,以减少寄生电容,更好的保证振荡器稳定和可靠地工作。
为了提高温度稳定性,应采用NPO电容。
(b)复位电路
89S52的复位是由外部的复位电路来实现的。
复位引脚RST通过一个斯密特触发器用来抑制噪声,在每个机器周期的S5P2,斯密特触发器的输出电平由复位电路采样一次,然后才能得到内部复位操作所需要的信号。
复位电路通常采用上电自动复位和按钮复位两种方式。
最简单的上电自动复位电路中上电自动复位是通过外部复位电路的电容充电来实现的。
只要Vcc的上升时间不超过1ms,就可以实现自动上电复位。
时钟频率用6MHZ时C取22uF,R取1KΩ。
除了上电复位外,有时还需要按键手动复位。
本设计就是用的按键手动复位。
按键手动复位有电平方式和脉冲方式两种。
其中电平复位是通过RST端经电阻与电源Vcc接通而实现的。
按键手动复位电路见图。
时钟频率选用6MHZ时,C取22uF,Rs取200Ω,RK取1KΩ。
(4)A/D转化
采用A/D0832实现由模拟信号向数字信号的转化功能。
ADC0832为8位分辨率A/D转换芯片,其最高分辨可达256级,可以适应一般的模拟量转换要求。
其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在0~5V之间。
芯片转换时间仅为32μS,据有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。
独立的芯片使能输入,使多器件挂接和处理器控制变的更加方便。
通过DI数据输入端,可以轻易的实现通道功能的选择。
正常情况下ADC0832与单片机的接口应为4条数据线,分别是CS、CLK、DO、DI。
但由于DO端与DI端在通信时并未同时有效并与单片机的接口是双向的,所以电路设计时可以将DO和DI并联在一根数据线上使用。
当ADC0832未工作时其CS输入端应为高电平,此时芯片禁用,CLK和DO/DI的电平可任意。
当要进行A/D转换时,须先将CS使能端置于低电平并且保持低电平直到转换完全结束。
此时芯片开始转换工作,同时由处理器向芯片时钟输入端CLK输入时钟脉冲,DO/DI端则使用DI端输入通道功能选择的数据信号。
在第1个时钟脉冲的下沉之前DI端必须是高电平,表示启始信号。
在第2、3个脉冲下沉之前DI端应输入2位数据用于选择通道功能。
当此2位数据为“1”、“0”时,只对CH0进行单通道转换。
当2位数据为“1”、“1”时,只对CH1进行单通道转换。
当2位数据为“0”、“0”时,将CH0作为正输入端IN+,CH1作为负输入端IN-进行输入。
当2位数据为“0”、“1”时,将CH0作为负输入端IN-,CH1作为正输入端IN+进行输入。
到第3个脉冲的下沉之后DI端的输入电平就失去输入作用,此后DO/DI端则开始利用数据输出DO进行转换数据的读取。
从第4个脉冲下沉开始由DO端输出转换数据最高位DATA7,随后每一个脉冲下沉DO端输出下一位数据。
直到第11个脉冲时发出最低位数据DATA0,一个字节的数据输出完成。
也正是从此位开始输出下一个相反字节的数据,即从第11个字节的下沉输出DATD0。
随后输出8位数据,到第19个脉冲时数据输出完成,也标志着一次A/D转换的结束。
最后将CS置高电平禁用芯片,直接将转换后的数据进行处理就可以了。
软件编程:
SETBADDI;初始化通道选择
NOP
NOP
CLRADCS;拉低/CS端
NOP
NOP
SETBADCLK;拉高CLK端
NOP
NOP
CLRADCLK;拉低CLK端,形成下降沿
MOVA,B
MOVC,ACC.1;确定取值通道选择
MOVADDI,C
NOP
NOP
SETBADCLK;拉高CLK端
NOP
NOP
CLRADCLK;拉低CLK端,形成下降沿2
MOVA,B
MOVC,ACC.0;确定取值通道选择
MOVADDI,C
NOP
NOP
SETBADCLK;拉高CLK端
NOP
NOP
CLRADCLK;拉低CLK端,形成下降沿3
SETBADDI
NOP
NOP
MOVR7,#8;准备送下后8个时钟脉冲
AD_1:
MOVC,ADDO;接收数据
MOVACC.0,C
RLA;左移一次
SETBADCLK
NOP
NOP
CLRADCLK;形成一次时钟脉冲
NOP
NOP
DJNZR7,AD_1;循环8次
MOVC,ADDO;接收数据
MOVACC.0,C
MOVB,A
MOVR7,#8
AD_13:
MOVC,ADDO;接收数据
MOVACC.0,C
RRA;左移一次
SETBADCLK
NOP
NOP
CLRADCLK;形成一次时钟脉冲
NOP
NOP
DJNZR7,AD_13;循环8次
CJNEA,B,ADCONV;数据校验
SETBADCS;拉高/CS端
CLRADCLK;拉低CLK端
SETBADDO;拉高数据端,回到初始状态
RET
4.实验总结
作为第一个实验算是我们单片机实训的重要基础,无论是构建单片机的最小系统,还是一步步焊接最小系统板。
基本模块有:
复位电路,晶振电路,上拉电阻,下载口等主要模块,包括电源电路还有就是AT89S52的芯片。
另外对于实验环境的熟悉,我们觉得还是很有必要的。
毕竟如果真的要进行试验的话,单片机只是一个最小控制器,对于后面的负载的实验还需要一些外围扩展器件。
经过一周的时间基本完成单片机最小系统板的焊接部分和单片机的工作原理,以及对单片机外围电路的焊接,知道了硬件部分的重要性,单片机最小系统板的焊接最主要是晶振部分的焊接,它为单片机提供了做工作的频率,是单片机的心脏。
实验二、跑马灯实验及74LS138译码
一、单片机P1.0口控制的跑马灯实验
1、系统电路及软件仿真图:
2、程序流程图:
3、实验程序:
ORG0000H
AJMPSTART
START:
MOVP1,#0FFH;小灯全亮
MOVR2,#16;逐个点亮小灯循环2次
;*******第一种状态:
逐个点亮小灯************************
L1:
MOVP1,A
LCALLDELAY1S
RLA;左移1位
DJNZR2,L1
MOVA,#7FH
LCALLDELAY1S
MOVR2,#16
L2:
MOVP1,A
LCALLDELAY1S
RRA;右移1位
DJNZR2,L2
;*******第二种状态:
全亮全灭交替************************
MOVR2,#2
L3:
MOVP1,#00H
LCALLDELAY1S
MOVP1,#0FFH
LCALLDELAY1S
DJNZR2,L3
;*******第三种状态:
从两头向中间一次点亮**************
MOVR2,#3
L4:
MOVP1,#7EH
LCALLDELAY1S
MOVP1,#0BDH
LCALLDELAY1S
MOVP1,#0DBH
LCALLDELAY1S
MOVP1,#0E7H
LCALLDELAY1S
DJNZR2,L4
;*******第四种状态:
从中间向两边一次点亮*************
MOVR2,#3
L5:
MOVP1,#11100111B
LCALLDELAY1S
MOVP1,#11000011B
LCALLDELAY1S
MOVP1,#10000001B
LCALLDELAY1S
MOVP1,#00H
LCALLDELAY1S
DJNZR2,L5
MOVR2,#16
MOVA,#0FEH
LJMPL1
;*******延时1S*************
DELAY1S:
MOVR4,#2H
D1:
MOVR5,#100H
D2:
MOVR3,#248
D3:
DJNZR3,D3
DJNZR5,D2
DJNZR4,D1
RET
END
二、利用74LS138译码器的流水灯实验
1、74LS138控制流水灯系统电路及软件仿真图如下:
2、程序流程图:
3、74LS138控制流水灯实验程序:
ORG0000H
START:
MOVA,#00H
START1:
MOVP1,A
LCALLDELAY1S
INCA;A加1送A
LJMPSTART1
;***********延时1S******************
DELAY1S:
MOVR4,#20
L3:
MOVR2,#100
L1:
MOVR3,#248
L2:
DJNZR3,L2
DJNZR2,L1
DJNZR4,L3
RET
END
三、实验调试及结论
四、实验总结:
在本次实验中,我们首先借鉴了所搜集的资料当中的部分思想,实现了流水灯的功能。
随后,在弄懂了原理的基础之上,我们进一步深化和改进,让流水灯能够按照我们的要求闪烁,相对来说也学到了不少东西。
紧接着我们使用了74L138译码器再次实现了流水灯的功能。
74L138译码器的功能较为简单,在模电中我们曾接触过,在这里,通过74L138译码器的译码作用,我们只使用了3个I/O口就完成了流水灯的控制,大大的节约了单片机I/O口的资源,使资源的配置更加合理,也提升了实际的使用价值。
实验三8255控制交通灯实验
一、实验原理
交通灯的变化规律是:
先假定一个十字路口为东南西北走向交通灯的初始状态为状态1,东西方向绿灯通车,南北方向红灯。
经过过一段时间(3S)转换状态2,东西方向黄灯闪亮,延时2S,南北方向仍然红灯。
再转换到状态3,东西方向红灯通车,南北方向绿灯。
过一段时间(3S)转换到状态4,南北方向黄灯闪亮,延时2S,东西方向仍然红灯。
最后循环至南北红灯,东西绿灯。
实验原理参考图:
2、软件流程图
三、实验源程序代码
CONTROLEQU7FFFH
PORT_AEQU7FFCH
ORG0000H
N0:
;8255初始化
MOVDPTR,#7FFFH
MOVA,#88H
MOVX@DPTR,A
;四个红灯亮
N1:
MOVDPTR,#7FFCH
MOVA,#36H
MOVX@DPTR,A
;5秒延时
MOV2AH,#05H
MOVDPTR,#7FFCH
;东西绿灯,南北红灯
MOVDPTR,#7FFCH
MOVA,#35H
MOVX@DPTR,A
;19秒延时
MOV2AH,#19H
LCALLDELAY
MOVP2,#3FH
;东西黄灯闪,南北红灯
N2:
MOVDPTR,#7FFCH
MOVA,#33H
MOVX@DPTR,A
LCALLDELAY1S
MOVA,#37H
MOVX@DPTR,A
LCALLDELAY1S
MOVA,#33H
MOVX@DPTR,A
LCALLDELAY1S
MOVA,#37H
MOVX@DPTR,A
LCALLDELAY1S
MOVA,#33H
MOVX@DPTR,A
LCALLDELAY1S
MOVA,#37H
MOVX@DPTR,A
LCALLDELAY1S
;东西红灯,南北绿灯
MOVDPTR,#7FFCH
MOVA,#2EH
MOVX@DPTR,A
;19秒延时
MOV2AH,#19H
LCALLDELAY
MOVP2,#3FH
;东西红灯,南北黄灯闪
N3:
MOVDPTR,#7FFCH
MOVA,#1EH
MOVX@DPTR,A
LCALLDELAY1S
MOVDPTR,#7FFCH
MOVA,#3EH
MOVX@DPTR,A
LCALLDELAY1S
MOVA,#1EH
MOVX@DPTR,A
LCALLDELAY1S
MOVDPTR,#7FFCH
MOVA,#3EH
MOVX@DPTR,A
LCALLDELAY1S
MOVA,#1EH
MOVX@DPTR,A
LCALLDELAY1S
MOVDPTR,#7FFCH
MOVA,#3EH
MOVX@DPTR,A
LCALLDELAY1S
LJMPN1;重复东西通行
DELAY:
MOVR7,2AH
NEXT:
MOVA,R7
MOVB,#10
DIVAB
MOVDPTR,#TABLE
MOVCA,@A+DPTR
MOVP1,A
MOVA,B
MOVCA,@A+DPTR
MOVP2,A
LCALLDELAY1S
DECR7
MOVA,R7
CJNEA,#00,NEXT
DELAY1S:
MOVR5,#100
D2:
MOVR6,#20
D1:
MOVR3,#248
DJNZR3,$
DJNZR6,D1
DJNZR5,D2
RET
;’0’~’f’字符七段LED代码表
TABLE:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
;---------------------------------------------
四、程序仿真图:
五、实验小结
通过本次交通灯实验,学会了使用8255芯片的初始化和编程方法。
同时认识到通过8255实现了I/O口的扩展。
本实验使用的是8255的方式0。
利用8255完成交通灯的四中状态切换。
第一种状态是东西方向是绿灯,南北方向是红灯。
第二种状态是东西方向是黄灯并且闪烁,南北方向是红灯。
第三种状态是东西方向是红灯,南北方向是绿灯。
第四种状态是东西方向是红灯,南北方向是黄灯,最后变到第一种状态。
交通灯的实现,难点有两个点。
一是交通灯的工作状态。
通过观察实际交通灯,确定了上述的四种状态。
二是如何用汇编程序来描述这四种状态。
在实现具体的硬件时,采用8255控制十二个LED,三个一组,分成四组来模拟实际交通灯。
其中的对面两组状态变化是相同一致的。
在完成仿真后在硬件电路中调试时,发现了一个问题。
显示的状态不对。
经过检查电路后发现电路的连线错了。
重新调试后,发现状态对了,但是有一组灯出现了问题。
其中的一个灯不亮。
经过修改程序和软件仿真,没有发现原因何在。
后来把LED换了,可能硬件出了问题,最后结果是正确的。
软件到硬件,再由硬件到软件。
通过问题的解决,我对程序和电路有了更深的认识和理解。
交通灯在我们的生活中随处可见,一个好的交通秩序与交通灯的使用息息相关,这也反映了交通灯在我们生活中扮演的重要角色。
在之前的微机实验中,我们也曾使用汇编语言做过交通灯的试验,这次则运用单片机对8255进行控制实现交通灯的功能,两者看起来有几分相似,但实际做起来却还有些本质差异。
在本次试验中,我们选用了8255的方式0工作方式,再度复习了微机原理中8255芯片相关知识,这对我们前面学习的知识是一个很好的巩固复习。
交通灯的设计对我们的逻辑思维是一个很好的锻炼,先亮哪些灯,后亮哪些灯,哪些灯同时亮,这些都是我们必需先在大脑中考虑清楚的,这样在编写程序中才能有条不紊的让所有的灯按要求亮灭。
在试验中,我们添加了两种延时,用来控制交通灯不同灯亮灭的时间,从而实现了交通灯的功能。
8253方波实验
一、实验流程图如下:
1、主程序流程图实验程序流程图如下:
二、软件仿真图如下:
三、实验总结:
本实验使用8253的计数器0和计数器1实现对输入时钟的两次分频。
得到一个周期为1秒的方波。
然后用此方波控制LED的闪亮。
首先由单片机定时器产生一个10K的方波。
将此方波作为时钟信号送给8253的通道0,通过分频作为通道1的时钟信号进行二次分频。
最后得到所要的频率。
通过8253的连线和程序的编写,我学会了8253芯片的使用方法。
学会如何用8253产生特定频率的方波。
综合实验总结
通过构建单片机最小系统和实验环境熟悉实验,熟悉了单片机最小系统的组成和工作原理,以及KeilC51集成环境软件的使用方法。
通过跑马灯实验及74HC138译码器实验,熟悉了74HC138译码器芯片的工作原理。
熟悉MCS51汇编指令,能看懂一些简单的程序,控制硬件。
通过8255控制交通灯实验了解了8255芯片的工作原理,熟悉了其初始化编程方法以及输入、输出程序设计技巧。
学会了使用8255并行接口芯片实现各种控制功能,如本实验(控制交通灯)等。
并且熟悉了8255内部结构和与单片机的接口逻辑,熟悉了8255芯片的3种工作方式以及控制字格式。
通过8253方波实验了解了8253的内部结构、工作原理;了解了8253与单片机的接口逻辑;熟悉8253的控制寄存器和初始化编程方法,熟悉8253的6种工作模式。
通过本次实验的学习充分锻炼我们的动手及编程能力。
四、实验程序如下:
ORG0000H
AJMPSTART
ORG000BH;T1中断服务程序入口地址
AJMPT0INT
START:
MOVDPTR,#0FFFFH
MOVA,#00100101B;选择计数器0,只读写计数器高字节,方式2,BCD码计数
MOVX@DPTR,A
;***********计数器0对P1.0口送来的脉冲进行100次分频*********
MOVA,#01H;写计数器0的高字节
MOVDPTR,#3FFFH
MOVX@DPTR,A
MOVA,#01010111B;选择计数器1,只读写计数器低字节,方式3,BCD码计数
MOVDPTR,#0FFFFH
MOVX@DPTR,A
;***********计数器1对计数器0送来的脉冲进行10次分频*********
MOVA,#10H
MOVDPTR,#7FFFH
MOVX@DPTR,A
MOVSP,#60H;初始化程序,把堆栈的栈顶部上调,以避开工作寄存器区
MOVTMOD,#00H;设置T0工作于定时方式1
MOVTH0,#0F0H;设置加