51单片机和PC机串行异步通信C语言设计.docx

上传人:b****6 文档编号:4776401 上传时间:2022-12-08 格式:DOCX 页数:18 大小:256.15KB
下载 相关 举报
51单片机和PC机串行异步通信C语言设计.docx_第1页
第1页 / 共18页
51单片机和PC机串行异步通信C语言设计.docx_第2页
第2页 / 共18页
51单片机和PC机串行异步通信C语言设计.docx_第3页
第3页 / 共18页
51单片机和PC机串行异步通信C语言设计.docx_第4页
第4页 / 共18页
51单片机和PC机串行异步通信C语言设计.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

51单片机和PC机串行异步通信C语言设计.docx

《51单片机和PC机串行异步通信C语言设计.docx》由会员分享,可在线阅读,更多相关《51单片机和PC机串行异步通信C语言设计.docx(18页珍藏版)》请在冰豆网上搜索。

51单片机和PC机串行异步通信C语言设计.docx

51单片机和PC机串行异步通信C语言设计

******************

实践教学

*******************

 

XXXXX大学

XXXX学院

XXX年秋季学期

 

通信系统综合训练课程设计

 

题目:

51单片机与PC机串行异步通信设计

专业班级:

姓名:

学号:

指导教师:

成绩:

摘要

随着计算机技术的迅速发展及其在各领域的广泛应用,远程控制以及数据采集系统多采用上位机和下位机的主从工作方式,由于串行通信具有高效可靠、价格便宜,遵循统一的标准等特点,因而成为主要的通信手段。

本次设计的任务是给出在分布式控制系统中上位PC机与下位单片机之间进行异步串行通信的解决方案,实现了上位机向多个(最多8个)下位机发送信息以及下位机接收上位机的数据并能够向上位机发送数据的功能。

在软件设计中,采用VC++6.0设计PC上的串口通信程序,在单片机编程上采用接近硬件系统的汇编语言编写通信程序及数据处理程序。

关键词:

单片机;串行通信;RS-232;异步通信

目录

前言1

第1章通信原理与系统组成2

1.1串行异步通信原理2

1.2系统构成3

第2章系统分析6

2.1系统设计思路6

2.2模块组成8

第3章硬件电路设计9

3.1RS-232接口电路设计9

3.2MAX232接口电路11

3.351单片机与PC机串行通信电路11

第4章软件设计13

心得体会18

参考文献19

致谢20

前言

随着计算机技术的迅速发展及其在各领域的广泛应用,远程控制以及数据采集系统多采用上位机和下位机的主从工作方式,由于串行通信具有高效可靠、价格便宜,遵循统一的标准等特点,因而成为主要的通信手段。

微机的分析处理能力较强,有很好的人机界面和大容量的多种存储方式,所以上位机一般采用微机。

而单片机具有价格低,功能强,抗干扰能力好,以及面向控制等特点,所以下位机采用单片机来构成主从式多机工作模式。

微机的分析处理能力较强,有很好的人机界面和大容量的多种存储方式,所以上位机一般采用微机。

而单片机具有价格低,功能强,抗干扰能力好,以及面向控制等特点,所以下位机采用单片机来构成主从式多机工作模式。

因此如何实现PC机与单片机之间的通信具有重要的现实意义。

本次设计的任务是给出在分布式控制系统中上位PC机与下位单片机(AT89C51)之间进行异步串行通信的解决方案,实现了上位机向多个(最多8个)下位机发送信息以及下位机接收上位机的数据并能够向上位机发送数据的功能。

要求在实际运行过程中,简单方便,稳定可靠,较好地解决上位机与下位机之间的通信问题。

第1章通信原理与系统组成

1.1串行异步通信原理

串行通信,是指使用一条数据线,将数据一位一位地依次传输,每一位数据占据一个固定的时间长度。

其只需要少数几条线就可以在系统间交换信息,特别使用于计算机与计算机、计算机与外设之间的远距离通信。

计算机主机与外设之间以及主机系统与主机系统之间数据的串行传送。

使用串口通信时,发送和接收到的每一个字符实际上都是一次一位的传送的,每一位为1或者为0。

串行通信可以分为同步通信和异步通信两类。

同步通信是按照软件识别同步字符来实现数据的发送和接收,异步通信是一种利用字符的再同步技术的通信方式。

