【转】RS232串口通信详解

串口是计算机上一种非常通用的设备通信协议。

---------------------------------

串口的引脚定义:

9芯 信号方向来自 缩写 描述
1 调制解调器 CD 载波检测
2 调制解调器 RXD 接收数据
3 PC TXD 发送数据
4 PC DTR 数据终端准备好
5   GND 信号地
6 调制解调器 DSR 通讯设备准备好
7 PC RTS 请求发送
8 调制解调器 CTS 允许发送
9 调制解调器 RI 响铃指示器

两个串口连接时,接收数据针脚与发送数据针脚相连,彼此交叉,信号地对应相接即可。

---------------------------------

串口的电气特性:

1)RS-232串口通信最远距离是50英尺

2)RS232可做到双向传输,全双工通讯,最高传输速率20kbps

3)RS-232C上传送的数字量采用负逻辑,且与地对称

逻辑1:-3 ~-15V

逻辑0:+3~+15V

所以与单片机连接时常常需要加入电平转换芯片:

---------------------------------

串口通信参数:

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

b)数据位:标准的值是5、7和8位,如何设置取决于你想传送的信息。比如,标准的ASCII码是0~127(7位);扩展的ASCII码是0~255(8位)。

c)停止位:用于表示单个包的最后一位,典型的值为1,1.5和2位。由于数是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。

d)奇偶校验位:在串口通信中一种简单的检错方式。对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。例如,如果数据是011,那么对于偶校验,校验位为0,保证逻辑高的位数是偶数个。如果是奇校验,校验位位1,这样就有3个逻辑高位。

---------------------------------

串口通信的传输格式:

串行通信中,线路空闲时,线路的TTL电平总是高,经反向RS232的电平总是低。一个数据的开始RS232线路为高电平,结束时Rs232为低电平。数据总是从低位向高位一位一位的传输。示波器读数时,左边是数据的高位。

例如,对于16进制数据55aaH,当采用8位数据位、1位停止位传输时,它在信号线上的波形如图1(TTL电平)和图2(RS-232电平)所示。

55H=01010101B,取反后10101010B,加入一个起始位1,一个停止位0,55H的数据格式为1010101010B;

aaH=10101010B,取反后01010101B,加入一个起始位1,一个停止位0,55H的数据格式为1101010100B;

---------------------------------

串口通信的接收过程:

(异步通信:接收器和发送器有各自的时钟;同步通信:发送器和接收器由同一个时钟源控制。RS232是异步通信)

(1)开始通信时,信号线为空闲(逻辑1),当检测到由1到0的跳变时,开始对“接收时钟”计数。 

(2)当计到8个时钟时,对输入信号进行检测,若仍为低电平,则确认这是“起始位”,而不是干扰信号。

(3)接收端检测到起始位后,隔16个接收时钟,对输入信号检测一次,把对应的值作为D0位数据。若为逻辑1, 作为数据位1;若为逻辑0,作为数据位0。

(4)再隔16个接收时钟,对输入信号检测一次,把对应的值作为D1位数据。….,直到全部数据位都输入。

(5)检测校验位P(如果有的话)。

(6)接收到规定的数据位个数和校验位后,通信接口电路希望收到停止位S(逻辑1),若此时未收到逻辑1,说明出现了错误,在状态寄存器中置“帧错误”标志。若没有错误,对全部数据位进行奇偶校验,无校验错时,把数据位从移位寄存器中送数据输入寄存器。若校验错,在状态寄存器中置奇偶错标志。

(7)本幀信息全部接收完,把线路上出现的高电平作为空闲位。

(8)当信号再次变为低时,开始进入下一幀的检测。

---------------------------------

单片机常用11.0592M的的晶振,这个奇怪数字是有来历的:

波特率为9600BPS每位位宽t1=1/9600s

晶振周期t2=1/11.0592/1000000S

单片机机器周期t3=12*t2

t1/t3=96

即对于9600BPS的串口,单片机对其以96倍的速率进行采样。

如果单片机晶振用的不正确,会对串口接受产生误码。

---------------------------------

RS485和RS422

RS485总线,在要求通信距离为几十米到上千米时,广泛采用RS-485 串行总线标准。RS485采用平衡发送和差分接收,因此具有抑制共模干扰的能力。加上总线收发器具有高灵敏度,能检测低至200mV的电压,故传输信号能在千米以外得到恢复。RS485采用半双工工作方式,任何时候只能有一点处于发送状态,因此,发送电路须由使能信号加以控制。RS485用于多点互连时非常方便,可以省掉许多信号线。应用RS485可以联网构成分布式系统,其允许最多并联32台驱动器和32台接收器。

RS422总线,RS485和RS422电路原理基本相同,都是以差动方式发送和接受,不需要数字地线。差动工作是同速率条件下传输距离远的根本原因,这正是二者与RS232的根本区别,因为RS232是单端输入输出,双工工作时至少需要数字地线发送线和接受线三条线(异步传输),还可以加其它控制线完成同步等功能。RS422通过两对双绞线可以全双工工作收发互不影响,而RS485只能半双工工作,发收不能同时进行,但它只需要一对双绞线。RS422和RS485在19kpbs下能传输1200米。用新型收发器线路上可连接台设备。

