基于C语言的RS232串行接口通信实现

发布者:虚拟现实迷最新更新时间:2013-10-09 来源: eefocus关键字:C语言  RS232  通信 手机看文章 扫描二维码
随时随地手机看文章

0前言

串行通信在通讯领域被广泛应用,标准的RS232接口已成为计算机、外设、交换机和许多通讯设备的标准接口。虽然近年来随着USB口的日趋流行,RS232接口串口作为一种传统的串口通信口有被取代的趋势。然而由于它具有较高的性价比和传输的可靠性Ⅲ。在传输速率要求不是很高的情况下,串口通信仍然具有其自身的优势。同时RS232标准广泛应用于微型计算机系统和大型系统中,RS232标准还具有连线简单、通讯距离长等优点,本文将着熏介绍串口通信的连接方式以及利用C语言编程实现串口通讯,最后以实际的工程项目应用,验证了该通讯方式的可靠性。

1 RS232串行接口

1.1 RS232接口简介

RS232串行接口属于个人计算机(PC)及电信应用领域中最为成功的串行数据标准。它被定义为一种在低速率串行通信中增加通信距离的单端标准,是目前PC机与通信工业中应用最广泛的一种串行接口嗍。现在的Pc机一般至少有两个串行口COMI和COM2.新一代的汁算机主要以9引脚的D型接头接出所有的RS232通信信号及控制线(有的计算机的COM2仍为25引脚)。

1.2 RS232串口引脚说明(见表1)

表1引脚缩写功能说明

1.3串口连接器的连接方式

串口连接器是两个串行接口的连接器,RS232串口存在9针和25针两种形式,根据连接的针数,串口通信连接方式主要分为:1)无握手连接方式;2)全握手连接方式;3)循环握手回送方式。本文开发的软件运行在全握手连接方式下,该连接方式如表2所示。

表2全握手连接


2 C语言串口通信软件实现

2.1测试中的硬件设备。

2.1.1单机测试方式

如果单机仅仅拥有一个RS232串口,可将RS232连接线的第2引脚(RD)与第3引脚(TD)短路,那么由第3引脚的输出信号就会被发送到第2引脚而送到同一串行端}1的输入缓冲区,即可将数据读入,进入测试过程。

如果单机拥有COMl和COM2口两个RS232串口,那么请选择1 3节表2中的串口连接方式,进入测试过程。

2.1.2近距离两台设备通信测试方式

如果要在两台PC计算机之间,一台嵌入式系统主控机和一台PC计算机之间,或者上位机和下位机之间进行串口通信,那么请选择1.3节表2中的RS232串口方式连接两台设备,进入测试过程。

2.1.3远距离两台通信测试方式

RS232标准规定,若不使用Modem,在码元畸变小于4%的情况下,Dte和DCE通信两端之间最大传输距离为15 m.若距离较远,须附加调制解调器(Modem)。其连接方式如图1所示。


图1 远距离串口通信连接方式
 

[page]

2.2 C语言的串口通信软件实现

2.2.1串口通信软件流程图


图2数据通信的流程图

2.2.2 C语言函数具体实现串口通信软件过程

由于I/O串行通信口的速度远远低于CPU的速度,在查询工作方式时,CPU长时间处于等待状态,其效率非常低,不利于CPU的资源利用。解决这一矛盾的有效办法是采取中断的通信方式,即当通信口自身准备就绪时,主动提出中断申请,一旦CPU响应此申请,便暂停执行的工作,转向中断服务子程序,与外设进行数据的交换,数据交换完成后返回到主程序中的断点继续执行未完成的任务,这样就避免了CPU资源的浪费㈨。

为此必须对异步通信适配器以及中断控制器进行控制。作为系统的外设,异步通信适配器和中断控制器都有其对应的I/O口地址,所以本文采用C语言函数库中的寻址函数outportb()和函数inportb()对上述芯片进行直接读写操作。其控制包括对中断控制器地址的编程,允许IRQ3,IRQ4中断,同时置MODEM控制寄存器地址为有效,这样即可实现中断方式的通信。根据图2的串口通信流程图,其具体实现串口通信的过程如下:

1)初始化串口函数。

参数说明:

ComPortAddr 串口端口地址(coMl口是03F8H COM2口是02F8H)

IntVectNum 中断处理号(一般选择0X0b)

Baud 波特率

Data 数据位

