您好,欢迎来到筏尚旅游网。
搜索
您的当前位置:首页基于51单片机的串口通讯系统课程设计论文

基于51单片机的串口通讯系统课程设计论文

来源:筏尚旅游网
 . . .

引言

人类社会已经进入信息化时代,信息社会的发展离不开电子产品的进步。单片机的出现使人类实现利用编程来代替复杂的硬件搭建电路,它靠程序运行,并且可以修改。通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,这是别的器件需要费很大力气才能做到的,有些则是花大力气也很难做到的。一个不是很复杂的功能要是用美国50年代开发的74系列,或者60年代的CD4000系列这些纯硬件来搞定的话,电路一定是一块大PCB板!但是如果要是用美国70年代成功投放市场的系列单片机,结果就会有天壤之别!只因为单片机的通过你编写的程序可以实现高智能,高效率,以与高可靠性!

单片机应用的主要领域非常广,智能化家用电器、办公自动化设备商业营销设备、工业自动化控制、智能化仪表、智能化通信产品、汽车电子产品、航空航天系统和国防军事、尖端武器等领域。

单片机应用的意义不仅在于它的广阔围与所带来的经济效益,更重要的意义在于,单片机的应用从根本上改变了控制系统传统的设计思想和设计方法。以前采用硬件电路实现的大部分控制功能,正在用单片机通过软件方法来实现。以前自动控制中的PID调节,现在可以用单片机实现具有智能化的数字计算控制、模糊控制和自适应控制。这种以软件取代硬件并能提高系统性能的控制技术称为微控技术。随着单片机应用的推广,微控制技术将不断发展完善。

电路的集成化不仅对硬件电路的设计相关,与电路的布局同样相关。印刷版的出现使得电路产品更加规,体积更小。Protel99se是一款专业的绘制电路与印刷版的软件,近年来的不断升级使得其功能更加完善,出现了Altium Designer 、Protel DXP等升级版本。

1 / 20

. . .

1设计容与要求

1.1 功能要求

(1)下位机选用89S51或89S52单片机;

(2)下位机接收上位机的数据并显示在LED或LCD上; (3)下位机显示数据可以显示固定数据、位移数据、循环位移; 1.2 硬件要求

制作串口线和下位机与外围电路; 1.3 软件要求

Keil C或汇编编程设计,串口调试助手或Labview串口通信编程。

2 设计原理与单元硬件模块

2.1 上位机设计 2.1.1 RS232串口介绍

经过多年的发展,现今已经形成了许多串行通信接口的标准。其中本次课程设计用到的RS-232标准是美国EIA(电子工业联合会)与BELL公司一起开发的通信协议。它适合于数据传输速率在0—20000bit/s的围通信。

目前比较常用的串口有9针串口(DB9)和25针串口(DB25),近距离通信可以直接将通信接口用相应的线缆直接相连。 2.1.2 串口调试助手介绍

串口调试助手是串口调试相关工具,有多个版本。如:友善串口调试助手,支持9600,19200等常用各种波特率与自定义波特率,可以自动识别串口,能设置校验、数据位和停止位,能以ASCII码或十六进制接收或发送任何数据或字符,可以任意设定自动发送周期,并能将接收数据保存成文本文件,能发送任意大小的文本文件。

可实现功能如下所示: (1) 自动搜索串口,并打开串口;

(2) 支持多串口;

(3) 支持自定义波特率,支持非标准波特率; (4) 支持发送历史记录;

(5) 接收数据可以进行十六进制和ASCII切换;

(6) 接收数据时,光标可定位在指定行或在最后一行; (7) 可以以十六进制或ASCII格式,向指定串口发送数据; (8) 定时发送数据;

(9) 接收数据可以保存为文件,也可打开已保存数据文件; (10) 串口打开过程中,可修改通讯参数,如波特率; (11) 自动记录上次操作参数,如串口号、波特率等。

2 / 20

. . .

2.2 下位机硬件设计 2.2.1 设计原理与方法

下位机设计可分为单片机最小系统、RS232电平转换部分、数据显示部分。其系统框图大致图2-1所示。

RS232电平转换部分 单片机最小系统 数据显示部分 图2-1 系统框图

