单片机实训报告.docx

上传人:b****2 文档编号:18116131 上传时间:2023-08-13 格式:DOCX 页数:28 大小:316.47KB
下载 相关 举报
单片机实训报告.docx_第1页
第1页 / 共28页
单片机实训报告.docx_第2页
第2页 / 共28页
单片机实训报告.docx_第3页
第3页 / 共28页
单片机实训报告.docx_第4页
第4页 / 共28页
单片机实训报告.docx_第5页
第5页 / 共28页
单片机实训报告.docx_第6页
第6页 / 共28页
单片机实训报告.docx_第7页
第7页 / 共28页
单片机实训报告.docx_第8页
第8页 / 共28页
单片机实训报告.docx_第9页
第9页 / 共28页
单片机实训报告.docx_第10页
第10页 / 共28页
单片机实训报告.docx_第11页
第11页 / 共28页
单片机实训报告.docx_第12页
第12页 / 共28页
单片机实训报告.docx_第13页
第13页 / 共28页
单片机实训报告.docx_第14页
第14页 / 共28页
单片机实训报告.docx_第15页
第15页 / 共28页
单片机实训报告.docx_第16页
第16页 / 共28页
单片机实训报告.docx_第17页
第17页 / 共28页
单片机实训报告.docx_第18页
第18页 / 共28页
单片机实训报告.docx_第19页
第19页 / 共28页
单片机实训报告.docx_第20页
第20页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

单片机实训报告.docx

《单片机实训报告.docx》由会员分享,可在线阅读,更多相关《单片机实训报告.docx(28页珍藏版)》请在冰点文库上搜索。

单片机实训报告.docx

单片机实训报告

HEFEIUNIVERSITY

单片机实训

题目单片机应用技术实验

系  别电子信息与电气工程系

专  业自动化

班级自动化()班

成员

学  号

指导老师储忠

完成时间2011-6-20

实验内容及要求

实验一构建单片机最小系统和实验环境熟悉

1、熟悉单片机最小系统的组成和工作原理,熟悉KeilC51集成环境软件的安装和使用方法。

2、作出单片机最小系统的组成原理图,分析其各构成单元的工作原理。

3、熟悉MCS51汇编指令。

4、进行存储单元数据传输实验,编写程序。

5、运行程序,验证译码的正确性。

实验二跑马灯实验及74HC138译码器

跑马灯实验:

1、熟悉集成环境软件或熟悉KeilC51集成环境软件的安装和使用方法。

2、8个指示灯,循环点亮,瞬间只有一个灯亮。

3、观察实验结果,验证程序是否正确。

74HC138译码器实验:

1、设计74HC138接口电路,编写程序:

使用单片机的P1.0、P1.1、P1.2控制74HC138的数据输入端,通过译码产生8选1个选通信号,轮流点亮8个LED指示灯。

2、运行程序,验证译码的正确性。

实验三8255控制交通灯实验

1、设计8255接口电路,编写程序:

使用8255的PA0..2、PA5..7控制LED指示灯,实现交通灯功能。

2、连接线路验证8255的功能,熟悉它的使用方法。

实验四8253方波实验

1、设计接口电路,编写程序:

使用8253的计数器0和计数器1实现对输入时钟频率的两级分频,得到一个周期为1秒的方波,用此方波控制蜂鸣器,发出报警信号,也可以将输入脚接到逻辑笔上来检验程序是否正确。

2、连接线路,验证8253的功能,熟悉它的使用方法。

 

实验一构建单片机最小系统和实验环境熟悉

一、单片机最小系统的组成原理图

二、单片机的工作原理

1.运算器

运算器包括算术逻辑运算单元ALU、累加器ACC、寄存器B、暂存器TMP、程序状态字寄存器PSW、十进制调整电路等。

它能实现数据的算术逻辑运算、位变量处理和数据传送操作。

(1)算术逻辑单元ALU

ALU在控制器根据指令发出的内部信号控制下,对8位二进制数据进行加、减、乘、除运算和逻辑与、或、非、异或、清零等运算。

它具有很强的判跳、转移、丰富的数据传送、提供存放中间结果以及常用数据寄存器的功能。

MCS-51中位处理具有位处理功能,特别适用于实时逻辑控制。

