《基于51单片机的串口通讯系统大学课程设计—-毕业论文设计.doc》由会员分享,可在线阅读,更多相关《基于51单片机的串口通讯系统大学课程设计—-毕业论文设计.doc(22页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、桂林电子科技大学课程设计(论文)报告用纸 第22页,共25页引言 人类社会已经进入信息化时代,信息社会的发展离不开电子产品的进步。单片机的出现使人类实现利用编程来代替复杂的硬件搭建电路,它靠程序运行,并且可以修改。通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,这是别的器件需要费很大力气才能做到的,有些则是花大力气也很难做到的。一个不是很复杂的功能要是用美国50年代开发的74系列,或者60年代的CD4000系列这些纯硬件来搞定的话,电路一定是一块大PCB板!但是如果要是用美国70年代成功投放市场的系列单片机,结果就会有天壤之别!只因为单片机的通过你编写的程序可以实现高智能,高效率,以
2、及高可靠性!单片机应用的主要领域非常广,智能化家用电器、办公自动化设备商业营销设备、工业自动化控制、智能化仪表、智能化通信产品、汽车电子产品、航空航天系统和国防军事、尖端武器等领域。 单片机应用的意义不仅在于它的广阔范围及所带来的经济效益,更重要的意义在于,单片机的应用从根本上改变了控制系统传统的设计思想和设计方法。以前采用硬件电路实现的大部分控制功能,正在用单片机通过软件方法来实现。以前自动控制中的PID调节,现在可以用单片机实现具有智能化的数字计算控制、模糊控制和自适应控制。这种以软件取代硬件并能提高系统性能的控制技术称为微控技术。随着单片机应用的推广,微控制技术将不断发展完善。电路的集成
3、化不仅对硬件电路的设计相关,与电路的布局同样相关。印刷版的出现使得电路产品更加规范,体积更小。Protel99se是一款专业的绘制电路及印刷版的软件,近年来的不断升级使得其功能更加完善,出现了Altium Designer 、Protel DXP等升级版本。1 设计内容及要求1.1 功能要求(1)下位机选用89S51或89S52单片机;(2)下位机接收上位机的数据并显示在LED或LCD上;(3)下位机显示数据可以显示固定数据、位移数据、循环位移;1.2 硬件要求制作串口线和下位机及外围电路;1.3 软件要求Keil C或汇编编程设计,串口调试助手或Labview串口通信编程。2 设计原理及单元
4、硬件模块22.1 上位机设计2.1.1 RS232串口介绍经过多年的发展,现今已经形成了许多串行通信接口的标准。其中本次课程设计用到的RS-232标准是美国EIA(电子工业联合会)与BELL公司一起开发的通信协议。它适合于数据传输速率在020000bit/s的范围内通信。目前比较常用的串口有9针串口(DB9)和25针串口(DB25),近距离通信可以直接将通信接口用相应的线缆直接相连。2.1.2 串口调试助手介绍串口调试助手是串口调试相关工具,有多个版本。如:友善串口调试助手,支持9600,19200等常用各种波特率及自定义波特率,可以自动识别串口,能设置校验、数据位和停止位,能以ASCII码或
5、十六进制接收或发送任何数据或字符,可以任意设定自动发送周期,并能将接收数据保存成文本文件,能发送任意大小的文本文件。可实现功能如下所示:(1) 自动搜索串口,并打开串口;(2) 支持多串口;(3) 支持自定义波特率,支持非标准波特率;(4) 支持发送历史记录;(5) 接收数据可以进行十六进制和ASCII切换;(6) 接收数据时,光标可定位在指定行或在最后一行;(7) 可以以十六进制或ASCII格式,向指定串口发送数据;(8) 定时发送数据;(9) 接收数据可以保存为文件,也可打开已保存数据文件;(10) 串口打开过程中,可修改通讯参数,如波特率;(11) 自动记录上次操作参数,如串口号、波特率
6、等。2.2 下位机硬件设计2.2.1 设计原理及方法RS232电平转换部分单片机最小系统数据显示部分下位机设计可分为单片机最小系统、RS232电平转换部分、数据显示部分。其系统框图大致图2-1所示。图2-1 系统框图 本次设计采用LCD显示由上位机发送的数据,并完成固定数据、位移数据、循环位移的数据显示。由上位机经RS232串口发送数据,经电平转换,转换成单片机可以接收的信号电压,通过单片机内烧制的程序逻辑运算得出上位机所发送的数据,并在数据显示部分依次显示固定数据、位移数据、循环位移数据。电平转换由MAX232AEPE芯片完成,单片机最小系统使用的是AT89S52芯片,数据显示部分则由160
7、2LCD液晶显示器完成。2.2.2 单片机最小系统图2-2 最小系统电路单片机采用AT89S52,最小系统包括复位电路和时钟电路两部分,其中复位电路采用按键手动复位和上电自动复位组合,电路如图2-2左下部分所示:其中REST为单片机复位端,电容C3按键S1构成上电复位和手动复位电路。时钟电路如图2-2右下部分所示:晶振Y1频率采用的是11.0592MHZ,C1、C2为33p瓷片电容,X1和X2分别为单片机18和19脚。(1)单片机各引脚功能说明:AT89S52管脚图如图2-3所示。 VCC:供电电压。GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门流。当P1口的
8、管脚第一次写1时,被定义为高阻输入。P0能够用于外部 图2-3 AT89S52管脚图 程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行。校验时,P0输出原码,此时P0外部必须被拉高。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当
9、P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由
10、于上拉的缘故。P3口也可作为AT89S52的一些特殊功能口,P3口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是AL
11、E才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器
12、的输出。(2)USBASP下载口说明本次课程设计程序烧写使用USBASP下载口,下载电路如图2-2左上部分所示。USBASP是一种基于ATMEL公司的AVR系列RISC单片机的高性价比和一个由纯软件的USB通信协议栈而构成的一个可以向51系列,AVR系列单片机下载(烧写)程序的下载器。这种下载器工作稳定,速度很快,而且成本相当的低,是一种适合初学者的下载器。特点如下:(1)支持USB1.1、USB2.0通信;支持WIN98、WINME、WIN2000、WINXP、VISTA、WIN7操作系统;(2)采用USB口供电、并带有500mA的自恢复保险丝。保护电脑不会烧毁或损坏。(3)对目标板芯片编程
13、时,可采用此下载线供电,也可以采用目标板本身供电,下载结果不影响目标板运行。(4)支持AT89S51、AT89S52和AVR全系列单片机的程序下载,速度更快,更稳定。(5)支持的烧录文件格式:格式为HEX文件、二进制BIN文件。(6)使用IDC10接口。 2.2.3 RS232电平转换部分(1)工作原理 本设计采用MAX232芯片进行电平转换,MAX232芯片是美信公司专门为电脑的RS232标准串口设计的接口电路,使用+5V单电源供电,它的作用就是完成TTL电平与RS232电平的转换。PC机的串行口采用的是标准的RS 232接口,单片机的串行口电平是FTL电平,而TTL电平特性与RS232的电
14、气特性不匹配,因此为了使单片机的串行口能与RS 232接口通信,必须将串行口的输入/输出电平进行转换。通常用MAX232芯片来完成电平转换。(2)MAX232芯片各引脚功能MAX232各管脚如图2-4所示。第一部分是电荷泵电路。由1、2、3、4、5、6脚和4只电容构成。功能是产生+12v和-12v两个电源,提供给RS-232串口电平的需要。第二部分是数据转换通道。由7、8、9、10、11、12、13、14脚构成两个数据通道。 图2-4 MAX232管脚图其中13脚(R1IN)、12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道。8脚(R2IN)、9脚(R2OUT)、1
15、0脚(T2IN)、7脚(T2OUT)为第二数据通道。TTL/CMOS数据从11引脚(T1IN)、10引脚(T2IN)输入转换成RS-232数据从14引脚(T1OUT)、7脚(T2OUT)送到电脑DB9插头;DB9插头的RS -232数据从13引脚(R1IN)、8引脚(R2IN)输入转换成TTL/CMOS数据后从12引脚(R1OUT)、9引脚(R2OUT)输出。第三部分是供电。15脚GND、16脚VCC(+5v)。(3)MAX232芯片用法MAX芯片用法如图2-5所示。电容器应选择1F的电解电容。在使用过程中本人曾用过10F的代替。注意,由于RS232电平较高,在接通时产生的瞬时电涌非常高,很有
16、可能击毁max232,所以在使用中应尽量避免热插拔。图2-5 MAX232应用电路2.2.4 数据显示部分(1)LCD1602工作原理1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形。1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。(2)LCD1602各引脚功能1602采用标准的16脚接口,如图2-6所示,其中:第1
17、脚:VSS为电源地。第2脚:VCC接5V电源正极。第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。 图2-6 LCD1602引脚图第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。第6脚:E(或EN)端为使能(enable)端,高电平(1)时读取信息,负跳变时执行指令。第714脚:D0D7为8位双向数据端。第1516脚:空脚或背灯电源。15脚背光正极,16脚背光负极。2.3 下位机软
18、件设计2.3.1 编程方案选择本设计单片机的编程选择C语言编写,因为它简洁紧凑、灵活方便、运算符丰富、数据结构丰富、C是结构式语言、C语法限制不太严格,程序设计自由度大、C语言允许直接访问物理地址,可以直接对硬件进行操作、C语言程序生成代码质量高,程序执行效率高,一般只比汇编程序生成的目标代码效率低1020%、C语言适用范围大,可移植性好C语言有一个突出的优点就是适合于多种操作系统, 如DOS、UNIX,也适用于多种机型。C语言具有绘图能力强,可移植性,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画它是数值计算的高级语言。所以我选用C语言来编写此程序。2.3.2 程序流程
19、图 如图2-7所示,为下位机程序流程图。 图2-7 程序流程图 为了实现系统固定显示以及位移显示的功能要求,在初始化单片机和LCD之后,系统首先判断是否接收到串口传来的数据。如果接收到数据,则关闭串口中断,并将接收到的十六进制数据转换成十进制和二进制数据,显示在LCD上5秒。然后,将二进制数据依次向右位移,并间隔一秒显示在LCD上,共位移8次。在位移8次之后,将二进制数据依次向右循环位移,并间隔一秒显示在LCD上,共位移8次。完成全部位移显示之后,打开串口中断,继续判断串口是否接受数据,循环实现系统功能。2.3.3 子程序设计(1)固定显示定义,LCD控制口定义程序实现如下:#include
20、#define uchar unsigned char/宏定义#define uint unsigned int/*/sbit lcden=P02;/液晶控制口RS和ENsbit lcdrs=P00;sbit lcdwr=P01;/*/uchar jieshou,number,biaozhi,xunhuan;/*/uchar code table1=RX: ;/液晶固定显示内容uchar code table2= guding ;uchar code table3= weiyi ;uchar code table4= xunhuan weiyi ;uchar code table5=RX: R
21、EADY ;/*/(2)串口接收,参数设置程序实现如下:void serial_chushihua()/串口初始化TMOD=0x20;/定时器1:计时,方式2TH1=0xfd;/定时器1初值,波特率9600TL1=0xfd;TR1=1;/启动定时器1REN=1;/设置SCON串行口控制寄存器SM0=0;/允许接收SM1=1;/方式1:10位异步收发EA=1;/开总中断ES=1; /开串口中断void chushihua()/初始化lcd_chushihua();/液晶初始化serial_chushihua();/串口初始化lcd_guding();/写入液晶固定显示部分3 系统硬件和软件调试3
22、.1 调试所需仪器数字万用表 1个直流稳压源 1台数字万用表 1个信号发生器 1台示波器 1台3.2 硬件调试硬件调试主要:(1)在Altium Designer仿真软件中进行仿真论证整个串口通信系统的正确性。计算并确定各个电阻、电容大小。(2) 绘制好原理图后,根据原理图去印刷制板。在这个过程中要小心焊盘的大小是否合适,是否有短接或断路的线,然后进行修正工作。打孔时要对好孔,以及不要漏孔没有钻。(3)在焊接电路的过程中,需要检查是否有虚焊或短路的线。这里要认真细致的检查,否则严重的影响到后续的调试。(4)焊接完毕就是上电检查,看是否有短路或开路的地方。检查各元件否正常工作。3.3 软件调试在
23、硬件没有问题的情况下,进行软件部分的调试。单片机的程序部分用C语言进行编写,程序稍微简单,容易调试。写好程序后,用KEIL软件进行编译以及调试得到“*.HEX”文件,然后用USBASP进行下载。(1)下载进单片机后,观察系统能否正常运行。首先运行一个简单的测试程序检测单片机最小系统能否正常运行。(2)测试串转并电路能否正确运行,看LCD是否按照程序控制指令工作。4 系统不足与改进方法本次课程设计因前期对系统功能分析不透彻,导致实现功能方式过于单一,没能实现实时控制数据位移,循环位移。只能通过下位机程序,基本实现系统功能。可以通过以下改进方法,完善系统功能。(1) 通过增加按键,手动控制数据位移
24、,循环位移方向。(2) 完善程序,增加返回值,实时接收单片机处理数据状态。谢 辞在黎老师的悉心教导和同学的帮助下,通过这两周的课程设计我对AT89S52单片机做下位机的串行通信实现的设计和内容有了更多的了解,通过自己的努力,编写了自己最完整的一套程序,虽然功能不是很完善,但我从中学到了很多东西。在整个设计中我学会了在复杂的问题面前怎样去分析,找到问题的关键所在,而且认识到这种能力的重要性。比如在设计的前几天,我对设计中所用到的软件、控制装置都不太了解,感觉什么都不会,无从下手,但当我了解到这些东西在设计的系统中所起的作用后,从整体上看时,整个系统的流程就明了了,就明白了系统设计的需求,知道我应
25、该做什么了,我觉得这就算是抓住了问题的关键吧。通过这次设计我了解了单片机的发展概况、特点、应用,各个部件的原理,串行口的通信方式,LCD的工作原理,认识AT89C52与PC机串行通信的原理。懂得了软件设计流程,通信协议,波特率计算等。最后再次衷心的感谢黎老师和帮助我的朋友。有了你们的支持和无私帮助,我才得以顺利完成课程设计。参考文献1 王选民.智能仪器原理及设计M.北京:清华大学出版社,2008.2 李建中.单片机原理及运用M.西安:西安电子科技大学出版社,2001.3 康华光.电子技术基础模拟部分(第五版)M.北京:高等教育出版社,2006.4 谭浩强.C程序设计 第三版M.北京:清华大学出
26、版社,2006.6.5 李惠昇.电梯控制技术M.北京:机械工业出版社,2003.附 录附录1 系统原理图:附图1 系统原理图附录2 下位机PCB图:附图2 PCB图附录3 元器件清单 附图3 元器件清单附录4 下位机Keil C程序代码#include #define uchar unsigned char/宏定义#define uint unsigned int/*/sbit lcden=P02;/液晶控制口RS和ENsbit lcdrs=P00;sbit lcdwr=P01;/*/uchar jieshou,number,biaozhi,xunhuan;/*/uchar code tabl
27、e1=RX: ;/液晶固定显示内容uchar code table2= guding ;uchar code table3= weiyi ;uchar code table4= xunhuan weiyi ;uchar code table5=RX: READY ;/*/void delay(uint z)/延时z毫秒uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void write_com(uchar com)/液晶写命令lcdrs=0;/写指令P2=com;delay(5);lcden=1;/E端一个正脉冲delay(5);lcden=0;void wri
28、te_data(uchar date)/液晶写数据lcdrs=1;/写数据P2=date;delay(5);lcden=1;/E端一个正脉冲delay(5);lcden=0;void lcd_chushihua()/液晶初始化lcden=0;lcden=0;lcdwr=0;write_com(0x38);write_com(0x0c);/不打开光标write_com(0x06);/指针后移write_com(0x01);/清屏write_com(0x80);/第一位void lcd_guding()/写入液晶固定显示部分uint i;write_com(0x80);/第一行for(i=0;i1
29、6;i+)write_data(table1i);delay(2);void lcd_guding1()/写入液晶固定显示部分uint i;write_com(0x80+0x40);/第二行for(i=0;i16;i+)write_data(table2i);delay(2);void lcd_guding2()/写入液晶固定显示部分uint i;write_com(0x80+0x40);/第二行for(i=0;i16;i+)write_data(table3i);delay(2);void lcd_guding3()/写入液晶固定显示部分uint i;write_com(0x80+0x40)
30、;/第二行for(i=0;i16;i+)write_data(table4i);delay(2);void lcd_gduding4()uint i;write_com(0x80);/第二行for(i=0;i16;i+)write_data(table5i);delay(2);void serial_chushihua()/串口初始化TMOD=0x20;/定时器1:计时,方式2TH1=0xfd;/定时器1初值,波特率9600TL1=0xfd;TR1=1;/启动定时器1REN=1;/设置SCON串行口控制寄存器SM0=0;/允许接收SM1=1;/方式1:10位异步收发EA=1;/开总中断ES=1
31、; /开串口中断void chushihua()/初始化lcd_chushihua();/液晶初始化serial_chushihua();/串口初始化lcd_guding();/写入液晶固定显示部分void display(uchar a)uchar bai,shi,ge;uchar wei0,wei1,wei2,wei3,wei4,wei5,wei6,wei7;bai=a/100;shi=a%100/10;ge=a%10;wei0=a%2;wei1=a/2%2;wei2=a/4%2;wei3=a/8%2;wei4=a/16%2;wei5=a/32%2;wei6=a/64%2;wei7=a/1
32、28%2;write_com(0x80+4);write_data(bai+0x30);write_data(shi+0x30);write_data(ge+0x30);write_data( );write_data(wei7+0x30);write_data(wei6+0x30);write_data(wei5+0x30);write_data(wei4+0x30);write_data(wei3+0x30);write_data(wei2+0x30);write_data(wei1+0x30);write_data(wei0+0x30);void main()uchar i;chushi
33、hua();/总的初始化while(1)if(jieshou=0xff)biaozhi=0;lcd_gduding4();if(biaozhi=1)EA=0;number=jieshou;display(number);lcd_guding1();delay(5000);lcd_guding2();for(i=0;i1;delay(1000);number=jieshou;lcd_guding3();for(i=0;i8;i+)display(number);xunhuan=0x01&number;xunhuan=xunhuan1;number=number|xunhuan;delay(1000);biaozhi=0;RI=0;TI=0;EA=1;void ser() interrupt 4/串口中断服务程序RI=0;/RI标志位软件清零jieshou=SBUF;/读取数据biaozhi=1;/标志位置位- 22 -