硬件课程设计串口通信项目设计方案.docx

上传人:b****7 文档编号:9935471 上传时间:2023-02-07 格式:DOCX 页数:22 大小:346.29KB
下载 相关 举报
硬件课程设计串口通信项目设计方案.docx_第1页
第1页 / 共22页
硬件课程设计串口通信项目设计方案.docx_第2页
第2页 / 共22页
硬件课程设计串口通信项目设计方案.docx_第3页
第3页 / 共22页
硬件课程设计串口通信项目设计方案.docx_第4页
第4页 / 共22页
硬件课程设计串口通信项目设计方案.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

硬件课程设计串口通信项目设计方案.docx

《硬件课程设计串口通信项目设计方案.docx》由会员分享,可在线阅读,更多相关《硬件课程设计串口通信项目设计方案.docx(22页珍藏版)》请在冰豆网上搜索。

硬件课程设计串口通信项目设计方案.docx

硬件课程设计串口通信项目设计方案

硬件课程设计串口通信项目设计方案

第一章课题背景

1.1引言

在通信领域内,有两种数据通信方式:

并行通信和串行通信。

随着计算机网络化和微机分级分布式应用系统的发展,通信的功能越来越重要。

通信是指计算机与外界的信息传输,既包括计算机与计算机之间的传输,也包括计算机与外部设备,如终端、打印机和磁盘等设备之间的传输。

在PC机的主板上,有一种类型的接口可能为我们所忽视,那就是RS-232C串行接口,在微软的Windows系统中称其为COM。

我们可以通过设备管理器来查看COM的硬件参数设置,如图1。

迄今为止,几乎每一台PC都包含COM。

本质而言,COM是PC为和外界通信所提供的一种串行数据传输的接口。

COM接口是指ComponentObjectMode接口,是微软定义的标准接口。

串口叫做串行接口,现在的PC机一般有两个串行口COM1和COM2。

串行口不同于并行口之处在于它的数据和控制信息是一位接一位地传送出去的。

虽然这样速度会慢一些,但传送距离较并行口更长,因此若要进行较长距离的通信时,应使用串行口。

通常COM1使用的是9针D形连接器,也称之为RS-232接口,而COM2有的使用的是老式的DB25针连接器,也称之为RS-422接口,这种接口目前已经很少使用。

作为一种物理通信的途径和设备,它和目前风靡的另一种串行接口――USB所提供的功能是一致的。

不过RS-232C显然已经开始被后起之秀USB赶超,因为USB的传输速率已经远远超过了RS-232C。

尽管如此,RS-232C仍然具有非常广泛的应用,在相对长的一段时间里,难以被USB等接口取代。

RS-232C接口(又称EIARS-232C),1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定,全名是"数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准"。

硬件原理众所周知,CPU与存储芯片和I/O芯片的通信是并行的(并行传输的最大位数依赖于CPU的字长、数据总线的宽度),一种叫做UART(通用异步收发器,UniversalAsynchronousReceiver/Transmitter)的芯片提供了并行数据传输和RS-232C串行数据传输方式的转换。

1.2串行通信的基本概念

在微型计算机中,通信(数据交换)有两种方式:

串行通信和并行通信。

串行通信—是指计算机与I/O设备之间仅通过一条传输线交换数据,数据的各位是按顺序依次一位接一位进行传送。

并行通信—是指计算机与I/O设备之间通过多条传输线交换数据,数据的各位同时进行传送。

应该理解所谓的并行和串行,仅是指I/O接口与I/O设备之间数据交换(通信)是并行或串行。

无论怎样CPU与I/O接口之间数据交换总是并行。

二者比较:

串行通信的速度慢,但使用的传输设备成本低,可利用现有的通信手段和通信设备,适合于计算机的远程通信;并行通信的速度快,但使用的传输设备成本高,适合于近距离的数据传送。

1.异步串行通信

所谓异步通信,是指数据传送以字符为单位,字符与字符间的传送是完全异步的,位与位之间的传送基本上是同步的。

异步串行通信的特点可以概括为:

①以字符为单位传送信息。

②相邻两字符间的间隔是任意长。

③接收时钟和发送时钟只要相近就可以。

异步方式特点简单的说就是:

字符间异步,字符内部各位同步。