(2)累加器ACC

累加器ACC是8位寄存器,是最常用的专用寄存器,它既可存放操作数,又可存放运算的中间结果。

MCS—51系列单片机中许多指令的操作数来自累加器ACC。

累加器非常繁忙,在与外部存储器或I/O接口进行数据传送时,都要经过A来完成。

(3)寄存器B

寄存器B是8位寄存器,主要用于乘、除运算。

乘法运算时,B中存放乘数,乘法操作后,高8位结果存于B寄存器中。

除法运算时,B中存放除数,除法操作后,余数存于寄存器B中。

寄存器B也可作为一般的寄存器用。

(4)程序状态字PSW

程序状态字是8位寄存器,用于指示程序运行状态信息。

其中有些位是根据程序执行结果由硬件自动设置的,而有些位可由用户通过指令方法设定。

PSW中各标志位名称及定义如下:

位序

D7

D6

D5

D4

D3

D2

D1

D0

位标志

CY

AC

F0

RS1

RS0

OV

P

CY(PSW.7):

进(借)位标志位,也是位处理器的位累加器C。

在加减运算中,若操作结果的最高位有进位或有借位时,CY由硬件自动置1,否则清“0”。

在位操作中,CY作为位累加器C使用,参于进行位传送、位与、位或等位操作。

另外某些控制转移类指令也会影响CY位状态(第三章讨论)。

AC(PSW.6):

辅助进(借)位标志位。

在加减运算中,当操作结果的低四位向高四位进位或借位时此标志位由硬件自动置1,否则清“0”。

F0(PSW.5):

用户标志位,由用户通过软件设定,决定程序的执行方式。

RS1(PSW.4),RS0(PSW.3):

寄存器组选择位。

用于设定当前通用寄存器组的组,其对应关系如下:

RS1

RS0

寄存器组

R0~R7地址

0

0

组0

00~07H

0

1

组1

08~0FH

1

0

组2

10~17H

1

1

组3

18~1FH

OV(PSW.2):

溢出标志位。

它反映运算结果是否溢出,溢出时OV=1;否则OV=0。

OV可作为条件转移指令中的条件。

PSW.1:

未定义位。

P(PSW.1):

奇偶标志位。

P=1,表示ACC中1的个数为奇数;否则P=0。

P也可以作为条件转移指令中的条件。

2.控制器

控制器包括定时控制逻辑(时钟电路、复位电路),指令寄存器,指令译码器程序计数器PC,堆栈指针SP,数据指针寄存器DPTR以及信息传送控制部件等。

(1)时钟电路

MCS—51系列单片机芯片内部有一个高增益反相放大器,输入端为XTAL1,输出端为XTAL2,一般在XTAL1与XTAL2之间接石英晶体振荡器和微调电容,从而构成一个稳定的自激振荡器,就是单片机的内部时钟电路,如图(A)所示。

时钟电路产生的振荡脉冲经过二分频以后,才成为单片机的时钟信号。

电容C1和C2为微调电容,可起频率稳定、微调作用,一般取值在5~30pf之间,常取30pf。

晶振的频率范围是1.2MHz~12MHz,典型值取6MHz。

XTAL1接地,XTAL2接外部震荡器,外接信号应是高电平持续时间大于20ns的方波,且脉冲频率应低于12MHZ。

如图(B)所示。

(A)内部时钟电路(B)外部振荡源

(2)复位电路

对于使用12MHZ的晶振的单片机,复位信号持续时间应超过4μs才能完成复位操作。

产生复位信号的电路有上电自动复位电路和按键手动复位电路两种方式。

上电自动复位是通过外部复位电路的电容充电来实现的,该电路通过电容充电在RST引脚上加了一个高电平完成复位操作。

上电自动复位电路如图(a)所示。

按键手动复位电路。

按键手动复位是通过按键实现人为的复位操作,按键手动复位电路如图(b)所示。

复位后内部暂存器的状态如下:

PC

0000H

TCON

00H

ACC

00H

TL0

00H

PSW

00H

TH0

00H

SP

07H

TL1

00H

DPTR

0000H

TH1

00H

P0~P3

FFH

SCON

00H

IP

××000000B

SBUF

不定

IE

0×000000B

