波特率、发送/接收时钟、波特率因子、传输距离

源:http://mayer.spaces.eepw.com.cn/articles/article/item/59707

 

 

一.波特率 
  并行通信中,传输速率是以每秒传送多少字节(B / S)来表示。而串行通信中,传输速率在基波传输的情况下(不加调制,以其固有的频率传送)是用每秒钟传送的位数(bit/s)即波特率来表示,1波特=1位/秒。 
  最常用的标准波特率是110、300、1000、1200、2400、4800、9600和19200波特。CRT终端能处理9600波特的传输,打印机终端速度较慢,点阵打印机一般也只能以2400波特的速率来接收信号。
  通信线上所传输的字符数据是按位传送的,1个字符由若干位组成,因此每秒钟所传输的字符数--字符速率波特率是两种概念在串行通信中,所说的传输速率是指波特率,而不是指字符速率,两者的关系是:假如在某异步串行通信中传送1个字符,包括1个起始位,8个数据位,1个偶校验位,2个停止位,若传输速率是1200波特,那么,每秒所能传送的字符数是1200/(1+8+1+2)=100个。 

二.发送/接收时钟 
  在串行传输过程中,二进制数据系列是以数字信号波形的形式出现的,如何对这些连续的波形定时发送出去或接收进来的问题就引出了发送/接收时钟的应用。
  在发送数据时,发送器在发送时钟(下降沿)作用下,将移位寄存器的数据按位串行移位输出;在接收数据时,接收器在接收时钟(上升沿)作用下对接收数据位采样,并按位串行移入移位寄存器。可见,发送/收接时钟是对数字波形的每一位传送都要进行作用的,因此,发送/接收时钟的快慢直接影响通信设备发送/接收字符数据的速度。 
  发送/接收时钟频率与波特率的关系:

发/收时钟频率 =n*(发/收波特率 ) 发/收波特率=发/收时钟/n (其中n=1,16,64) 
  因此,在实际应用中,可根据所要求的传输波特率及所选择的倍数n来确定发送/接收时钟的频率。 
  例如:要求传输速率为1200波特,则 
  当选择n=1时,发/收时钟频率=1.2kHz 
  当选择n=16时,发/收时钟频率=19.2kHz 
  当选择n=64时,发/收时钟频率=76.8kHz 

三.传输距离与传输速率的关系 
  串行接口或终端直接传送串行信息位流的最大距离(当然,波形要不发生畸变)与传输速率及传输线的电气特性有关,传输距离是随传输速率的增加而减小。实际应用中,对远距离传送,一般都需加入通信设备调制解调器MODEM。
波特率是:码元传输的速率单位。也称为码元速率调制速率波形速率符号速率。也就是单位时间内通过信道传输的码元个数,若信号码元的宽度为T秒,则码元速率定义为:1/T。

信息的传输速率”比特/秒“与“波特“有一定的关系。若1个码元只携带1比特的信息量,那么”比特/秒“与“波特“在数值上是相等的。但1个码元只携带n比特的信息量,那么M波码元的传输速率对应的信息的传输速率为Mn比特/秒。

四、波特率因子 
    在波特率指定后,输入移位寄存器 / 输出移位寄存器在接收时钟 / 发送时钟控制下,按指定的波特率速度进行移位。一般几个时钟脉冲移位一次要求:接收时钟 / 发送时钟是波特率的 16 、 32 或 64 倍波特率因子就是发送/接收 1 个数据( 1 个数据位)所需要的时钟脉冲个数,其单位是个/位。如波特率因子为 16 ,则 16 个时钟脉冲移位 1 次。 例:波特率 =9600bps ,波特率因子 =32 ,则 接收时钟和发送时钟频率 =9600 × 32=297200Hz 。 

数据传输速率指通信线上传输信息的速度,有位速率和波特率两种表示方法位速率也称为信号速率(S),是指单位时间内所传送的二进制位代码的有效位数,以每秒多少比特计算,即b/s波特率是指调制速率(B)是脉冲信号经过调制后的传输速率,以波特(Baud)为单位,通常用于表示调制器之间传输信号的速率