2.同步串行通信

所谓同步通信,是指数据传送是以数据块(一组字符)为单位,字符与字符之间、字符内部的位与位之间都同步。

同步串行通信的特点可以概括为:

1以数据块为单位传送信息。

2在一个数据块(信息帧)内,字符与字符间无间隔。

③接收时钟与发送进钟严格同步。

3.波特率、波特率因子、位周期

波特率——是指单位时间传输二进制数据的位数,其单位为位/秒(B/S)或波特。

它是一个用以衡量数据传送速率的量。

一般串行异步通行的传送速度为50~19200波特,串行同步通信的传送速度可达500千波特。

波特率因子——是指时钟脉冲频率与波特率的比。

位周期Td——是指每个数据位传送所需要的时间,它与波特率的关系是:

Td=1/波特率。

它用以反映连续二次采样数据之间的间隔时间

1.3串口的基本概念

串口是计算机上一种非常通用设备通信的协议(不要与通用串行总线UniversalSerialBus或者USB混淆)。

大多数计算机包含两个基于RS232的串口。

串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS-232口。

同时,串口通信协议也可以用于获取远程采集设备的数据。

串口通信的概念非常简单,串口按位(bit)发送和接收字节。

尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。

它很简单并且能够实现远距离通信。

比如IEEE488定义并行通行状态时,规定设备线总常不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。

典型地,串口用于ASCII码字符的传输。

通信使用3根线完成:

(1)地线,

(2)发送,(3)接收。

由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。

其他线用于握手,但是不是必须的。

串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。

对于两个进行通行的端口,这些参数必须匹配:

a,波特率:

这是一个衡量通信速度的参数。

它表示每秒钟传送的bit的个数。

例如300波特表示每秒钟发送300个bit。

当我们提到时钟周期时,我们就是指波特率例如如果协议需要4800波特率,那么时钟是4800Hz。

这意味着串口通信在数据线上的采样率为4800Hz。

通常电话线的波特率为14400,28800和36600。

波特率可以远远大于这些值,但是波特率和距离成反比。

高波特率常常用于放置的很近的仪器间的通信,典型的例子就是GPIB设备的通信。

b,数据位:

这是衡量通信中实际数据位的参数。

当计算机发送一个信息包,实际的数据不会是8位的,标准的值是5、7和8位。

如何设置取决于你想传送的信息。

比如,标准的ASCII码是0~127(7位)。

扩展的ASCII码是0~255(8位)。

如果数据使用简单的文本(标准ASCII码),那么每个数据包使用7位数据。

每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。

由于实际数据位取决于通信协议的选取,术语“包”指任何通信的情况。

c,停止位:

用于表示单个包的最后一位。

典型的值为1,1.5和2位。

由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。

因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。

适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。

d,奇偶校验位:

在串口通信中一种简单的检错方式。

有四种检错方式:

偶、奇、高和低。

当然没有校验位也是可以的。

对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。

例如,如果数据是011,那么对于偶校验,校验位为0,保证逻辑高的位数是偶数个。

如果是奇校验,校验位位1,这样就有3个逻辑高位。

高位和低位不真正的检查数据,简单置位逻辑高或者逻辑低校验。

这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步

1.4RS232标准介绍

RS-232-C接口(又称EIARS-232-C)是目前最常用的一种串行通讯接口。

它是在1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。

它的全名是“数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准”该标准规定采用一个25个脚的DB25连接器,对连接器的每个引脚的信号内容加以规定,还对各种信号的电平加以规定。

(1)接口的信号内容

实际上RS-232-C的25条引线中有许多是很少使用的,在计算机与终端通讯中一般只使用3-9条引线。

RS-232-C最常用的9条引线的信号内容见附表1所示

(2)接口的电气特性

在RS-232-C中任何一条信号线的电压均为负逻辑关系。

即:

逻辑“1”,-5—-15V;逻辑“0”+5—+15V。

噪声容限为2V。

即要求接收器能识别低至+3V的信号作为逻辑“0”,高到-3V的信号作为逻辑“1”

(3)接口的物理结构

RS-232-C接口连接器一般使用型号为DB-25的25芯插头座,通常插头在DCE端,插座在DTE端.一些设备与PC机连接的RS-232-C接口,因为不使用对方的传送控制信号,只需三条接口线,即“发送数据”、“接收数据”和“信号地”。