本次设计采用LCD显示由上位机发送的数据,并完成固定数据、位移数据、循环位移的数据显示。由上位机经RS232串口发送数据,经电平转换,转换成单片机可以接收的信号电压,通过单片机烧制的程序逻辑运算得出上位机所发送的数据,并在数据显示部分依次显示固定数据、位移数据、循环位移数据。电平转换由MAX232AEPE芯片完成,单片机最小系统使用的是AT89S52芯片,数据显示部分则由1602LCD液晶显示器完成。 2.2.2 单片机最小系统

图2-2 最小系统电路

单片机采用AT89S52,最小系统包括复位电路和时钟电路两部分,其中复位电路采用按键手动复位和上电自动复位组合,电路如图2-2左下部分所示:其中REST为单片机复位端,电容C3按键S1构成上电复位和手动复位电路。时钟电路如图2-2右下部分所示:晶振Y1频率采用的是11.0592MHZ,C1、C2为33p瓷片电容,X1和X2分别为单片机18

3 / 20

. . .

和19脚。

(1)单片机各引脚功能说明:

AT89S52管脚图如图2-3所示。 VCC:供电电压。 GND:接地。

P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门流。当P1口的管脚第一

次写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门电流,当P2口被写“1”时,其管脚被部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

P3口:P3口管脚是8个带部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89S52的一些特殊功能口,P3口同时为闪烁编程和编程校验接收一些控制信号。

RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。

4 / 20

. . .

/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。

/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有部程序存储器。注意加密方式1时,/EA将部锁定为RESET;当/EA端保持高电平时,此间部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。

XTAL1:反向振荡放大器的输入与部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。 (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)对目标板芯片编程时,可采用此下载线供电,也可以采用目标板本身供电,下载结果不影响目标板运行。

(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的电气特性不匹配,因此为了使单片机的

5 / 20

. . .

串行口能与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)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。

TTL/CMOS数据从11引脚(T1IN)、10引脚 (T2IN)输入转换成RS-232数据从14引脚(T1 OUT)、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所示。

电容器应选择1μF的电解电容。在使用过程中本人曾用过10μF的代替。

注意,由于RS232电平较高,在接通时产生的瞬时电涌非常高,很有可能击毁max232,所以在使用中应尽量避免热插拔。

图2-5 MAX232应用电路

2.2.4 数据显示部分 (1)LCD1602工作原理

1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形。

1602LCD是指显示的容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。

(2)LCD1602各引脚功能

6 / 20

. . .

1602采用标准的16脚接口,如图2-6所示,其中: 第1脚:VSS为电源地。 第2脚:VCC接5V电源正极。

第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。

图2-6 LCD1602引脚图

第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。

第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。 第6脚:E(或EN)端为使能(enable)端,高电平(1)时读取信息,负跳变时执行指令。

第7~14脚:D0~D7为8位双向数据端。

第15~16脚:空脚或背灯电源。15脚背光正极,16脚背光负极。 2.3 下位机软件设计 2.3.1 编程方案选择

本设计单片机的编程选择C语言编写,因为它简洁紧凑、灵活方便、运算符丰富、数据结构丰富、C是结构式语言、C语法限制不太严格,程序设计自由度大、C语言允许直接访问物理地址,可以直接对硬件进行操作、C语言程序生成代码质量高,程序执行效率高,一般只比汇编程序生成的目标代码效率低10へ20%、C语言适用围大,可移植性好C语言有一个突出的优点就是适合于多种操作系统, 如DOS、UNIX,也适用于多种机型。C语言具有绘图能力强,可移植性,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画它是数值计算的高级语言。所以我选用C语言来编写此程序。

2.3.2 程序流程图

如图2-7所示,为下位机程序流程图。

7 / 20

. . .

图2-7 程序流程图

为了实现系统固定显示以与位移显示的功能要求,在初始化单片机和LCD之后,系统首先判断是否接收到串口传来的数据。如果接收到数据,则关闭串口中断,并将接收到的十六进制数据转换成十进制和二进制数据,显示在LCD上5秒。然后,将二进制数据依

8 / 20

. . .

次向右位移,并间隔一秒显示在LCD上,共位移8次。在位移8次之后,将二进制数据依次向右循环位移,并间隔一秒显示在LCD上,共位移8次。完成全部位移显示之后,打开串口中断,继续判断串口是否接受数据,循环实现系统功能。 2.3.3 子程序设计