信号速率S与调制速率B的关系:S=B*log2N 
其中N为一个脉冲信号所表示的有效状态。在二进制中脉冲(二电平)只有两种状态0或1,即 n="2",也就是说,信号速率(S)与调制速率(B)是一致的如果使用多电平脉冲信号传输信息,信号速率(S)与调制速率(B)就不一致了。例如使用四电平(四进制)进行信号调制时,不同电平的脉冲可以代表00、01、10、11四种状态,每个状态为两个二进制位代码,因此在同样波特率的情况下,它的数据传输位速率将为使用二电平(二进制)信号调制的两倍。同理,在同样波特率的情况下,八电平信号调制的数据传输位速率将是二电平信号调制的三倍.

 

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

如果将调制解调器的波特率设置为高于其他的调制解调器的波特率,则较快的调制解调器通常要改变其波特率以匹配速度较慢的调制解调器。


波特率(BaudRate)

  模拟线路信号的速率,也称调制速率,以波形每秒的振荡数来衡量如果数据不压缩,波特率等于每秒钟传输的数据位数,如果数据进行了压缩,那么每秒钟传输的数据位数通常大于调制速率,使得交换使用波特和比特/秒偶尔会产生错误

  波特率指数据信号对载波的调制速率,它用单位时间内载波调制状态改变的次数来表示,其单位是波特(Baud)波特率与比特率的关系是:比特率=波特率*单个调制状态对应的二进制位数。

  在信息传输通道中,携带数据信息的信号单元叫码每秒钟通过信道传输的码元数称为码元传输速率,简称波特率波特率是传输通道频宽的指标

  每秒钟通过信道传输的信息量称为位传输速率,简称比特率。比特率表示有效数据的传输速率

 

  如何区分两者? 显然,两相调制(单个调制状态对应1个二进制位)的比特率等于波特率四相调制(单个调制状态对应2个二进制位)的比特率为波特率的两倍八相调制(单个调制状态对应3个二进制位)的比特率为波特率的三倍;依次类推。

 

 

### 不同波特率下通过串口进行发送接收数据的实现方法 在串口通信中,波特率决定了每秒钟传输的二进制位数。为了确保发送端和接收端之间的数据能够正确同步,双方必须使用相同的波特率设置[^1]。以下是如何在不同波特率下通过串口进行数据发送接收的实现方法。 #### 1. 波特率配置 在51单片机或其他嵌入系统中,波特率通常由定时器或寄存器来控制。例如,在51单片机中,可以通过设置定时器初值来调整波特率。假设晶振频率为11.0592MHz,计算公式如下: \[ \text{TH1} = 256 - \frac{\text{晶振频率}}{12 \times \text{波特率}} \] 对于常见的波特率如9600bps,计算得到的定时器初值为`TH1=FDH`[^1]。 ```c // 配置波特率为9600 TMOD = 0x20; // 定时器1工作在模式2(8位自动重装) TH1 = 0xFD; // 设置波特率初值 TL1 = TH1; TR1 = 1; // 启动定时器1 ``` #### 2. 数据发送 数据发送通常通过串行口的发送缓冲区完成。当发送缓冲区为空时,触发中断并将数据发送出去。以下是51单片机的代码示例: ```c void SendByte(unsigned char dat) { SBUF = dat; // 将数据写入发送缓冲区 while (!TI); // 等待发送完成标志位 TI = 0; // 清除发送完成标志位 } ``` #### 3. 数据接收 数据接收通过串行口的接收缓冲区完成。当接收到一个字节的数据时,触发中断并将数据读取到变量中。以下是51单片机的代码示例: ```c unsigned char ReceiveByte() { while (!RI); // 等待接收完成标志位 RI = 0; // 清除接收完成标志位 return SBUF; // 返回接收到的数据 } ``` #### 4. 流控与同步 虽然现代通信中流控的重要性有所降低,但在某些场景下仍需考虑速率协商问题。例如,发送端和接收端可能需要使用不同的时钟频率来确定每一位的时间长度。这些时钟的频率可以是波特率的16倍、32倍或64倍等,这个倍数就是所谓的波特率因子[^2]。 #### 5. 高速波特率下的实现 对于高速波特率(如921600bps),需要特别注意硬件支持和软件配置。以Qt为例,可以通过扩展枚举类型`BaudRateType`来支持自定义波特率,并在底层调用中添加对应的`case`语句[^3]。 ```cpp enum BaudRateType { BAUD921600 }; void Win_QextSerialPort::setBaudRate(BaudRateType baudRate) { switch (baudRate) { case BAUD921600: // 设置高速波特率 break; default: break; } } ``` --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值