PCON

0×××0000B

TMOD

00H

(3)指令寄存器和指令译码器

指令寄存器中存放指令代码,CPU执行指令时,由程序存储器中读取的指令代码送入指令存储器,经译码器后由定时与控制电路发出相应的控制信号,完成指令所指定的操作。

4.程序计数器PC

PC是一个16位计数器,其内容为单片机将要执行的指令机器码所在存储单元的地址。

PC具有自动加1的功能,从而实现程序的顺序执行。

由于PC不可寻址的,因此用户无法对它直接进行读写操作,但可以通过转移、调用、返回等指令改变其内容,以实现程序的转移。

PC的寻址范围为64KB,即地址空间为0000~0FFFFH。

(4)堆栈指针SP

SP为8位寄存器,用于指示栈顶单元地址。

所谓堆栈是一种数据结构,它只允许在其一端进行数据删除和数据插入操作的线性表。

数据写入堆栈叫入栈(PUSH),数据读出堆栈叫出栈(POP)。

堆栈的最大特点是“后进先出”的数据操作原则。

MCS-51系统复位后,SP初始化为07H。

(5)数据指针DPTR

数据指针DPTR为16位寄存器,它是MCS—51中唯一的一个16位寄存器。

编程时,既可按16位寄存器使用,也可作为两个8位寄存器分开使用。

DPH为DPTR的高八位寄存器,DPL为DPTR的低八位寄存器。

DPTR通常在访问外部数据存储器时作为地址指针使用,寻址范围为64KB。

三、实验小结

单片机系统电路的基本模块有:

复位电路,晶振电路,上拉电阻,下载口等主要模块。

其中P0口作为输出使用必须对单片机的I/O口,因为P0为集电极开路,可以提高其功率和电平转换。

在单片机最小系统的构建中,EA脚拉高是非常必要的,它可以影响单片机的正常工作。

在检测单片机是否正常工作,可以通过检测晶振两端的信号的波形形状。

在单片机正常工作条件下,其信号为正弦波。

经过一周的时间基本完成单片机最小系统板的焊接部分和单片机的工作原理,以及对单片机外围电路的焊接,知道了硬件部分的重要性,单片机最小系统板的焊接最主要是晶振部分的焊接,它为单片机提供了做工作的频率,是单片机的心脏。

 

实验二跑马灯实验及74HC138译码器

一、实验原理

1、跑马灯

(1)参考实验原理图如下:

(跑马灯原理图)

(2)工作原理

给单片机的端口赋初值,点亮第一个LED,然后延时一段时间后,点亮下一个LED,依次循环下去。

形成动态闪亮的效果。

2、138译码器电路

74LS138译码器:

图874LS138译码器芯片图

74LS138为3线-8线译码器,共有54/74S138和54/74LS138两种线路结构型式。

其工作原理如下:

(1)当一个选通端E1为高电平,另两个选通端

为低电平时,可将地址端A0、A1、A2的二进制编码在Y0至Y7对应的输出端以低电平译出。

比如:

A0A1A2=110时,则Y6输出端输出低电平信号。

(2)利用E1、E2和E3可级联扩展成24线译码器;若外接一个反相器还可级联扩展成32线译码器。

(3)若将选通端中的一个作为数据输入端时,74LS138还可作数据分配器。

(4)可用在8086的译码电路中,扩展内存。

(1)参考实验原理图如下:

(2)工作原理

根据138译码器的工作原理,当G1G2AG2B=111时,译码器工作,根据74LS138的3个译码信号A、B、C来选择Y0、Y1、Y2、Y3、Y4、Y5、Y6作为输出,各输出为低电平时,当共阳极的LED灯节高电平时,就会使相应的灯亮。

A、B、C三个信号由单片机的P1.0、P1.1和P1.2来提供,而P1.0、P1.1和P1.2的值是通过汇编程序设置初始值后,然后根据P1.0、P1.1和P1.2的值加1和循环来时8各LED灯循环点亮。

二、软件流程图

1、138译码器程序流程图:

三、源程序代码

1、跑马灯实验代码:

#include//定义8052寄存器的头文件

#include//包含_cror_()的头文件

#defineuintunsignedint//宏定义

#defineucharunsignedchar

