基于单片机的串口通信设计毕业论文剖析.docx
《基于单片机的串口通信设计毕业论文剖析.docx》由会员分享,可在线阅读,更多相关《基于单片机的串口通信设计毕业论文剖析.docx(19页珍藏版)》请在冰点文库上搜索。
基于单片机的串口通信设计毕业论文剖析
毕业设计(论文)
题目:
基于单片机的串口通信设计
院(系):
**********
专业:
**********
姓名:
**********
学号:
**********
指导教师:
**********
二〇**年*月*日
毕业设计(论文)任务书
学生姓名
学号
专业
院(系)
毕业设计(论文)题目
基于单片机的串口通信设计
任务与要求
任务:
通过硬件和软件的按键输入电路、单片机控制电路和数码管显示电路进行串口通信的设计。
要求:
熟悉单片机相关方面的知识,学习并掌握串口通信的基本原理。
学会使用C语言和汇编语言进行单片机的编程。
学习使用protel软件,会在软件上绘制电路原理图,能够进行电路图的电气规则检查。
熟练掌握keil软件的使用。
完成时间段
年月日至年月日共周
指导教师单位
职称
院(系)审核意见
毕业设计(论文)进度计划表
日期
工作内容
执行情况
指导教师
签字
查找资料,选题
完成论文的初稿
完成论文二稿的写作
完成论文的终稿及格式修改
定稿,打印论文,做好答辩的准备
论文答辩
教师对进度计划
实施情况总评
签名
年月日
本表作评定学生平时成绩的依据之一
毕业设计(论文)中期检查记录表
学生填写
毕业设计(论文)题目:
基于单片机的串口通信设计
学生姓名:
学号:
专业:
指导教师姓名:
王飞
职称:
检查
教师填写
毕业设计(论文)题目工作量
饱满
一般
不够
毕业设计(论文)题目难度
大
适中
不够
毕业设计(论文)题目涉及知识点
丰富
比较丰富
较少
毕业设计(论文)题目价值
很有价值
一般
价值不大
学生是否按计划进度独立完成工作任务
学生毕业设计(论文)工作进度填写情况
指导次数
学生工作态度
认真
一般
较差
其他检查内容:
存在问题及采取措施:
检查教师签字:
年月日
院(系)意见
(加盖公章):
年月日
摘要
随着电子技术的不断发展,单片机的应用范围越来越广泛,在工业控制、家电控制、数据采集等多个领域都有着十分重要的作用,由于单片机的使用,越来越多的系统开始向智能化方向发展。
而单片机自带的串口功能可以实现其与其他外设MCU或PC机之间的通信,这样就使得控制系统更加的方便实用,利用单片机的串口通信可以实现数据的远程传输、数据分析与系统综合控制功能,尤其是在数据量比较大的场合下,利用一个主机向各个从机发送控制指令是一个很好的解决方案,在这个过程中,串口通信是实现单片机与单片机之间通信的关键。
本文介绍了基于单片机的串口通信设计,通过按键输入数据,单片机通过串口将数据发送给另一个单片机,同时发送的数据均可在2个单片机控制的数码管上显示,以检测串口通信的准确性。
本文介绍的方法简单易懂,可广泛应用于各种串口数据通信系统中。
关键词:
单片机数据串口通信设计
Abstract
Summarywiththecontinuousdevelopmentofelectronictechnology,widescopeofapplicationofthesinglechip,industrialcontrols,appliancecontrol,dataacquisition,andsohasaveryimportantroleinmanyareas,duetotheuseofsingle-chipcomputer,moreandmoresystemsarebeginningtointelligentdirection.AndsingletabletsmachinesincewithofserialfeaturescanachieveditsandotherperipheralsMCUorPCmachineZhijianofcommunications,suchonmakescontrolsystemmoreofconvenientpractical,usessingletabletsmachineofserialcommunicationscanachieveddataofremotetransmission,anddataanalysisandsystemintegratedcontrolfeatures,especiallyindatavolumethanlargerofoccasionsXia,usesahoststoallfrommachinesentcontrolinstructionisaisgoodofaddressprogramme,inthisprocessinthe,serialcommunicationsisachievedsingletabletsmachineandsingletabletsmachineZhijiancommunicationsofkey.
Thisarticleintroducedthedesignofserialcommunicationbasedonsingle-chipcomputerbypressingtheinputdata,single-chipserialdatatoanothermicrocontroller,whilesendingdataareavailableatthe2onasingle-chipcomputercontrolleddigitaltubedisplay,accuracytodetectserialcommunication.Describedinthismethodissimpleandeasytounderstand,canbewidelyappliedtovariousserialdatacommunicationsystems.
KEYWORD:
serialcommunicationdatathedesignofsingle-chipmicrocomputer
第一章绪言
数据通信是通信技术和计算机技术相结合而产生的一种新的通信方式。
要在两地之间传输信息必须由传输信道,根据传输媒体的不同,有有线数据通信与无线数据通信之分,但它们都是通过传输信道将数据终端与计算机连接起来,而使不同地点的数据终端实现软、硬件和信息资源的共享。
数据通信的发展主要分为五个阶段。
第一阶段:
以语言为主,通过人力、马力、烽火等原始手段传递信息;第二阶段:
文字、邮政;第三阶段:
印刷;第四阶段:
电报、电话、广播;第五阶段:
信息时代,除语言信息外,还有数据、图像、文本等。
串口通信是按位发送和接收字节,尽管比按字节的并行通信慢,但是串口可以在使用一根线发送数据的同时利用另一根线接收数据,很简单且能实现远距离通信,长度可以达到1200米。
串行通信是指计算机主机与外设之间以及主机系统与主机系统之间数据的串行传送。
使用串口通信时,发送和接收到的每一个字符实际上都是一次一位的传送的,每一位为1或者为0。
串行通信只使用一条数据线,将数据一位一位地依次传输,每一位数据占据一个固定的时间长度。
其只需要少数几条线就可以在系统间交换信息。
最被人们熟悉的串行通信技术标准是EIA-232、EIA-422和EIA-485,目前EIA-232是PC机与通信工业中应用最广泛的一种串行接口。
EIA-422标准全称是“平衡电压数字接口电路的电气特性”,它定义了一种平衡通信接口,将传输速率提高到了10Mbps,传输距离延长到了1219米,并允许在一条平衡总线上最多连接10个接收器。
1983年EIA在EIA-422的基础上制定了EIA-485标准,增加了多点、双向通信能力,即允许多个发送器连接到同一条总线上,同时增加了发送器的驱动能力和冲突保护特性,扩展了总线共模范围,后命名为TIA/EIA-485-A标准。
第二章串口通信基础
第一节串行通信的分类
串行通信可以分为同步通信和异步通信两类。
同步通信是一种连续串行传送数据的通信方式,一次通信只传送一帧信息。
这里的信息帧与异步通信中的字符帧不同,通常含有若干个数据字符。
它们均由同步字符、数据字符和校验字符组成。
其中同步字符位于帧开头,用于确认数据字符的开始。
数据字符在同步字符之后,个数没有限制,由所需传输的数据块长度来决定;校验字符有1到2个,用于接收端对接收到的字符序列进行正确性的校验。
同步通信的缺点是要求发送时钟和接收时钟保持严格的同步。
异步通信中,在异步通行中有两个比较重要的指标:
字符帧格式和波特率。
数据通常以字符或者字节为单位组成字符帧传送。
字符帧由发送端逐帧发送,通过传输线被接收设备逐帧接收。
发送端和接收端可以由各自的时钟来控制数据的发送和接收,这两个时钟源彼此独立,互不同步。
接收端检测到传输线上发送过来的低电平逻辑"0"(即字符帧起始位)时,确定发送端已开始发送数据,每当接收端收到字符帧中的停止位时,就知道一帧字符已经发送完毕。
第二节串口通信的参数
串口通信最重要的参数是波特率、起始位、数据位、停止位和奇偶校验。
波特率:
是一个衡量通信速度的参数,表示每秒钟传送的bit的个数。
起始位:
当通信线上没有数据被传送时处于逻辑“1”状态,当发送设备要发送一个数据时,先发送一个逻辑“0”信号,这个低电平就是起始位,起始位通过通信线传向接收设备,接收端检测到这个低电平后,就确认开始接收数据了。
起始位的作用是使通信双方在传送数据前协调同步。
数据位:
是衡量通信中实际数据位的参数,当计算机发送一个信息包,实际的数据不会是8位的,标准的值是5、7或8位,如何设置取决于要传送的信息。
每个包是指一个字节,包括开始/停止位、数据位和奇偶校验位,由于实际数据位取决于通信协议的选取,术语“包”指任何通信的情况。
停止位:
用于表示单个包的最后一位。
典型的值为1、1.5和2位,它是一个数据的结束标志,接收端接收到停止位后,通信线路上会回复逻辑“1”的状态,知道下一个起始位的到来。
奇偶校验位:
在串行通信中一种简单的检错方式,有四种方式:
偶、奇、高和低。
对于偶和检验的情况,串口会设置检验位,用一个值确保传输的数据有偶个或者奇个逻辑高位。
高位和低位不真正的检查数据,简单置位逻辑高或者逻辑低校验,这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步。
第三章设计方案
在2个相同单片机之间利用串口进行通信,通过按键输入要发送的数据,该数据为数字,并可在数码管上显示出来,设置完后通过串口通信发送给另一个单片机,另一个单片机接收到后在数码管上显示出来,2个单片机可以互相发送数据,通过2个单片机系统的数码管显示的数字可以判断串口通信发送的数据的正确性。
系统设计框图如图3.1所示。
本设计主要由按键输入电路、单片机控制电路和数码管显示电路组成,2个单片机的电路图完全相同,实现的功能也相同,所以本文只介绍其中一块单片机电路的设计方法和串口通信的原理。
图3.1系统设计框图
第四章系统硬件设计
第一节Protel软件的使用
一、利用Protel软件进行原理图设计步骤:
1、建立数据库。
打开Protel软件后,在“文件”标题栏里选择“新建”选项,在弹出的对话框里选择DocumentFolder,然后点击OK即可。
2、打开Documents,选择“文件”标题栏里选择“新建”选项,在弹出的对话框里选择“SchematicDocument”选项,建立原理图文件,并给原理图文件命名。
3、设计电路原理图。
利用Protel里的元器件库完成电路原理图的绘制。
4、检查原理图电性能可靠性。
选择工具下面的电气规则检查,在“RuleMatrix”中选择要进行电气检查的项目,设置好各项后,在“SetupElectricalRluesCheck”对话框上选择“OK”即可运行电气规则检查,检查结果将被显示到界面上。
第二节按键输入电路
常用的按键有独立键盘和矩阵键盘,矩阵式键盘分行和列,通过行和列来确定某一个按键的位置,适用于多键盘操作,可以节省单片机的I/O口。
独立式键盘是直接将按键连接至单片机I/O口,单片机通过检测I/O的电平来判断按下的按键,编程简单,但是占用I/O资源比较多。
本设计中只需要用到4个按键来实现数据的输入,所以使用独立式键盘即可。
按键输入电路如图4.1所示。
单片机的P1.0-P1.3引脚用来控制4路按键,4个按键分别代表4组数据“1、12、123、1234”,不同长度的数据可以更充分的检测串口数据传输的准确性。
图4.1按键输入电路
第三节单片机控制电路
一、单片机控制电路设计
该部分电路设计如图4.2所示。
单片机的时钟的频率直接影响着单片机的速度和系统的稳定性。
AT89S51片内由一个反相放大器构成振荡器,可以通过它俩产生时钟。
常用的单片机产生时钟的方法有两种:
内部时钟方式和外部时钟方式。
本设计选用外部时钟方式,单片机内部XTAL1引脚为高增益反向放大器的输入端,XTAL2为输出端,在这2个引脚之间接石英晶振和电容,就可以构成一个稳定的自激振荡器。
外接晶振振荡频率不大于单片机的最大工作频率即可。
如果有串行通信,需要选择振荡频率除以串行通信频率可以整除的晶振。
本设计选用的11.0592MHz晶振。
复位是单片机的初始化操作,复位信号是高电平有效,复位操作有上电自动复位、按键电平复位、外部脉冲复位和自动复位四种方式。
在本设计中复位电路采用按键电平方式,使RST引脚经过10u电解电容与VCC电源接通,同时经过电阻与地连接而实现,按下按键时,RST引脚置高,实现复位功能。
单片机的P1.0-P1.3引脚控制4个按键用于输入数字,P2口控制数码管显示电路,单片机之间的通信通过串行口RXD和TXD。
图4.2单片机控制电路
第四节显示电路
本设计中选用数码管作为显示器件。
LED数码管由八只发光二极管组成,编号是a、b、c、d、e、f、g、h,分别和同名管脚相连,当发光二极管导通时发光。
每个二极管就是一个笔划,若干个二极管发光时,就构成一个显示字符。
若将单片机的I/O口与数码管的a-g和h相连,高电平(对应共阴极数码管)或低电平(对应共阳极数码管)的位对应的发光二极管就会亮,这样,I/O口输出不同的代码就可以控制数码管显示不同的字符。
为减少电路板中的焊接线,本设计选用4位一体数码管,采用串行输入并行输出的8位移位寄存器74LS164进行驱动输出,单片机的P2.6和P2.7引脚分别作为74LS164的数据线和CLK信号。
74LS164将输入的串行数据锁存在并行输出端,通过这些并行口线驱动数码管的各字段。
数码管选用共阳型,当74LS164的某个输出端口为低电位时,数码管对应的字段将被点亮。
软件设计中数码管采用循环送显的方式,单片机通过控制9012来选择要送显的数码管,当需要某一位数码管显示时,该数码管相对应的9012三极管基极所连接的单片机引脚输出高电平,三极管导通,进而选通该位数码管。
74LS164的输出Q0-Q7分别对应接到数码管的a-h端口。
单片机将数据写入到74LS164内部锁存,再由74LS164将显示译码送入该位数码管个码段显示,从而实现了单片机控制数码管显示的功能。
显示电路如图4.3所示。
图4.3显示电路
第五章系统软件设计
第一节KeilC51软件的使用
一、编辑器和调试器:
1、源代码编辑器:
uVision2编辑器包含了所有用户熟悉的特性。
彩色语法显像和文件辩识都对C源代码进行和优化。
可以在编辑器内调试程序,它能提供一种自然的调试环境,使你更快速地检查和修改程序。
2、断点:
uVision2允许用户在编辑时设置程序断点(甚至在源代码未经编译和汇编之前)。
用户启动V2调试器之后,断点即被激活。
断点可设置为条件表达式,变量或存储器访问,断点被触发后,调试器命令或调试功能即可执行。
在属性框中可以快速浏览断点设置情况和源程序行的位置。
代码覆盖率信息可以让你区分程序中已执行和未执行的部分。
3、调试函数语言:
uVision2中,可以编写或使用类似C的数语言进行调试。
<1>、内部函数:
如printf,memset,rand及其它功能的函数。
<2>、信号函数:
模拟产生CPU的模拟信号和脉冲信号。
<3>、用户函数:
扩展指令范围,合并重复动作。
4、变量和存储器:
用户可以在编辑器中选中变呈来观察其取值。
双层窗口显示,可进行以下调整:
当前函数的局部变量;用户在两个不同watch窗口页面上的自定义变量;堆栈调用(callstack)页面上的调用记录;不同格式的四个存储区。
C51允许用户使用C语言编写中断服务程序,快速进、出代码和寄存器区的转换功能使C语言中断功能更加高效。
可再入功能是用关键字来定义的。
多任务,中断或非中断的代码要求必须具备可再入功能。
C51提供了灵活高效的指针。
通用指针用3个字节来存储存储器类型及目标地址,可以在8051的任意存储区内存取任何变量。
特殊指针在声明的同时已指定了存储器类型,指向某一特定的存储区域。
由于地址的存储只需1-2字节,因此,指针存取非常迅速。
KeilC51兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构上、可读性、可维护性上有明显的优势,因而易学易用。
第二节设计流程图
本系统软件设计分为发送机和接收机,发送机程序设计流程图如图5.1所示,接收机程序设计流程图如图5.2所示。
图5.1发送机程序设计流程图图5.2接收机程序设计流程
第三节按键程序设计
单片机读取按键值的方法有两种:
查询方式和中断方式。
查询方式是利用键盘程序不断查询是否有按键按下,有按下则进入相应按键的子程序进行数据处理,没有则一直循环查询;中断方式是将按键动作与单片机的中断系统联系起来,有按键按下时,就引起单片机中断,使系统进入中断处理程序。
本设计中有4个按键,且主要程序就是按键的处理,所以采用查询方式来处理读取按键值程序。
读取按键子程序如下:
if(key_1==0)
{
delay(20);
if(key_1==0)
{
while(key_1==0);
flag_t=1;
unm_t=1;
}
}
if(key_2==0)
{
delay(20);
if(key_2==0)
{
while(key_2==0);
flag_t=2;
unm_t=2;
}
}
if(key_3==0)
{
delay(20);
if(key_3==0)
{
while(key_3==0);
flag_t=3;
unm_t=3;
}
}
if(key_4==0)
{
delay(20);
if(key_4==0)
{
while(key_4==0);
flag_t=4;
unm_t=4;
}
}
第四节串口通信程序设计
本系统采用晶振的频率为11.0592MHz,T1工作在模式2下,波特率为9600b/s,将上述公式变形并带入数据得T1的初值为0xFD。
单片机主程序中串口中断的使用代码如下:
voidmain(void)
{
EA=0;//关中断
IP=0x00;
SCON=0X50;//中断初始化
TMOD=0x21;
PCON&=0x00;
TH1=0xFD;//定时器0赋初始值
TL1=0xFD;
TR1=1;
ET0=1;
TR0=1;
EA=1;//开中断
……
}
第五节显示程序设计
根据数码管的驱动方式不同,数码管送显方式有两种:
静态送显和动态送显。
静态显示驱动:
静态驱动也称直流驱动,在静态显示驱动方式下,数码管的共阴极或共阳极共同接地或接电源,每个数码管的段选线与8位的单片机并口连接。
静态显示驱动方式占用的单片机I/O端口比较多,一般在实用中不采用。
动态显示驱动:
数码管动态显示方式是将所有的段选线并联在一起,由一个8位I/O口来控制,再利用单片机的其他I/O口来作为数码管的位选线。
当单片机输出显示数字的译码时,哪个数码管显示由单片机对位选通电路的控制来选择,所以将欲显示的数码管的位选通端选通,该数码管就会显示,其它数码管均不会亮。
通过轮流控制各个数码管的选通端使数码管轮流显示。
在显示过程中,每个数码管的显示时间为1-2ms,由于人们的视觉暂留现象及发光二极管的余晖效应,只要扫描的速度够快,给人的印象就是同时点亮的,而且不会有闪烁感。
本设计中选用动态显示驱动方式,数据通过74LS164的数据端送至数码管显示。
先按照74LS164的时钟时序写入8段码,写完后送入数码管,子程序如下:
voidwrite_164(ucharlx)//向164写入段码
{
uchari,j;
j=lx;
for(i=0;i<8;i++)
{
CLK_164=0;
if((j&0x01)==0x01)
{
DTAT_164=1;
}
else
{
DTAT_164=0;
}
delay(3);
CLK_164=1;
j=j>>1;
delay
(2);
}
}
voiddisp_all(void)//送数码管显示
{
uchari,j;
for(i=0;i<20;i++)
{
for(j=0;j<4;j++)
{
P2=0X0F;
write_164(DISP_SAVE[j]);
delay(50);
P2=0X0F;
}
}
write_164(0xff);
}
结论
通过这次的毕业设计,使我对单片机有了更深的认识,从理论和实践上都得到了很大的提高,所以这次任务的完成使我学到了很多东西。
首先,丰富了自己的知识面,学到了以前没学懂的东西,具体了解到怎样去完成一个电路的设计,巩固了汇编语言和C语言的使用能力,并且提高了自己分析问题的能力和创新能力,使自己在硬件和软件设计方面树立了信心,为以后从事这方面的工作打好了基础,这也是这次毕业设计的最大收获。
本文介绍了一种单片机之间串口通信的设计方法,论文首先介绍了串口通信的基础知识主要是串口通信的分类和重要的参数,接着提出了可行的设计方案,并从硬件电路设计和软件程序设计两个方面详细介绍了整个设计的原理及设计过程,同时验证了方案的可行性。
当然