STop 停止位

Parity 奇偶校验位
 

 

void Init-COM(int ComPortAddr,unsigned char IntVectNum,im Baud,unsigned char Data,unsigned char Stop,unsigned char Parity)

{

unsigned char High,Low;

int f.

comportaddr=ComPortAddr;

intvectnum=IntVectNum;

CharslnBuf=0;Circln=0;CircOut=0;

/*set baud rate设置波特率*/

f=(Baud/100):

f=1152/t;High=f/256;

Low=f-High*256;

outportb(ComPortAddr+3,0x80);

outportb(ComPortAddr,LOW);

outportb(ComPortAddr+l,High);

/*set data bits,stop bits,and parity设置数据位。停止位。校验*/

Data=(Data-5)|((Stop-1)*4);

if(Parity=2)Data=Data|0x18;

else if(Parity==1)Data=Data|0x8;

outportb(ComPortAddr+3,Data);

/*set MCR(DTR,RTS=0,OUTl,OUT2=1)设置MODEM控制位*/

outportb(ComPortAddr+4,0xob);

/*set input data ready interrupt mode设置输入数据中断模式*/

outportb(ComPortAddr+1,Ox01);

/*set OC interrupt vector设置中断源*/

disable ();

OldAsyncInt=getvect(IntVectNum);

setvect(ImVectNum,AsyncInt);

enable ();

/*open interrupt打开中断*/

maskb=inp(Port8259+1);

if(IntVectNum一0x0c)outport(Port8259+1,maskb&Oxef);/*INT4*/

else outport(Port8259+1,maskb&0xf7);/*INT3*/

}

关键字:C语言  RS232  通信 引用地址:基于C语言的RS232串行接口通信实现

上一篇:基于MSP430单片机的CCD相机调光电控系统设计
下一篇:GSM&GPRS在无线抄表系统中的应用与比较

推荐阅读最新更新时间:2024-03-16 13:28

S3C44B0X在嵌入式Socket通信系统中的应用
嵌入式系统是指将应用程序?操作系统与计算机硬件集成在一起的系统?它以应用为中心?以计算机技术为基础,而且软硬件可以裁剪,因而是能满足应用系统对功能?可靠性?成本?体积和功耗的严格要求的专用计算机系统。   本文给出一种适合于中/低端应用的通信平台设计方案,它可支持Ethernet网络之间的数据传输,并且具有RS232?RS485? USB等接口?   文中围绕嵌入式uClinux环境设计了基于嵌入式通信微处理器S3C44B0X的硬件通信平台,从而实现了嵌入式Socket通信?   1 嵌入式网络通信系统结构   作为一类特殊的计算机系统, 嵌入式系统通常由嵌入式处理器?嵌入式外围设备?嵌入式操作系统和嵌入式应用软件等几
[单片机]
S3C44B0X在嵌入式Socket<font color='red'>通信</font>系统中的应用
不同的电平信号的MCU怎么通信
今天我们来讲讲,下面这个“电平转换”电路,理解后令人心情愉快。电路设计其实也可以很有趣。先说一说这个电路的用途:当两个MCU在不同的工作电压下工作(如MCU1 工作电压5V;MCU2 工作电压3.3V),那么MCU1 与MCU2之间怎样进行串口通信呢?很明显是不能将对应的TX、RX引脚直接相连的,否测可能造成较低工作电压的MCU烧毁!下面的“电平双向转换电路”就可以实现不同VDD(芯片工作电压)的MCU之间进行串口通信。 该电路的核心在于电路中的MOS场效应管(2N7002)。他和三极管的功能很相似,可做开关使用,即可控制电路的通和断。不过比起三极管,MOS管有挺多优势,后面将会详细讲起。下图是MOS管实物3D图和电路图
[单片机]
浅谈C语言的一个算法
周六与周日花费了两天的时间得出一个转复杂较为简单的算法,其实都是学校里学过的,但由于没有应用于实际当中。 下面具体的来说说这个算法吧。 举个例子,比如有这么一个一维数组,共有96个元素,我想分成32列,3行,又想分成16列6行,而且想要分别从行与列的头开始取表元素,例tab ={0x08,0xa0,.......,0xff};(可能你会想到分成多维数组,然后采用两个for循环,如for(int i=0;i 3;i++)     {     for(int j=0;j 32;j++)       tab ;       } 但还是不够灵活) 怎么样灵活的改变呢?总不可能列两个数据表吧?我苦思瞑想了两天,找了老书。最终用了
[单片机]
浅谈<font color='red'>C语言</font>的一个算法
车载导航服务将加速汽车与通信产业充分融合
  智能交通系统是目前世界交通运输领域的前沿研究课题,发达国家提出并执行了一系列研究计划,其核心是为了应对日益繁重的交通需求和环境保护压力,采用信息技术、通信技术、计算机技术、控制技术等对传统交通运输系统进行深入改造,以提高系统资源的使用效率、系统安全性,减少资源的消耗和环境污染。中国各城市智能交通的发展步伐不断加快,特别是在北京、上海等特大城市。车载信息系统的部分功能及相关服务,可以成为智能交通的重要补充,而与智能交通接轨也将加速中国车载信息服务市场的发展。根据国外发达国家的经验,在一个成熟的汽车市场,汽车销售利润约占整个汽车业利润的20%,零部件供应利润约占20%,而60%的利润是汽车服务领域中产生的。中国汽车市场整车销售领