voiddelay(uintn)//延时子程序

{

uchari;

while(n--)

for(i=0;i<255;i++);

}

voidmain()

{

uchari;

while

(1)

{

for(i=0;i<8;i++)//左右循环点亮

{

P1=i;

delay(300);//调用延时函数

}

for(i=6;i>0;i--)//上下循环点亮

{

P1=i;

delay(300);

}

}

}

四、实验调试:

将硬件电路焊制完成后,连接好电路,仔细检查无错误后,我们将流水灯程序下载至STC89C52单片机中,看到八个灯按顺序依次循环点亮。

但在焊制的过程中由于八个LED灯是按共阳极接法连入电路中,所以可以只焊一个470Ω的上拉电阻,此处上拉电阻的选择规则如下:

由于点亮LED需要大约7~11mA的电流,而电源供电为5V,所以由欧姆定律可知上拉电阻为714~454Ω,此处选择470Ω。

实验中的接线是非常重要的,在接线之前一定要用万用表检测线的好坏否则实验是很难成功的!

五、实验小结

通过LED,74LS138的焊接和它与单片机的连线,我对流水灯的电路有了清晰的认识,从概念上理解了如何用程序来控制流水灯。

在焊接的过程中我学会了一些焊接技巧,如何在焊接时走线使电路连线最简单,在焊接流水灯电阻时,我遇到一个问题,电阻值该如何选择?

在没有焊接电路我没有注意到这个问题,经过查资料,LED的压降为1.7V左右,LED的发光电流为2~3mA,R=(5-1.7)V/(2~3)mA.完成电路设计后,开始在KEIL中编写c语言程序。

从一个指令一个指令的写,到一句一句的写,最后到一段一段的写。

完成程序后,在Pritues中进行仿真。

通过不断的修改和调试,程序仿真是正确的。

最后通过下载器把程序烧到单片机里,发现达不到仿真的效果。

经过对程序的修改调试,在实际硬件电路中可以实现了。

这使我认识到计算机仿真和实际硬件电路还是有一定的差别。

在仿真中只能调试程序,并不能达到实际效果。

进过一次一次的下载,调试程序。

最后成功的达到预期的效果。

我对单片机的程序和控制有更深的认识和理解。

通过第一个单片机实验的完成,我体会到单片机控制的奇妙。

单片机可以实现我们的想法。

我感到很兴奋,很有趣。

这次实验最大的收获,第一、我熟悉了KEILProtuesde的联合使用。

第二、学会单片机程序编写和调试。

第三、我理解了软件与硬件的关系,单片机可以通过软件作用到硬件把我们的思想表达出来。

 

实验三8255控制交通灯实验

一、实验原理

1、交通灯原理

交通灯的变化规律是:

先假定一个十字路口为东南西北走向交通灯的初始状态为状态1,东西方向绿灯通车,南北方向红灯。

经过过一段时间(3S)转换状态2,东西方向黄灯闪亮,延时2S,南北方向仍然红灯。

再转换到状态3,东西方向红灯通车,南北方向绿灯。

过一段时间(3S)转换到状态4,南北方向黄灯闪亮,延时2S,东西方向仍然红灯。

最后循环至南北红灯,东西绿灯。

实验原理参考图:

2、8255芯片工作原理:

8255A是一个40引脚的双列直插式集成电路芯片。

按功能可把8255A分为三个逻辑电路部分,即:

口电路、总线接口电路和控制逻辑电路。

(1)口电路

8255A共有三个8位口,其中A口和B口是单纯的数据口,供数据I/O使用。

而C口则既可以作数据口,又可以作控制口使用,用于实现A口和B口的控制功能。

数据传送中A口所需的控制信号由C口高位部分(PC7~PC4)提供,因此把A口和C口高位部分合在一起称之为A组;同样理由把B口和C口低位部分(PC3~PC0)合在一起称之为B组。

(2)总线接口电路

总线接口电路用于实现8255A和单片微机的信号连接。

其中包括:

数据总线缓冲器和读/写控制逻辑,数据总线缓冲器为8位双向三态缓冲器,可直接和80C51的数据线相连,与I/O操作有关的数据、控制字和状态信息都是通过该缓冲器进行传送。

与读写有关的控制信号有

