摘要:微机串口技术在冶金、自动化、监控领域和工业检测系统中有广泛的应用需求。微机串口与单片机通讯测试系统的实现使得微机与许多智能设备相连,所以微机串口通信有很好的市场前景。本文介绍了串口通信的基本原理和基本方法,并在两台PC机上利用EIARS-232-C串口线,通过C语言编程实现了实异步方式的全双工数据发送和接收。
关键词:串口技术,C语言,EIARS-232-C
引言
随着计算机应用技术和通信技术的不断发展,计算机串口通信在通信软件中有着十分广泛的应用,如电话、传真、视频和监控等。另外,在工业控制领域,经常需要进行计算机与其他设备之间的通信,以实现控制和传输数据等目的。串行通信是在单根导线上将二进制数一位一位地顺序传送。它与并行通信相比,虽然速度低,但对远距离来说,可以节省大量的线路成本。串行通信作为一种灵活、方便、可靠的通信方式被广泛采用。随着光纤技术的出现与发展,更是为串行通信开辟了美好前景。
本文通过使用EIARS-232-C标准的交叉连接串口线将两台PC机连接起来进行通信的研究,全面介绍了微机串行端口的工作原理,并使用C语言利用双机串行端口实现通信。
1串行通信原理
计算机与外围设备之间通过接口和导线进行信息交换,针对接口的通信分为并行通信和串行通信两种方式。
并行通信是把一个字符的各数位用几条线同时进行传输,传输速度快,信息率高。但它比串行通信所用的电缆多,故常用在传输距离较短(几米至几十米)、数据传输率较高的场合。
串行通信是指微机与微机、微机与外设之间通过使用一根数据信号线,按数据位由低到高的顺序在信号线上一位一位地实现传输,每一位数据都占据一个固定的时间长度。由于CPU与接口之间按并行方式进行数据传输,因此,在串行接口中,必须要进行串并转换和并串转换。
1.1串行通信特点
串行通讯的特点是:数据传送按位顺序进行,最少只需一根传输线即可完成。串行通讯根据信息的传送方向,串行通讯可分为单工、半双工和全双工三种。信息只能单向传送为单工;信息能双向传送但不能同时双向传送称为半双工;信息能够同时双向传送则称为全双工。串行通讯根据其工作方式又分为异步通讯和同步通讯两种方式。其中异步通讯方式应用更为广泛。
本文采用异步通信方式,其通信协议规定:
不发送数据时,数据信号线总是呈现高电平,称为空闲状态。当有数据要发送时,数据线变成低电平,并持续一位的时间,用于表示字符的开始,称为起始位;接着按照数据位由低位到高位的顺序发送数据位,当发送字符串时,数据位占7位,最后一位发送检验位;然后再发送1位、1.5位或2位高电平,表示停止位。至此,一个字符发送完毕,如果要立即发送下一个字符,则后一个字符起始位就紧跟在前一个字符的停止位之后,否则停止位之后又进入空闲状态。
在异步通信中,数据通常以字符或者字节为单位组成字符帧传送。字符帧由发送端逐帧发送,通过传输线被接收设备逐帧接收。发送端和接收端可以由各自的时钟来控制数据的发送和接收,这两个时钟源彼此独立,互不同步。接收端检测到传输线上发送过来的低电平逻辑“0”(即字符帧起始位)时,确定发送端已开始发送数据,每当接收端收到字符帧中的停止位时,就知道一帧字符已经发送完毕。
针对串行通信的这一特点,串行通信可以借助现成的电话网进行信息传送,因此,特别适合于远距离传输。对于那些与计算机相距不远的人-机交换设备和串行存储的外部设备如终端、打印机、逻辑分析仪、磁盘等,采用串行方式交换数据也很普遍。在实时控制和管理方面,采用多台微机处理机组成分级分布控制系统中,各CPU之间的通信一般都是串行方式,所以串行接口是微机应用系统常用的接口。
1.2EIARS-232-C的接口信号
微机系统中的串口一般分9芯插件和25芯插件两种,目前一般都是9芯插件。
RS-232的接口信号如表1.1所示:
表1.1RS-232接口信号
主要信号线定义如下:
(1)联络控制信号线:
数据装置准备好DSR#:有效时,表明MODEM处于可以使用的状态。
数据终端准备好DTR#:有效时,表明数据终端可以使用。
这两个信号有时连到电源上,一上电就立即有效。有效时表示设备本身可用,并不说明通信链路可以开始进行通信了,能否开始进行通信要由下面的控制信号决定。
请求发送RTS#:用来表示DTE请求DCE发送数据,即当终端要发送数据时,使该信号有效,向MODEM请求发送。它用来控制MODEM是否要进入发送状态。
允许发送CTS#:用来表示DCE准备好接收DTE发来的数据,是对请求发送信号RTS#的响应信号。当MODEM已准备好接收终端传来的数据,并向前发送时,使该信号有效,通知终端开始沿发送数据线TxD发送数据。
这对RTS/CTS请求应答联络信号是用于半双工MODEM系统中发送方式和接收方式之间的切换。在全双工系统中,因配置双向通道,故不需要RTS#/CTS#联络信号。
载波信号检测CD#:用来表示DCE已接通通信链路,告知DTE准备接收数据。当本地的MODEM收到由通信链路另一端的MODEM送来的载波信号时,使CD#信号有效,通知终端准备接收,并且由MODEM将接收下来的载波信号解调成数字信号后,沿接收数据线RxD送到终端。
(2)数据发送与接收线:
发送数据TxD:通过TxD终端将串行数据发送到MODEM,(DTE→DCE)。
接收数据RxD:通过RxD线终端接收从MODEM发来的串行数据,(DCE→DTE)。
上述控制信号线何时有效,何时无效的顺序表示了接口信号的传送过程。只有当DSR#和DTR#都处于有效状态时,才能在DTE和DCE之间进行传送操作。若DTE要发送数据,则预先将DTR#线置成有效状态,等CTS#线上收到有效状态的回答后,才能在TxD线上发送串行数据。这种顺序的规定对半双工的通信线路特别有用,因为半双工的通信才能确定DCE已由接收方向改为发送方向,这时线路才能开始发送。
2串口通信硬件连接
2.1串口的硬件描述
一台PC机中的每个串口都保留了一系列的端口资源,大多数还有一个指定的中断请求(IRQ)号或者中断请求级别。端口被命名为COM1、COM2等等。在Windows下,可以在控制面板里浏览端口资源:在“系统”下“端口”下面,选择一个COM口,然后点击“属性”。“端口设置”选项卡显示缺省的比特率和其他设置,但是这些设置能够被应用程序很方便的修改。
Windows为每一个端口储存地址和IRQ号,应用程序不必关心这些。一个应用程序可以通过使用内嵌在编程语言或者WindowsAPI中的函数来访问端口。
2.2EIARS-232C串口通信基本接线方法
串口通信距离较近时(<12m),可以用电缆线直接连接标准RS-232端口;若距离较远,需附加调制解调器(MODEM)。
最简单的是3导线连接,无Modem连接交换RxD和TxD线,因此每个TxD连接到对应的RxD,此接法不需要硬件握手。如表2.1所示。如果需要硬件握手则使用另一种接法,如表2.2所示。
表2.1无握手
9针连接线 25针连接线
表2.2循环回送握手
在简单场合,串口传输数据只要有接收数据针脚和发送针脚就能实现:同一个串口的接收脚和发送脚直接用线相连,对9针串口和25针串口,均是2与3直接相连;两个不同串口(不论是同一台微机的两个串口或分别是不同微机的串口),接收数据针脚(或线)与发送数据针脚(或线)相连,彼些交叉,信号地对应相接。
3串口通信设计与实现
串口通信程序通过串口连接线将两台微机连接起来,通过程序对各自的端口进行设置后,按照串口通信协议SPCP进行信息交换,实现利用串口完成数据的收发功能,并能够在发送/接收成功或不成功的情况下都能够及时地反馈一个正确的信息给通信的双方。
双机串口通信程序具体流程如图3所示:
图3串口通信流程
结论
本文介绍了串口通信原理,双机串口通信的连接方式,并用C语言在Windows环境下实现了数据的发送和接收,证明所做设计正确有效。
参考文献
[1]龚建伟,熊光明.VisualC++/TurboC串口通信编程实践.北京:电子工业出版社,2004.
[2]周荷琴,吴秀清.微型微机原理与接口技术.合肥:中国科学技术大学出版社,2008.
[3]李建华,郭明.RS-232和调制解调器高级通信编程.北京:人民邮电出版社,2001.
[4](美)安格斯.串行端口大全.北京:中国电力出版社,2001.
[5]谭浩强.C程序设计(第三版).北京:清华大学出版社,2005.