(1)固定显示定义,LCD控制口定义程序实现如下:

#include

#define uchar unsigned char //宏定义 #define uint unsigned int

/*******************************************************************/ sbit lcden=P0^2; sbit lcdrs=P0^0; sbit lcdwr=P0^1;

/*******************************************************************/ 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: READY \

/*******************************************************************/ (2)串口接收,参数设置程序实现如下:

void serial_chushihua() {

TMOD=0x20; TH1=0xfd; TL1=0xfd; TR1=1; REN=1; SM0=0; SM1=1; EA=1; }

void chushihua()

//初始化

9 / 20

//液晶控制口RS和EN

//串口初始化

//定时器1:计时,方式2 //定时器1初值,波特率9600 //启动定时器1

//设置SCON串行口控制寄存器 //允许接收

//方式1:10位异步收发 //开总中断 //开串口中断

ES=1;

. . .

{

lcd_chushihua(); lcd_guding(); }

//液晶初始化

//串口初始化 //写入液晶固定显示部分

serial_chushihua();

3 系统硬件和软件调试

3.1 调试所需仪器

数字万用表 1个 直流稳压源 1台 数字万用表 1个 信号发生器 1台 示波器 1台 3.2硬件调试

硬件调试主要:

(1)在Altium Designer仿真软件中进行仿真论证整个串口通信系统的正确性。计算并确定各个电阻、电容大小。

(2) 绘制好原理图后,根据原理图去印刷制板。在这个过程中要小心焊盘的大小是否合适,是否有短接或断路的线,然后进行修正工作。打孔时要对好孔,以与不要漏孔没有钻。

(3)在焊接电路的过程中,需要检查是否有虚焊或短路的线。这里要认真细致的检查,否则严重的影响到后续的调试。

(4)焊接完毕就是上电检查,看是否有短路或开路的地方。检查各元件否正常工作。 3.3 软件调试

在硬件没有问题的情况下,进行软件部分的调试。单片机的程序部分用C语言进行编写,程序稍微简单,容易调试。写好程序后,用KEIL软件进行编译以与调试得到“*.HEX”文件,然后用USBASP进行下载。

(1)下载进单片机后,观察系统能否正常运行。首先运行一个简单的测试程序检测单片机最小系统能否正常运行。

(2)测试串转并电路能否正确运行,看LCD是否按照程序控制指令工作。

4 系统不足与改进方法

本次课程设计因前期对系统功能分析不透彻,导致实现功能方式过于单一,没能实现实时控制数据位移,循环位移。只能通过下位机程序,基本实现系统功能。可以通过以下改进方法,完善系统功能。

(1) 通过增加按键,手动控制数据位移,循环位移方向。

10 / 20

. . .

(2) 完善程序,增加返回值,实时接收单片机处理数据状态。

在黎老师的悉心教导和同学的帮助下,通过这两周的课程设计我对AT89S52单片机做下位机的串行通信实现的设计和容有了更多的了解,通过自己的努力,编写了自己最完整的一套程序,虽然功能不是很完善,但我从中学到了很多东西。

在整个设计中我学会了在复杂的问题面前怎样去分析,找到问题的关键所在,而且认识到这种能力的重要性。比如在设计的前几天,我对设计中所用到的软件、控制装置都不太了解,感觉什么都不会,无从下手,但当我了解到这些东西在设计的系统中所起的作用后,从整体上看时,整个系统的流程就明了了,就明白了系统设计的需求,知道我应该做什么了,我觉得这就算是抓住了问题的关键吧。

通过这次设计我了解了单片机的发展概况、特点、应用,各个部件的原理,串行口的通信方式,LCD的工作原理,认识AT89C52与PC机串行通信的原理。懂得了软件设计流程,通信协议,波特率计算等。

最后再次衷心的感黎老师和帮助我的朋友。有了你们的支持和无私帮助,我才得以顺利完成课程设计。

11 / 20

. . .

参考文献

[1] 王选民.智能仪器原理与设计[M].:清华大学,2008. [2] 建中.单片机原理与运用[M].:电子科技大学,2001.