时间: 2024-08-05 05:07:39

【转】RS232串口通信详解的相关文章

Java串口通信详解(转)

Java串口通信详解(转) 作者:denimcc 日期:2007-05-11 序言    说到开源,恐怕很少有人不挑大指称赞.学生通过开源代码学到了知识,程序员通过开源类库获得了别人的成功经验及能够按时完成手头的工程,商家通过开源软件赚到了钱……,总之是皆大欢喜.然而开源软件或类库的首要缺点就是大多缺乏详细的说明文档和使用的例子,或者就是软件代码随便你用,就是文档,例子和后期服务收钱.                                                        

Linux串口编程详解

串口本身,标准和硬件 ? 串口是计算机上的串行通讯的物理接口.计算机历史上,串口曾经被广泛用于连接计算机和终端设备和各种外部设备.虽然以太网接口和USB接口也是以一个串行流进行数据传送的,但是串口连接通常特指那些与RS-232标准兼容的硬件或者调制解调器的接口.虽然现在在很多个人计算机上,原来用以连接外部设备的串口已经广泛的被USB和Firewire替代:而原来用以连接网络的串口则被以太网替代,还有用以连接终端的串口设备则已经被MDA或者VGA取而代之.但是,一方面因为串口本身造价便宜技术成熟,

Qt5串口编程详解【新版】

Qt5的串口比Qt4的好用得多,Qt4的貌似没有集成官方库. 之前我也写过Qt5的串口,不过有一些缺陷,这次试图改进.转载请保留链接:http://blog.csdn.net/qq363692146/article/details/26049355 本文发表于2014.5.17. 如果在linux下,记得使用root权限,可以用root权限打开可执行文件,或者用root权限打开Qt Creator.(原因是串口常常需要特权,有些串口有特权也只能度而不能写,这个可能是Qt本身的问题)[至于安卓端,

Android中实现java与PHP服务器(基于新浪云免费云平台)http通信详解

Android中实现java与PHP服务器(基于新浪云免费云平台)http通信详解 (本文转自: http://blog.csdn.net/yinhaide/article/details/44756989) 前言:现在很多APP都需要云的功能,也就是通过网络与服务器交换数据.有的采用tcp/ip协议,但是你必须拥有一个固定ip的服务器,可以购买阿里云服务器之类的,就是贵了点.如果只是个人的小应用的的话可以采用新浪云平台这种免费的服务器,采用的协议是http协议,具体实现方式如下: 方式一.在线

RS232串口通信

RS232串口经常使用在PC机与FPGA通信中,用于两者之间的数据传输,因为UART协议简单.易实现,故经常使用. DB9接口只需要使用3根线,RXD(2).TXD(3)和GND(5),如下图所示.而用FPGA实现控制器时只需要利用RXD和TXD两根线即可完成串口通信. UART的异步通信协议如下所示: 1. 首先接受双方提前定义好通信的速度和格式等信息: 2. 如果是空闲状态,发送器一直将数据线拉高: 3. 开始通信时,发送器将数据线拉低,从而接收器能知道数据字节即将过来: 4. 数据位通常是

串口参数详解:波特率,数据位,停止位,奇偶校验位

简介 串口是一种非常通用的设备通信的协议(不要与通用串行总线Universal Serial Bus(USB)混淆).大多数计算机包含两个基于RS232的串口.串口同时也是仪器仪表设备通用的通信协议:很多GPIB兼容的设备也带有RS-232口.同时,串口通信协议也可以用于获取远程采集设备的数据. 串口通信的概念非常简单,串口按位(bit)发送和接收字节.尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据.它很简单并且能够实现远距离通信.比如IEEE48

java网络编程Socket通信详解

Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket.像大家熟悉的QQ.MSN都使用了Socket相关的技术.下面就让我们一起揭开Socket的神秘面纱. Socket编程 一.网络基础知识(参考计算机网络)            关于计算机网络部分可以参考相关博客:           <TCP/IP协议栈及OSI参考模型详解> http://wangdy.blog.51cto.com/3845563/

「51单片机」RS232串口通信代码分析

想来想去不知道要怎么样把232串口通信说清楚,想想还是直接把代码分析一遍吧... 重点是“常用波特率与定时器1的参数关系”这张表格!波特率的设置很重要! 一.串口初始化 void usart_init() { SCON = 0x50; //REN=1允许串行接受状态,串口工作模式1 TMOD = 0x20; //定时器工作方式2 PCON = 0x00; TH1 = 0xFD; //波特率9600.数据位8.停止位1.效验位无 (11.0592M) TL1 = 0xFD; ES = 1; //开

Service通信详解

1.使用Intent进行异步通讯 在Service任务一旦完成后,就发送广播.开发者只需要实现一个BroadcastReceiver来监听响应既可. Activity.startService启动intentService,intentService完成任务后sendBroadcast()发送广播,BroadcastReceiver.startActivity()通知Activity操作结果. 在任务结束后调用sendBroadcast(new Intent(Action)); 然后在广播中通知