所以采用DB-9的9芯插头座,传输线采用屏蔽双绞线。

(4)传输电缆长度

由RS-232C标准规定在码元畸变小于4%的情况下,传输电缆长度应为50英尺,其实这个4%的码元畸变是很保守的,在实际应用中,约有99%的用户是按码元畸变10-20%的范围工作的,所以实际使用中最大距离会远超过50英尺,美国DEC公司曾规定允许码元畸变为10%而得出附表2的实验结果。

其中1号电缆为屏蔽电缆,型号为DECP.NO.9107723内有三对双绞线,每对由22#AWG组成,其外覆以屏蔽网。

2号电缆为不带屏蔽的电缆。

型号为DECP.NO.9105856-04是22#AWG的四芯电缆。

1.RS-232-C是美国电子工业协会EIA(ElectronicIndustryAssociation)制定的一种串行物理接口标准。

RS是英文“推荐标准”的缩写,232为标识号,C表示修改次数。

RS-232-C总线标准设有25条信号线,包括一个主通道和一个辅助通道,在多数情况下主要使用主通道,对于一般双工通信,仅需几条信号线就可实现,如一条发送线、一条接收线及一条地线。

RS-232-C标准规定的数据传输速率为每秒50、75、100、150、300、600、1200、2400、4800、9600、19200波特。

RS-232-C标准规定,驱动器允许有2500pF的电容负载,通信距离将受此电容限制,例如,采用150pF/m的通信电缆时,最大通信距离为15m;若每米电缆的电容量减小,通信距离可以增加。

传输距离短的另一原因是RS-232属单端信号传送,存在共地噪声和不能抑制共模干扰等问题,因此一般用于20m以内的通信。

 

 

 

 

第二章设计简介及设计方案论述

2.1串口通信原理

串口通信原理:

所谓"串行通信"是指外设和计算机间使用一根数据信号线,数据在一根数据信号线上按位进行传输,每一位数据都占据一个固定的时间长度。

这种通信方式使用的数据线少,在远距离通信中可以节约通信成本,当然,其传输速度比并行传输慢。

相比之下,由于高速率的要求,处于计算机内部的CPU与串口之间的通讯仍然采用并行的通讯方式,所以串行口的本质就是实现CPU与外围数据设备的数据格式转换(或者称为串并转换器),即当数据从外围设备输入计算机时,数据格式由位(bit)转化为字节数据;反之,当计算机发送下行数据到外围设备时,串口又将字节数据转化为位数据。

串行端口的本质功能是作为CPU和串行设备间的编码转换器。

当数据从CPU经过串行端口发送出去时,字节数据转换为串行的位。

在接收数据时,串行的位被转换为字节数据。

在Windows环境下,串口是系统资源的一部分。

应用程序要使用串口进行通信,必须在使用之前向操作系统提出资源申请要求(打开串口),通信完成后必须释放资源(关闭串口)。

串口信号线的一个完整的RS-232C接口有22根线,采用标准的25芯插头座(或者9芯插头座)。

25芯和9芯的主要信号线相同。

以下的介绍是以25芯的RS-232C为例。

主要信号线定义:

2脚:

发送数据TXD;3脚:

接收数据RXD;4脚:

请求发送RTS;5脚:

清除发送CTS;

6脚:

数据设备就绪DSR;20脚:

数据终端就绪DTR;8脚:

数据载波检测DCD;

1脚:

保护地;7脚:

信号地。

DB9和DB25的常用信号脚说明如下:

表2-1

 9针串口(DB9)

25针串口(DB25)

针号

功能说明

缩写

针号

功能说明

缩写

1

数据载波检测

DCD

8

数据载波检测

DCD

2

接收数据

RXD

3

接收数据

RXD

3

发送数据

TXD

2

发送数据

TXD

4

数据终端准备

DTR

20

数据终端准备

DTR

5

信号地

GND

7

信号地

GND

6

数据设备准备好

DSR

6

数据准备好

DSR

7

请求发送

RTS

4

请求发送

RTS

8

清除发送

CTS

5

清除发送

CTS

9

振铃指示

DELL

22

振铃指示

DELL

②电气特性:

数据传输速率最大可到20Kbps,最大距离仅15m.

注:

看了微软的MSDN6.0,其WindowsAPI中关于串行通讯设备(不一定都是串口RS-232C或RS-422或RS-449)速率的设置,最大可支持到RS_256000,即256Kbps!

也不知道到底是什么串行通讯设备?

但不管怎样,一般主机和单片机的串口通讯大多都在9600bps,可以满足通讯需求。

③接口的典型应用:

大多数计算机应用系统与智能单元之间只需使用3到5根信号线即可工作。

这时,除了TXD、RXD以外,还需使用RTS、CTS、DCD、DTR、DSR等信号线。

(当然,在程序中也需要对相应的信号线进行设置。

)以上接法,在设计程序时,直接进行数据的接收和发送就可以了,不需要对信号线的状态进行判断或设置。

(如果应用的场合需要使用握手信号等,需要对相应的信号线的状态进行监测或设置。

“并行通信”是把一个字符的各数位用几条线同时进行传输,传输速度快,信息率高。

但它比串行通信所用的电缆多,故常用在传输距离较短(几米至几十米)、数据传输率较高的场合。

实现并行通信的接口就是并行接口。

并行接口可设计为只作为输入/输出接口,也可设计为既作为输入又作为输出的接口。

它可以用两种方法实现,一种是利用同一个接口中的两个通路,一个作输入通路,一个作输出通路;另一种使用同一个双向通路,既作为输入又作为输出。

连接设备接口有PS/2,PATA,LPT等串行通信是指数据一位一位地依次传输,每一位数据占据一个固定的时间长度。

其只要少数几条线就可以在系统间交换信息,特别适用于计算机与计算机、计算机与外设之间的远距离通信,连接设备接口有SATA,USB等。

串口是计算机上一种非常通用设备通信的协议(不要与通用串行总线UniversalSerialBus或者USB混淆)。

大多数计算机包含两个基于RS232的串口。

串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS-232口。

同时,串口通信协议也可以用于获取远程采集设备的数据。

串口通信的概念非常简单,串口按位(bit)发送和接收字节。

尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。

它很简单并且能够实现远距离通信。

比如IEEE488定义并行通行状态时,规定设备线总常不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。

2.2MicrosoftCommunicationsControl控件简介

VisualC++为我们提供了一种好用的ActiveX控件MicrosoftCommunicationsControl(MSComm)来支持应用程序对串口的访问,在应用程序中插入MSComm控件后就可以较为方便地实现对通过计算机串口收发数据。

要使用ActiveX控件MSComm,程序员必须将其添加入工程,其方法是:

(1)单击主菜单project的子菜单AddToproject的ComponentsandControls选项;

(2)在弹出的"ComponentsandControlsGallery"对话框中选择RegisteredActiveXControls文件夹中的"MicrosoftCommunicationsControl,version6.0"选项,如下图:

图2-1

基本上,MSComm的诸多接口可以分为如下几类:

(1)打开与设置串口接口函数;

(2)获得串口设置和串口状态接口函数;(3)设置串口发送数据方式、缓冲区接口及发送数据接口函数;(4)设置串口接收数据方式、缓冲区接口及接收数据接口函数;(5)设置与获取串口上发生的事件接口函数。

以下介绍设置中遇到的几个相关函数。

SetCommPort:

指定使用的串口。

GetCommPort:

得到当前使用的串口。

SetSettings:

指定串口的参数。

一般设为默认参数"9600,N,8,1"。

这样方便与其他串口进行通讯。

GetSettings:

取得串口参数。

SetPortOpen:

打开或关闭串口,当一个程序打开串口时,另外的程序将无法使用该串口。

GetPortOpen:

取得串口状态。

GetInBufferCount:

输入缓冲区中接受到的字符数。

SetInPutLen:

一次读取输入缓冲区的字符数。

设置为0时,程序将读取缓冲区的全部字符。

GetInPut:

读取输入缓冲区。

GetOutBufferCount:

输出缓冲区中待发送的字符数。

SetOutPut:

写入输出缓冲区。

一般而言,使用上述函数和属性就可以进行串口通讯了。

2.3串口通信基本步骤

实现串口通信的基本步骤如下流程图所示:

图2-2

弄清了程序的流程,下面的步骤就是编写程序。

 

第三章详细设计

3.1建立工程与使用控件

打开VC++6.0建立基于对话框的MFC应用程序mytest,如图3-1

图3-1

在项目中插入MSComm控件

工程->增加到工程->ComponentsandControls->双击RegisteredActiveXControls->选择MicrosoftCommunicationsControl,version6.0->Insert,按默认值添加,多了个电话图标,这是增加后串口通信控件。

如图3-2

图3-2

3.2程序界面布局

删除确认、取消和提示框,添加“电话”、静态文本、按钮、编辑框,拖动添加的控件,根据喜好布局。

如下图3-3所示

图3-3

3.3初始化串口

查看->建立类向导MFCClassWizard->MemberViariable,选择ClassName为CmytestDlg的类,ControlID为MSCOMM1,双击它,为它添加控制变量m_ctrlComm类似的,选择其它项修改,改后如图3.4。

图3-4

对CMytestDlg:

:

OnInitDialog()函数中写入对串口的初始化语句,串口初始化语句由IDC_MSCOMM1的CMSComm控制变量m_ctrlComm来设置串口控件属性。

代码如下:

BOOLCMytestDlg:

:

OnInitDialog()

{

CDialog:

:

OnInitDialog();

……

//TODO:

Addextrainitializationhere

m_ctrlComm.SetCommPort(4);//选择COM4

m_ctrlComm.SetInputMode

(1);//输入方式为二进制方式

m_ctrlComm.SetInBufferSize(1024);//设置输入缓冲区大小

m_ctrlComm.SetOutBufferSize(512);//设置输出缓冲区大小

//波特率9600,无校验,8个数据位,1个停止位

m_ctrlComm.SetSettings("9600,n,8,1");

if(!

m_ctrlComm.GetPortOpen())

m_ctrlComm.SetPortOpen(TRUE);//打开串口

m_ctrlComm.SetRThreshold

(1);//参数1表示每当串口接收缓冲区中有多于

//或等于1个字符时将引发一个接收数据的OnComm事件

m_ctrlComm.SetInputLen(0);//设置当前接收区数据长度为0

m_ctrlComm.GetInput();//先预读缓冲区以清除残留数据

returnTRUE;//returnTRUEunlessyousetthefocustoacontrol

}

3.4添加串口事件消息处理函数

查看->建立类向导MFCClassWizard->MessageMaps,在ClassName中选择类CmytestDlg,再在ObjectIDs中选择IDC_MSCOMM1,然后在Message中双击消息OnCom,在弹出的对话框中将函数名改为OnComm(好记),单击“OK”,就加入了串口事件的消息处理函数,如图3-5

图3-5

然后编写OnComm()中的代码,主要任务是从串口接收数据并显示在接收编辑框中。

voidCMytestDlg:

:

OnComm()

{

//TODO:

Addyourcontrolnotificationhandlercodehere

VARIANTvariant_inp;

COleSafeArraysafearray_inp;

LONGlen,k;

BYTErxdata[2048];//设置BYTE数组

CStringstrtemp;

if(m_ctrlComm.GetCommEvent()==2)//事件值为2表示接收缓冲区内有字符

{

variant_inp=m_ctrlComm.GetInput();//读缓冲区

safearray_inp=variant_inp;//VARIANT型变量转换为ColeSafeArray型变量

len=safearray_inp.GetOneDimSize();//得到有效数据长度

for(k=0;k

safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组

for(k=0;k

{BYTEbt=*(char*)(rxdata+k);//字符型

strtemp.Format("%c",bt);//将字符送入临时变量strtemp存放

m_strEditRXData+=strtemp;//加入接收编辑框对应字符串

}

}

UpdateData(FALSE);//更新编辑框内容

}

3.5发送数据函数

先为发送按添加一个单击消息,即BN_CLICKED处理函数,打开ClassWizard->MessageMaps,选择类CMytestDlg,选中IDC_BUTTON_MANUALSEND,双击BN_CLICKED添加OnButtonManualsend()函数,如图3-6

图3-6

然后在函数中添加代码如下:

voidCMytestDlg:

:

OnButtonManualsend()

{

//TODO:

Addyourcontrolnotific

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

当前位置:首页 > 党团工作 > 入党转正申请

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

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