[3] 康华光.电子技术基础模拟部分(第五版)[M].:高等教育,2006. [4] 谭浩强.C程序设计 第三版[M].:清华大学,2006.6. [5] 惠昇.电梯控制技术[M].:机械工业,2003.

附 录

12 / 20

. . .

附录1 系统原理图:

附图1 系统原理图

附录2 下位机PCB图:

附图2 PCB图

附录3 元器件清单

13 / 20

. . .

附图3 元器件清单

附录4 下位机Keil C程序代码 #include

#define uchar unsigned char //宏定义

14 / 20

. . .

#define uint unsigned int

/*******************************************************************/ sbit lcden=P0^2; sbit lcdrs=P0^0; sbit lcdwr=P0^1;

/*******************************************************************/ 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: READY \

/*******************************************************************/ void delay(uint z) { }

void write_(uchar ) //液晶写命令 { }

void write_data(uchar date) //液晶写数据 {

lcdrs=1; P2=date; delay(5); lcden=1;

//E端一个正脉冲

15 / 20

//液晶控制口RS和EN

//延时z毫秒

uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--);

lcdrs=0; P2=; delay(5); lcden=1; delay(5); lcden=0;

//写指令

//E端一个正脉冲

//写数据

. . .

}

delay(5); lcden=0;

//液晶初始化

void lcd_chushihua() { }

void lcd_guding() { }

void lcd_guding1() { }

void lcd_guding2()

uint i;

write_(0x80+0x40); for(i=0;i<16;i++) { }

uint i; write_(0x80); { }

lcden=0; lcden=0; lcdwr=0; write_(0x38); write_(0x0c); write_(0x06); write_(0x01); write_(0x80);

//不打开光标 //指针后移 //清屏 //第一位

//写入液晶固定显示部分

//第一行

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

write_data(table1[i]); delay(2);

//写入液晶固定显示部分

//第二行

write_data(table2[i]); delay(2);

//写入液晶固定显示部分

16 / 20

. . .

{ }

void lcd_guding3() { }

void lcd_gduding4() { }

void serial_chushihua() {

TMOD=0x20; TH1=0xfd; TL1=0xfd; TR1=1;

//启动定时器1

17 / 20

uint i;

write_(0x80+0x40); for(i=0;i<16;i++) { }

//写入液晶固定显示部分

write_data(table3[i]); delay(2);

//第二行

uint i;

write_(0x80+0x40); for(i=0;i<16;i++) { }

write_data(table4[i]); delay(2);

//第二行

uint i; write_(0x80); { }

//串口初始化

write_data(table5[i]); delay(2);

//第二行

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

//定时器1:计时,方式2 //定时器1初值,波特率9600

. . .

}

REN=1; SM0=0; SM1=1; EA=1;

//设置SCON串行口控制寄存器 //允许接收

//方式1:10位异步收发 //开总中断 //开串口中断 //初始化 //液晶初始化

//串口初始化 //写入液晶固定显示部分

ES=1;

void chushihua() { }

lcd_chushihua(); lcd_guding();

serial_chushihua();

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/128%2; write_(0x80+4); write_data(bai+0x30); write_data(shi+0x30); write_data(ge+0x30); write_data(' '); write_data(wei7+0x30); write_data(wei6+0x30);

18 / 20

. . .

}

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; chushihua(); while(1) {

if(jieshou==0xff) { }

if(biaozhi==1) {

EA=0;

number=jieshou; display(number); lcd_guding1(); delay(5000); lcd_guding2(); for(i=0;i<8;i++) { }

number=jieshou; lcd_guding3(); for(i=0;i<8;i++)

19 / 20

//总的初始化

biaozhi=0; lcd_gduding4();

display(number); number=number>>1; delay(1000);

. . .

{ display(number); xunhuan=0x01&number; xunhuan=xunhuan<<7; number=number>>1; number=number|xunhuan; delay(1000);

}

biaozhi=0; RI=0; TI=0; EA=1;

}

}

}

void ser() interrupt 4 { RI=0;

jieshou=SBUF; biaozhi=1;

}

//串口中断服务程序

//RI标志位软件清零 //读取数据 //标志位置位

20 / 20

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- efsc.cn 版权所有 赣ICP备2024042792号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务