异步通信所传输的数据格式(串行帧)由1个起始位、7个或8个数据位、1~2个停止位(含1.5个停止位)和1个校验位组成。

起始位约定为0;空闲位约定为1。

异步通信实质是指甲乙通信双方采用独立的时钟,每个数据均以起始位开始,停止位结束,起始位触发甲乙双方同步时钟。

每个异步串行帧中的1位彼此严格同步,位周期相同。

所谓异步是指发送、接收双方的数据帧与帧之间不要求同步,也不必同步。

同步通信所传输的数据格式(也称同步串帧)是由多个数据帧构成的,每帧有两个同步字符作为起始位以触发同步时钟开始发送或接收数据。

空闲位需发送同步字符。

因此,同步是指发送、接收双方的数据帧与帧之间严格同步,而不只是位与位之间严格同步。

异步通信比较灵活,适用于数据的随机发送/接收;而同步通信则是成批数据传送。

异步传输一批数据因每个字节均有起始位和停止位控制而使发送/接收速度有所降低,一般适用于每秒50~9600位,而同步传输速度较快,可达每秒80万位。

所以本次设计选用串行异步通信。

1.2系统构成

1.AT89C51单片机

在系统设计中使用AT89C51单片机作为下位机,与PC机进行串口通信。

AT89C51是美国ATMEL公司生产的低电压,高性能的CMOS8位单片机片,内置4Kbytes的可反复擦写的只读程序存储器(PEROM)和128bytes的随机存储器(RAM),器件采用ATMEL公司的高密度、非易失存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元,功能强大。

AT89C51包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线.

本设计中主要是利用AT89C51的异步通信(UART)模式原理实现单片机与PC机之间的串口通信的。

由于CPU与接口间按并行方式传输,接口与外设之间按串行方式传输,因此,在串行接口中,要由接收移位寄存器把串行方式转换成并行方式,由发送移位寄存器把并行方式转换成串行方式。

图1.251单片机串行接口图

异步模式的帧格式有1位起始位、7位或8位数据位,校验位,1位地址位,1或2位停止位构成。

在异步模式下,AT89C51支持两种多机模式:

线路空闲多机模式和地址位多机模式。

线路空闲模式下,数据块被一段空闲的时间分割。

在字符的第一个停止位之后收到10个以上的1,表示检测到线路空闲;如果采用两个停止位,则第二个停止位被认为是空闲周期的第一个信号。

在使用地址位多机模式时,字符包含一个附加的位作为地址标识,数据快的第一个字符带有一个置位的地址位,用以表明该字符是一个地址。

由于已经设置了控制寄存器中的MM=1,故在本设计中选择了地址位多机模式。

2.RS-232串行接口

目前RS-232是PC机与通信工业中应用最广泛的一种串行接口。

RS-232被定义为一种在低速率串行通信中增加通信距离的单端标准。

RS-232C总线标准,是美国电子工业协会(Electronic Industry Association)的推荐标准。

RS-232C标准中的许多信号是为通信业务联系或信息控制而定义的,在计算机串行通信中主要使用如下信号:

①数据传输信号:

发送数据(TXD)、接收数据(RXD)。

②调制解调器控制信号:

请求发送(RTS)、清除发送(CTS)、数据通信设备准备就绪(DSR)、数据终端设备准备就绪(DTR)。

③定位信号:

接收时钟(RXC)、发送时钟(TXC)。

④信号地和保护地。

 

第2章系统分析

51单片机是一种集CPU,RAM,FLASHROM,I/O接口和定时中断系统于一体的微型计算机。

只要有外加电源和晶体振荡器就可以独立完成对数字信号的算术运算,逻辑控制,串行通信等功能。

当需要处理较复杂数据或需要对多个采集数据进行综合处理以及需要进行集散控制时,单片机的算术运算和逻辑运算能力显的不足,这时往往需要借助计算机系统。

将单片机采集的数据通过串行口传给PC机,由PC机高级语言或数据库语言进行处理,或者实现PC机对远程单片机进行控制。

51系列单片机内部的串行口具有通信的功能,该串行口可以作为通信接口,利用该串行口与PC机的高级语言或数据库语言进行整理及统计等复杂处理就能满足实际的应用需要。

51单片机的开发除了硬件支持外,同样离不开软件。