CS为片选信号(低电平有效),RD为读信号(低电平有效),WR为写信号(低电平有效),A0、A1为端口选择信号。

8255A共有四个可寻址的端口(即A口、B口、C口和控制寄存器),用二位地址编码即可实现选择。

参见下表。

读写端口表

RESET—复位信号(高电平有效)。

复位之后,控制寄存器清除,各端口被置为输入方式。

读写控制逻辑用于实现8255A的硬件管理:

芯片的选择,口的寻址以及规定各端口和单片微机之间的数据传送方向。

(3)控制逻辑电路

控制逻辑电路包括A组控制和B组控制,合在一起构成8位控制寄存器。

用于存放各口的工作方式控制字

8255A工作方式及数据I/O操作

(1)8255A的工作方式(实验用方式0)

方式0基本输入/输出方式

方式0下,可供使用的是两个8位口(A口和B口)及两个4位口(C口高4位部分和低4位部分)。

四个口可以是输入和输出的任何组合。

方式0适用于无条件数据传送,也可以把C口的某一位作为状态位,实现查询方式的数据传送。

(2)数据输入操作

用于输入操作的联络信号有:

STB(StroBe)—选通脉冲,输入,低电平有效。

当外设送来STB信号时,输入数据装入8255A的锁存器。

IBF(InputBufferFull)—输入缓冲器满信号,输出,高电平有效。

IBF信号有效,表明数据已装入锁存器,因此它是一个状态信号。

INTR(INTerruptRequest)—中断请求信号,高电平有效,当IBF数据输入过程:

当外设准备好数据输入后,发出信号,输入的数据送入缓冲器。

然后IBF信号有效。

如使用查询方式,则IBF即作为状态信号供查询使用;如使用中断方式,当信号由低变高时,产生INTR信号,向单片微机发出中断。

单片微机在响应中断后执行中断服务程序时读入数据,并使INTR信号变低,同时也使IBF信号同时变低。

以通知外设准备下一次数据输入。

(3)数据输出操作

用于数据输出操作的联络信号有:

ACK(ACKnowledge)—外设响应信号输入,低电平有效。

当外设取走输出数据,并处理完毕后向单片微机发回的响应信号为高,信号由低变高(后沿)时,中断请求信号有效。

向单片微机发出中断请求。

OBF(OutputBufferFull)——输出缓冲器满信号,输出,低电平有效。

当单片微机把输出数据写入8255A锁存器后,该信号有效,并送去启动外设以接收数据。

INTR—中断请求信号,输出,高电平有效。

数据输出过程:

外设接收并处理完一组数据后,发回ACK信号。

该信号使OBF变高,表明输出缓冲器已空。

如使用查询方式,则OBF可作为状态信号供查询使用;如使用中断方式,则当ACK信号结束时,INTR有效,向单片微机发出中断请求。

在中断服务过程中,把下一个输出数据写入8255A的输出缓冲器。

写入后OBF有效,表明输出数据已到,并以此信号启动外设工作,取走并处理8255A中的输出数据。

8255AC口联络信号定义:

二、软件流程图

三、实验源程序代码

#include//定义8052单片机寄存器的头文件

#include//绝对地址处理头文件,包含XBYTE,用XBYTE来定义扩展的I/O端口和外部RAM单元地址

#defineuintunsignedint//宏定义

#defineucharunsignedchar

#defineCONXBYTE[0xffff]//定义8255控制字寄存器端口

#definePAXBYTE[0xfcff]//定义8255端口PA地址

voiddelay(uintz);//延时

voidmain()

{

uinti=0;

CON=0x80;//写方式控制字,方式0,基本输入输出

PA=0xff;

while

(1)

{

PA=0x1e;//东西绿灯,南北红灯

delay(1000);//延时

for(i=3;i>0;i--)//黄灯闪烁三次

{

PA=0x2e;

delay(100);

PA=0x3e;

delay(100);

}

PA=0x33;//东西红灯,南北绿灯

delay(1000);

for(i=3;i>0;i--)//黄灯闪烁三次

{

PA=0x35;

delay(100);

PA=0x37;

delay(100);

}

}

}

voiddelay(uintz)//延时子程序

{

uintx,y;

for(x=z;x>0;x--)

for(y=500;y>0;y--);

}

