单片机课程设计-- 单片机之间的双向通信演示Word格式文档下载.docx
《单片机课程设计-- 单片机之间的双向通信演示Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《单片机课程设计-- 单片机之间的双向通信演示Word格式文档下载.docx(20页珍藏版)》请在冰点文库上搜索。
1.1单片机AT89C51概述........................错误!
未定义书签。
1.2LED显示屏控制技术状况 2
1.3MAX232概述 2
1.4本设计任务 3
第2章总体方案论证与设计 错
2.1LED驱动模块 错
2.2总体硬件组成框图 错
误!
误!
第3章 系统硬件设计 4
3.1单片机最小系统硬件设计 4
3.2串行通信电路 5
3.3LED显示电路 6
第4章系统的软件设计 7
4.1甲单片机程序设计 7
4.2乙单片机程序设计 8
第5章系统调试与测试结果分析 8
5.1使用的仪器仪表 9
5.2系统调试 9
5.3测试结果 9
结论 9
参考文献 11
附录1程序 12
附录2仿真效果图 17
第1章 绪论
随着科学技术的发展,单片机在各个领域的应用越来越广泛,计算机领域,航天领域,电子技术领域等,都离不开单片机的使用。
其中,串行通信技术是单片机的一个重要应用。
在串行通信中,参与通信的两台或多台设备通常共享一条物理通路。
发送者依次逐位发送一串数据信号,按一定的约定规则为接收者所接收。
由于串行端口通常只是定义了物理层的接口规范,所以为确保每次传送的数据报文能准确到达目的地,使每一个接收者能够接收到所有发向它的数据,必须在通信连接上采取相应的措施。
由于借助串行通信端口所连接的设备在功能、型号上往往互不相同,其中大多数设备出了等待接收数据之外还会有其他的任务,例如,一个数据采集单元需要周期性地收集和存储数据;
一个控制器需要负责控制计算机或向其他设备发送报文;
一台设备可能会在接收方正在进行其他任务时向它发送信息。
因此,必须有能应对多种不同工作状态的一系列规则来保证通信的有效性。
这里所讲的保证串行通信的有效性的方法包括:
使用轮询或者中断来检测、接收信息;
设置通信帧的起始、停止位;
建立连接握手;
实行对接收数据的确认、数据缓存以及错误检查等。
本次课程设计就是要利用单片机来完成一个系统,实现单片机之间的双向通信演示,通信的结果使用LED数码管进行显示。
1.1单片机AT89C51概述
AT89C51是一种带4K字节FLASH存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除1000次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。
AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
AT89C51提供以下标准功能:
4k字节Flash闪速存储器,128字节内部RAM,32个I/O口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。
同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。
空闲方式停止CPU的工作,
17
但允许RAM,定时/计数器,串行通信口及中断系统继续工作。
掉电方式保存RAM
中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。
1.2LED显示屏控制技术状况
显示屏的控制系统包括输入接口电路、信号控制、转换和数字化处理电路及输出接口电路等,涉及的具体技术很多,其关键技术包括串行传输与并行传输技术、动态扫描与静态锁存技术、自动检测及远程控制技术等。
1.2.1串行传输与并行传输技术
LED显示屏的数据传输方式主要有串行和并行两种。
日前普遍采用串行控制技术,显示屏每个单元内部的不同驱动电路和各级联单元之间,每个时钟仅传送一位数据。
采用这种方式的驱动IC种类较多,不同显示单元之间的联线较少,可减少显示单元的数据传输驱动元件,从而提高整个系统的可靠性和性价比,具体工程实现也较为容易。
1.2.2动态扫描与静态锁存技术
LED显示屏控制系统实现显示信息的刷新技术有动态扫描和静态锁存两种方式。
一般室内显示屏多采用动态扫描技术,即一行发光二极管共用一行驱动寄存器,根据共用一行驱动寄存器的发光二极管像素数目,分为1/4,1/16扫描等。
室外显示屏基本上采用静态锁存技术,即每一个发光一极管都对应有一个驱动寄存器,无需时分工作,从而保证了每一个发光一极管的亮度占空比为100%。
动态扫描法可以大大减少控制器的I/O口,因此应用较广。
1.2.3自动检测及远程控制技术
LED显示屏的构成复杂,特别是室外显示屏,供电、环境亮度、环境温度条件等都直接影响显示屏的正常运行。
在LED显示屏的控制系统中,因根据需要对温度、亮度、电源等进行自动检测控制,也可根据需要,远程实现对显示屏的亮度、色度调节、图像水平和垂直位置的调节以及工作方式的转换等。
1.3MAX232概述
MAX232芯片是美信(MAXIM)公司专为RS-232标准串口设计的单电源电平转换芯片,使用+5v单电源供电,应用于串行通信技术。
其主要特点为;
1、符合所有的RS-232C技术标准。
2、只需要单一+5V电源供电。
3、片载电荷泵具有升压、电压极性反转能力,能够产生+10V和-10V电压
V+、V-。
4、功耗低,典型供电电流5mA。
5、内部集成2个RS-232C驱动器。
6、高集成度,片外最低只需4个电容即可工作。
1.4本设计任务
串行通信技术在单片机中有重要应用,本设计以AT89C51位核心,利用串行通信技术实现实现两个单片机之间的数据传输。
并包括单片机最小系统,串口通信电路,LED显示电路等基本电路。
第2章 总体方案论证与设计
本系统采用单片机AT89C51为控制核心,系统主要包括包括单片机最小系统,串口通信电路,LED显示电路,下面对各模块的设计逐一进行论证比较。
2.1LED驱动模块
方案一:
采用静态锁存方式,将每一个LED发光管的一端接至单片机的一个
I/O口,另一端通过电阻接电源。
这种方法可以直接驱动LED,原理简单,驱动能力强,LED的亮度也可以通过限流电阻调节,非常方便,但此种方法太浪费单片机的I/O口,只适合于较小的系统。
方案二:
采用动态扫描方式,通过三极管驱动并联在一起的LED发光管的一端(共阴或共2端),LED发光管的另一脚接通用I/O口,控制其亮灭。
该方法能驱动较多的LED,控制方式较灵活,而且节省单片机的资源。
比较以上两种方案,系统设计中采用方案一。
2.2总体硬件组成框图
LED管
AT89C51
串口通信电路
MAX232
甲
乙
图2-1 总体硬件组成框图
系统框图如图2-1所示,系统主要由三大模块组成即单片机最小系统,串口通信电路,LED显示电路。
第3章 系统硬件设计
为使单片机双机通信显示系统具有更加方便和灵活性,我们对系统的硬件做了精心设计。
硬件电路包括LED单片机最小系统,串口通信电路,LED显示电路。
3.1单片机最小系统硬件设计
单片机最小系统很简单,如图3-1所示,就是能使单片机工作的最少的器件构成的系统。
最小系统虽然简单,但是却是大多数控制系统所必不可少的关键部分。
对于MCS-51单片机,其内部已经包含了一定数量的程序存储器和数据存储器,在外部只要增加时钟电路和复位电路即可构成单片机最小系统。
时钟电路单片机系统中的各个部分是在一个统一的时钟脉冲控制下有序地进行工作,时钟电路是单片机系统最基本、最重要的电路。
MCS-51单片机内部有一个高增益反相放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端,如果引脚XTAL1和XTAL2两端跨接上晶体振荡器
(晶振)或陶瓷振荡器就构成了稳定的自激振荡电路,该振荡电路的输出可直接送入内部时序电路。
MCS-51单片机的时钟可由两种方式产生,即内部时钟方式和外部时钟方式。
复位电路的第一功能是上电复位。
一般微机电路正常工作需要供电电源为5V±
5%,即4.75~5.25V。
由于微机电路是时序数字电路,它需要稳定的时钟信号,因此在电源上电时,只有当VCC超过4.75V低于5.25V以及晶体振荡器稳定工作时,复位信号才被撤除,微机电路开始正常工作。
图3-1单片机最小系统
3.2串行通信电路
该部分电路由芯片MAX232组成。
其电路原理图如图3-2所示,单片机的串口通过MAX232将TTL电平转换成EAI适合的电平,实现了两个单片机之间的通信。
图3-2串口通信电路
3.LED显示电路
该显示电路由LED数码管和上拉电阻组成,如图3-3所示:
图3-3LED显示电路
如图3-3,LED数码管接到单片机AT89C51的P0口,P0口为LED的显示给出相应的数据。
第4章 系统的软件设计
软件是该单片机双向通信演示的的重要组成部分,在系统的软件设计中我们也才用了模块化设计,将系统的各部分功能编写成子模块的形式,这样增强了系统软件的可读性和可移植性。
4.1甲单片机程序设计
本设计中甲单片机AT89C51的主要功能就是实现输出控制命令符、LED显示屏上显示等功能。
其程序流程如图4-1所示。
图4-1甲单片机程序流程图
4.2乙单片机程序设计
本设计中乙单片机AT89C51的主要功能接收甲发出的控制命令符,并向甲发送数字使甲接收并显示在数码管上。
图4-2乙单片机程序流程图
第5章 系统调试与测试结果分析
5.1使用的仪器仪表
数字万用表 DT9203
单片机仿真器 WAVE6000
烧写器GF2100
双踪稳压稳流电源 DH1718E-5
5.2系统调试
根据系统设计方案,本系统的调试共分为三大部分:
硬件调试,软件调试和软硬件联调。
由于在系统设计中采用模块设计法,所以方便对各电路模块功能进行逐级测试:
LED驱动模块的调试,数据存储模块的调试,PC机通信模块的调试等,最后将各模块组合后进行整体测试。
5.2.1硬件调试
对各个模块的功能进行调试,主要调试各模块能否实现指定的功能。
5.2.2软件调试
软件调试采用单片机仿真器WAVE6000L及微机,将编好的程序进行调试,主要是检查语法错误。
5.2.3硬件软件联调
将调试好的硬件和软件进行联调,主要调试系统的实现功能。
5.3测试结果
此次系统设计结果较好,LED数码管能很好的显示数字。
结 论
本次设计采用两片AT89C51单片机实现双向通信显示,设计过程中,从双机通信背景的了解,到89C51单片机具体功能的了解,到串行通信的原理的熟悉,到掌握具体串行通信在双机之间的实现;
从硬件电路设计到程序编写;
从硬件调试到软件模拟实现等。
发送方的数据由串行口TXD断输出,经过传输线将信号传送到接收端。
接收方接收电平信号,对于接口电路,短距离传送,减少抗干扰作用,如果短离远双机串口中可以连接电平转换器常用芯片RS232,在此不再叙述。
设计中,收获不少东西,也遇到了不少的问题。
首先,在完成单片机课程学习任务后,对内容的掌握不够,缺乏灵活运用的能力,对于知识的扩展也存在一定的问题,因此,面对设计课题,无法系统地进行设计思路的拟定。
其次,理解不能更好的联系实践,在巩固和学习硬件知识的同时,用软件控制协调硬件实现现实功能,通过硬件完成软件的功能等方面的融会贯通,取得了一定的效果。
再次,硬件设计过程中,串行通信方式的选择,波特率的计算,在查询方式与中断方式进行串行通信。
对于芯片的选择,软件编写时,对于某些指令的功能,功能模块的连接,芯片地址选择等都遇到了很大的障碍,在老师与同学帮助和自己查阅资料得到了解决,与此同时,了解了不少的问题。
并掌握了KEIL的使用和程序调试,以及PROTUES单片机模拟仿真软件的使用,大大提高了学习效率。
通过本次课程设计,不仅使理论知识得到了实践,有效巩固了知识。
同时对于单片机发展历史、强大功能、应用领域以及系列知识得到了大概的系统认识,同时也初步了解了一个完整的系统开发的过程,增强了对于创造思维的培养和开发能力的锻炼
参考文献
160-190.[3]张小波,徐航.基于MCS—51单片机的串行通信技术.[M].北京:
[4]胡汉才.单片机原理与其接口技术(第二版)[M].北京:
[5]何文才,杜鹏.基于VB.NET的PC机和MCS-51单片机之间的串行通信[J].北京电子科技学院学报.2006.4期.
[6]李秀忠.基于单片机的LED显示屏控制电路设计.[J].现代电子技术.2010.15期.
[7]马忠梅.单片机的C语言应用程序设计[M].北京:
北京航空航天大学出版社.2006.
[8]周润景.基于Proteus的电路与单片机仿真系统设计与仿真[M].北京:
北京航空航天大学出版社.2005.
[9]金炯泰,金奎焕.如何使用KEIL8051C编译器[M].北京:
北京航空航天大学出版社.2002.
附录1程序
甲机程序:
//---- 甲机程序代码
#include<
reg52.h>
#defineuint unsignedint
#defineucharunsignedcharsbitled1=P1^0;
sbitled2=P1^3;
sbitkey=P1^7;
// 共阳极数码管段码---
ucharcodetable[]={0xC0,0xF9,0xA4,0xB0,0x99,
0x92,0x82,0xF8,0x80,0x90,0xff};
ucharnum;
// 延时
voiddelay(uintz)
{
uintx,y;
for(x=z;
x>
0;
x--)
for(y=110;
y>
y--);
}
// 串行口发送函数
voidtransfer(ucharc)
SBUF=c;
while(TI==0);
TI=0;
voidmain()
num=0;
P0=0x00;
SCON=0x50;
//串行口工作在方式1,既可以发送数据,也可以接收数据
TMOD=0x20;
//定时器T1工作在方式2PCON=0x00;
TH1=(256-253)/32;
TL1=(256-253)%32;
RI=0;
TR1=1;
IE=0x90;
//串行口中断打开
while
(1)
if(key==0)
while(key==0);
num=(num+1)%4;
switch(num)
case0:
transfer('
D'
);
led1=1;
led2=1;
break;
case1:
A'
led1=0;
case2:
B'
led2=0;
case3:
C'
// delay(100);
voidrecieve()interrupt4
if(RI==1)
RI=0;
P0=~table[SBUF];
乙机程序:
//---- 乙机程序代码
ucharnum=10;
TMOD=0x20;
PCON=0x00;
TH1=(256-253)/32;
led1=led2=1;
while
(1)
num=(num+1)%11;
SBUF=num;
while(TI==0);
TI=0;
switch(SBUF)
case'
:
led1=0;
break;
led1=1;
else
附录2仿真效果