用汇编语言或C语言等高级语言编写的源程序必须转换为机器码才能被执行。

2.1系统设计思路

本文要求设计一个51单片机与PC串口间通讯系统,实现单片机与PC机之间的远程通信。

设计分发送和接收两大模块,发送部分通过硬件电路的引用。

其中包括RS-232接口电路、MAX232接口电路,引用相应的管脚相连,并将相应的软件程序转入电路中,即可运行。

当电路是相对独立时,可直接调速电路参数值,其影响和干扰就小。

在满足发射和接收模块的要求后可单独对控制进行调整,程序的编入,接收部分相应的结果即以实现,因此实现了PC机对远端单片机的控制。

单片机和PC机之间的通信选用异步串行通信。

串行通信方式从原理上可以分成两种:

同步串行I/O和异步串行I/O。

(1)异步通信方式

异步方式实现简单,在微型计算机中大量使用异步串行I/O方式,为了避免连续传送过程中的误差积累,每个字符都要独立地确定起始和结束位,字符和字符间还可能有长度不定的空间时间。

在异步通信方式中,数据或字符是一帧一帧传送的,每一串行帧的格式如图一所示。

在帧格式中包含了4个组成部分:

起始位,数据位,奇偶位和停止位。

第N个字符(7~12)第N+1个字符

00/10/10/10/1…0/10/111100/1

起奇偶停止位空闲

始5~8位数据位校验位

位位

图2.1异步串行通信的格式

起始位占一位,用逻辑“0”表示字符的开始。

起始位后面紧接着是数据位,数据位的个数可以是5位,6位,7位或是8位。

在数据位传送过程中,规定地位在前,高位在后。

数据位发送完后,接下来的是1位奇偶校验位。

奇偶校验用于有限差错检测,通信双方约定一致的奇偶校验方式。

停止位在最后,用逻辑值“1”表示一个字符传送的结束。

结束位可以是1位,1.5位或是2位。

接收端收到停止位后,知道上一字符已传送完毕,通信线路上便又恢复逻辑“1”状态,直至下一个字符数据的起始位到来。

异步通信方式每传送一个字符都要附加一些标志信息,因此其传输效率低,一般用于低速通信系统。

但由于接收方接收每个字符时都重新同步,故少量的漂移不会造成太大的影响。

(2)同步通信方式

在同步通信中,在数据或字符开始传送前用同步字符来指示,由时钟来实现发送端和接收端同步,当检测到规定的同步字符后,就连续按顺序传送数据。

同步字符是一种特定的二进制序列,在传送的数据中不会出现。

同步传送格式如图2.2所示:

同步数据……数据CRC1CRC2

a)

单同步格式

同步同步数据……数据CRC1CRC2

b)双同步格式

图2.2同步格式

同步传送方式传输效率高,但是硬件复杂,成本高,一般用于高速率,大容量的数据通信中。

在比较同步通信和异步通信的优缺点之后,我们可以在本次设计中采用异步通信方式。

2.2模块组成

为实现该系统的生成,主要包含两大模块,即单片机模块和通信模块。

1.单片机模块

单片机模块中主要包括单片机、复位电路、晶振电路、上拉电阻和端口扩展等。

端口扩展部分可以通过跳线将单片机的I/O口在系统板上的功能释放,并将其连接到扩展上。

2.通信模块

通信模块中采用MAX232作为通信电平转换电路、实现RS-232的数据传输,可以直接与PC进行通信。

第3章硬件电路设计

3.1RS-232接口电路设计

由于AT89C51单片机最大工作电压为6V,所以在与PC机进行串口通信的时候需要进行EIA-RS-232逻辑电平转换。

EIA-RS-232是美国电子工业协会(EIA)制定的串口通信协议,“C”表示标准修第几次修改,其信号电平采用负逻辑,逻辑“1”的电平是-5V~-15V,逻辑“0”的电平为+5V~+15V,因为其有2V的噪声容限,故最终限制接收器能识别低至+3V的信号作为逻辑“0”,高到-3V的信号作为逻辑“1”。

因此,实际工作时,应保证电平在±(3~15)V之间。

RS-232采用不平衡传输方式,收发端的数据信号是相对信号地。

9针串口引脚如表3-1所示。

表3-19针串口引脚定义

9针串口(DB9)

针号

功能说明

缩写

1

数据载波检测

DCD

2

接收数据

RXD

3

发送数据

TXD

4

数据终端准备

DTR

5

信号地

GND

6

数据设备准备好

DSR

7

请求发送

RTS

8

清除发送

CTS

9

振铃指示

DELL

典型的RS-232信号在正负电平之间摆动,在发送数据时,发送端驱动器输出正电平在5V~15V,负电平在-5V~-15V;在接收数据时,接收器的典型工作电平是3V~12V和-3V~-12V。

串口传输数据只要有接收数据针脚和发送数据针脚就能实现,其连接方式如表3-2所示。

表3-2串口通信连接方式

9针—9针

2

3

3

2

5

5

表3-2是对微机标准串行口而言的,还有许多非标准设备则需要根据具体情况而定。

当51单片机与PC机通过RS-232标准总线串行通信时,由于RS-232信号电平与51单片机信号电平不一致,因此,必须进行信号电平转换。

其常用的方法有两种,一种是采用运算放大器、晶体管、光电隔离器等器件组成的电路来实现,另一种是采用专门集成芯片来实现。

下面以MAX232专门集成芯片为例来介绍接口电路的实现。

图3.1RS-232接口电路

3.2MAX232接口电路

MAX232

AT89C51

图3.2MAX232接口电路

MAX232芯片是MAXIM公司生产的具有两路接收器和驱动器的IC芯片,其内部有一个电源电压变换器,可以将输入+5V的电压变换成RS-232C输出电平所需的+/-12V的电压。

在其内部同时也完成TTL信号电平和RS-232信号电平的转换。

所以,采用此芯片实现接口电路只需单一的+5V电源就可以。

3.351单片机与PC机串行通信电路

图3.3是由芯片MAX232实现51单片机与PC机串行通信的典型接线图。

图中外接电解电容C1,C2,C3,C4用于电源电压变换,提高抗干扰能力,它们可以取相同数值电容1.0uF/16V.其值一般为0.1UF.选择任一组电平转换电路实行串行通信,如图中选T1in,R1out分别与51单片机的TXD,RXD相连,T1out,R1in分别与PC机中RS232接口的RSD,TSD相连,这种发送与接收的对应关系不能连错,则不能正常工作。

图3.3用MAX232实现串行通信接口电路

第4章软件设计

鉴于单片机技术比较成熟,且开发过程中可以利用的资源和工具丰富、价格便宜、成本低。

故设计用C语言对其编程并烧录到芯片内部,C语言表达和运算能力比较强,且具有很好的可移植性和硬件控制能力,程序可分为发射部分和接收部分。

分布式控制系统中的下位机的每台单片机均有唯一的地址。

通信开始时,先由PC机呼叫被叫单片机的地址,单片机在接收到PC机的呼叫后,首先判断是不是自己的地址,如果不是就不予理睬。

如果是,则发送呼叫应答信号,并根据上位机的命令进行相应的接收或发送。

串口接收和发送都采用中断方式,设计单片机通信程序时,必须充分发挥单片机的效率,由于单片机多应用于实时性较强的控制场合,因此,应将及时响应和控制对象的动作放在优先考虑的位置,以尽量减少通信等辅助性操作所占用的CPU时间。

基于上述考虑,在设计单片机通信程序时,将中断程序分为接收中断服务程序和发送中断服务程序两部分。

1、接收中断服务程序

当有数据收到时,设置一个标志通知主程序有数据到来,当地址位验证无误后,则开始接收数据。

对于接收中断,程序处于等待状态,当外面有数据到来时则触发接收,进入接收中断服务程序,当地址验证正确开始后面的数据,中断从“RxBUF1”寄存器里读取数据,将读到的数据放到全局缓冲区里,在接收数据之后设置一个标志“nRev_UART1”来通知主程序,完成后等待下一中断的到来。

接收中断服务程序包含了对地址位是否匹配的验证。

2、发送中断服务程序

当主程序有数据要发送时,设置一个中断标志进入中断并发送数据。

下面为程序代码:

对于发送中断,程序一般处于禁止等待状态。

只有当单片机的发送缓冲区历由数据需要发送,并将发送中断置为允许方式后,发送中断才开始工作。

发送时从缓冲区里发送数据,遵守通讯协议:

首先发送地址位,然后发送需要传输的数据,最后发送校验以及结束标志。

下面为串口通信程序流程图:

接收断点入口

断点保护

   

读字符到接收缓冲区

N

是否接收完指定字符

Y

 

重新设置启动定时器

置接收完标志

关闭接收定时器

断点恢复

返回断点

 

   

图4.1接收中断处理

 

发送断点入口

   

断点保护

Y

发送缓冲区是否为空

N

 

发送中断关闭

发送下一字符

发送缓冲区字符减一

断点恢复

断点返回

 

 图4.2发送中断处理

以上两程序可以看出采用中断有很好的结构,只要在中断服务程序里理接收和发送数据,然后与主程序进行数据交换,易实现多任务操作,很好利用单片机资源。

51单片机与PC机串行异步通信的C程序:

#include

#include

unsignedcharch;

bitread_flag=0;

voidinit_serialcom(void)//串口通信初始设定

{

SCON=0x50;//UART为模式1,8位数据,允许接收

TMOD|=0x20;//定时器1为模式2,8位自动重装

PCON|=0x80;//SMOD=1;

TH1=0xFD;//Baud:

19200fosc="11".0592MHz

IE|=0x90;//EnableSerialInterrupt

TR1=1;//timer1run

TI=1;

}

//向串口发送一个字符

voidsend_char_com(unsignedcharch)

{

SBUF=ch;

while(TI==0);

TI=0;

}

//串口接收中断函数

voidserial()interrupt4using3

{

if(RI)

{

RI=0;

ch=SBUF;

read_flag=1;//就置位取数标志

}

}

main()

{

init_serialcom();//初始化串口

while

(1)

{

if(read_flag)//如果取数标志已置位,就将读到的数从串口发出

{

read_flag=0;//取数标志清0

send_char_com(ch);

}

}

}

心得体会

经过一段时间的学习与研究,至此,本次设计已经全部完成,所设计的接口电路、单片机串行通信、传输模块基本达到预期的目的,顺利地完成了任务。

进行循环数据采集,并且误差范围非常小,数据采集速度高,能够满足一般多通道数据采集要。

在做设计之初,我查了很多关于单片机串行通信、单片机原理与接口技术的设计资料,我发现经了长时间的实践的检验与仔细思考,我端正了自己的态度,同时我也找到了创新点的所在,作好了一切准备工作之后便开始了紧张的设计工作。

做设计的这段时间是紧张的一段时间,也是重新学习努力探索的一段时间,更是充满收获喜悦的一段时间。

经过这次设计,我学会了许多新知识,学会了如何查找资料,学会了遇到问题先分析问题解决问题的能力,学会了如何充分的利用网络资源来提高自己的文化知识和专业知识,学会了单片机系统开发的一般流程;也明白了许多不曾明白的道理,明白了求学应当有严谨的作风,并且更应该有锲而不舍、坚强的韧劲。

参考文献

[1]张旭涛.曾现峰.单片机原理与应用.北京:

北京理工大学出版社.2006

[2]穆兰.单片微型计算机原理及接口技术.北京:

机械工业出版社.2002

[3]杨金岩.郑应强.51单片机数据传输接口扩展技术与应用实例.北京:

人民邮电出版社.2006

[4]胡伟.季晓衡.单片机C程序设计及应用实例.北京:

人民邮电出版社.2006

[5]黄智伟.全国大学生电子设计竞赛系统设计【M】.北京:

北京航空航天大学出版社.2006

[6]胡汉才组编.单片机原理及接口技术.北京:

清华大学出版社,1996

致谢

经过三个星期的努力,终于完成了PC机与单片机的串行通信这个设计。

在此,我要衷心感谢我的指导老师彭老师,在整个设计过程中,他给予了我悉心的指导和无私的帮助,同时还要感谢同班的许多同学,我们在相互学习和交流中,解决问题共同进步。

有了这么多的支持和无私帮助,才使我得以顺利完成毕业设计。

衷心感谢在百忙之中评阅论文和参加答辩的各位老师及所有任课老师,感谢你们为我们的学习与成才创造的各种条件和付出的辛勤劳动。

室友和身边的朋友们在平时的学习、生活中给予了我很大的支持,在此表示衷心的感谢!

最后感谢家人,是他们给予我精神上的鼓励、生活上的照顾、学业上的支持,使我顺利完成大学学业。

 

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

当前位置:首页 > 高中教育 > 高考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1