四、实验调试:

将交通灯的硬件电路焊制完成后,与单片机连接好,将交通灯的程序下载至单片机中,但是此次我并没有观察到预期的现象,开始以为是连线出了错误,于是我便重新对照原理图连接了一遍,可任然没有预期的结果,于是我找来万用便将单片机连接LED的各引脚电平都测了一遍,发现这几个引脚均为3.97V,即为高电平,而且并没有出现高低电平变换。

于是我们又将原理图在Proteus软件中仿真一遍,结果仿真正确,那么问题到底出在哪儿?

经过我的寻找发现单片机的reset引脚未接地(在仿真软件里reset引脚是默认接地的),于是我们重新调整了电路,连接好之后,终于出现了理想的结果。

五、实验小结

通过本次交通灯实验,学会了使用8255芯片的初始化和编程方法。

同时认识到通过8255实现了I/O口的扩展。

本实验使用的是8255的方式0。

利用8255完成交通灯的四中状态切换。

第一种状态是东西方向是绿灯,南北方向是红灯。

第二种状态是东西方向是黄灯并且闪烁,南北方向是红灯。

第三种状态是东西方向是红灯,南北方向是绿灯。

第四种状态是东西方向是红灯,南北方向是黄灯,最后变到第一种状态。

交通灯的实现,难点有两个点。

一是交通灯的工作状态。

通过观察实际交通灯,确定了上述的四种状态。

二是如何用汇编程序来描述这四种状态。

在实现具体的硬件时,采用8255控制十二个LED,三个一组,分成四组来模拟实际交通灯。

其中的对面两组状态变化是相同一致的。

在完成仿真后在硬件电路中调试时,发现了一个问题。

显示的状态不对。

经过检查电路后发现电路的连线错了。

重新调试后,发现状态对了,但是有一组灯出现了问题。

其中的一个灯不亮。

经过修改程序和软件仿真,没有发现原因何在。

后来把LED换了,可能硬件出了问题,最后结果是正确的。

软件到硬件,再由硬件到软件。

通过问题的解决,我对程序和电路有了更深的认识和理解。

 

 

实验四8253方波实验

一、实验原理

1、参考原理图

工作原理分析:

单片机定时器产生一个10K的方波。

将此方波作为时钟信号送给8253的通道0,通过分频作为通道1的时钟信号进行二次分频,最后得到所要的频率。

1、交通灯原理

2.8253工作原理

8253内部有三个计数器,分别成为计数器0、计数器1和计数器2,他们的机构完全相同。

每个计数器的输入和输出都决定于设置在控制寄存器中的控制字,互相之间工作完全独立。

每个计数器通过三个引脚和外部联系,一个为时钟输入端CLK,一个为门控信号输入端GATE,另一个为输出端OUT。

每个计数器内部有一个8位的控制寄存器,还有一个16位的计数初值寄存器CR、一个计数执行部件CE和一个输出锁存器OL。

执行部件实际上是一个16位的减法计数器,它的起始值就是初值寄存器的值,而初始值寄存器的值是通过程序设置的。

输出锁存器的值是通过程序设置的。

输出锁存器OL用来锁存计数执行部件CE的内容,从而使CPU可以对此进行读操作。

顺便提一下,CR、CE和OL都是16位寄存器,但是也可以作8位寄存器来用。

8253具有3个独立的计数通道,采用减1计数方式。

在门控信号有效时,每输入1个计数脉冲,通道作1次计数操作。

当计数脉冲是已知周期的时钟信号时,计数就成为定时。

每个计数通道内含1个16位的初值寄存器、减1计数器和1个16位的(输出)锁存器。

8253内部包含3个功能完全相同的通道,每个通道内部设有一个16位计数器,可进行二进制或十进制(BCD码)计数。

采用二进制计数时,写入的初值范围为0000H~FFFFH,最大计数值是0000H,代表65536。

采用BCD码计数时,写入的初值范围为0000~9999,最大计数值是0000,代表10000。

与此计数器相对应,每个通道内设有一个16位计数值锁存器。

必要时可用来锁存计数值。

  当某通道用作计数器时,应将

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

当前位置:首页 > 法律文书 > 辩护词

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2