[汽车电子]
单片机C语言的知识汇总
一、概述 1、结合8051介绍单片机C语言的优越性: ·无须懂得 单片机 的具体硬件,也能够编出符合硬件实际的专业水平的程序;    ·不懂得单片机的指令集,也能够编写完美的单片机程序;    ·不同函数的数据实行覆盖,有效利用片上有限的RAM空间;    ·提供auto、 static 、const等存储类型和专门针对8051单片机的data、idata、pdata、xdata、code等存储类型,自动为变量合理地分配地址;    ·C语言提供复杂的数据类型( 数组 、结构、联合、枚举、指针等),极大地增强了程序处理能力和灵活性;    ·提供small、compact、large等编译模式,以适应片上存储器的大小;
[单片机]
安捷伦新型信号源分析仪实现10倍的测量吞吐率增长,能够轻松完成更精确的分析
2007年6月7日,北京—— 安捷伦科技公司(NYSE:A)日前推出全球速度最快的增强型信号源分析仪Agilent E5052A。与以前的产品相比,它拥有提高10倍的测量吞吐率、更精确的分析功能,以及最佳的时钟抖动测量性能、最低的抖动本底噪声和100 MHz的频偏。这些特性再加上世界上最快的相位噪声性能,使Agilent E5052B成为航空/国防、元器件、无线和有线通信等行业用户进行多Gbps数据通信系统、信号源模块、信号发生器和系统设计与制造的理想选择。 新型Agilent E5052B 10 MHz至7 GHz信号源分析仪具备众多增强特性――例如更宽的频偏范围、更低的本地相位噪声以及更长的存储器――旨在增加其通用性。例如,
[新品]
单片机:IIC总线通信
一、IIC总线通信 1、简介: IIC 即Inter-Integrated Circuit(集成电路总线),I2C总线是PHLIPS公司推出的一种串行总线, I2C总线只有两根双向信号线。一根是数据线SDA,另一根是时钟线SCL。 每个接到I2C总线上的器件都有唯一的地址。主机与其它器件间的数据传送可以是由主机发送数据到其它器件,这时主机即为发送器。由总线上接收数据的器件则为接收器。 2、常用的串行扩展总线有: (1)、I2C (Inter IC BUS)总线 (2)、单总线(1-WIRE BUS) (3)、SPI(Serial Peripheral Interface)总线等。 3、IIC总线电路接法 I2C总线通过上
[单片机]
嵌入式WiFi技术研究与通信设计
嵌入式WiFi技术是当前无线网络应用的一个热点。本文介绍IEEE802.11b的基本技术,给出一种在 嵌入式环境中的WiFi通信设计方案;通过一个移动监护系统的具体实现,说明方案的有效性。 关键词 IEEE802.11b嵌入式WiFi TCP/IP 移动监护 目前,IEEE802.11无线局域网标准在语音通信、无线办公等领域广泛应用,但主要还是局限在PC机、笔记本电脑等通用平台的无线通信。无线局域网在信息家电、工业控制、移动手持设备等嵌入式环境中的应用需求日益增多。如何在嵌入式系统中整合WLAN宽带通信,成为嵌入式系统应用中的一个热点。 1 IEEE802.11b无线局域网 IEEE802.11系列包括IEEE8
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved