串行通信.docx
《串行通信.docx》由会员分享,可在线阅读,更多相关《串行通信.docx(14页珍藏版)》请在冰豆网上搜索。
![串行通信.docx](https://file1.bdocx.com/fileroot1/2023-8/5/55cc9756-0384-4913-93ba-b455e164c42c/55cc9756-0384-4913-93ba-b455e164c42c1.gif)
串行通信
异步串行通信
起始位:
⑴起始位——开始一个字符的传送的标志位。
起始位使数据线处于“0”状态。
位时间:
⑸位时间——一个格式位的时间宽度。
数据位:
数据位——起始位之后传送的数据信号位。
在数据位中,低位在前(左)高位在后(右)。
由于字符编码方式的不同,数据位可以是5、6、7或8位。
奇偶校验位:
用于对字符的传送作正确性检查,因此奇偶效验位是可选择的,共有3种可能,即奇效验、偶效验和无效验,由用户根据需要选定。
停止位:
用以标志一个字符的结束,它对应于“1”状态。
停止位在一帧的最后,它可能是1、1.5或2位,在实际中根据需要确定。
帧(frame)——从起始位开始到停止位结束的全部内容称之为一帧。
帧是一个字符的完整通信格式,因此也就把串行通信的字符格式称之为帧格式。
同步串行通信
同步通信中,在数据开始传送前用同步字符来指示(常约定1~2个),并由时钟来实现发送端和接收端同步,即检测到规定的同步字符后,下面就连续按顺序传送数据,直到通信告一段落。
同步传送时,字符与字符之间没有间隙,也不用起始位和停止位,仅在数据块开始时用同步字符SYNC来指示,其数据格式如图8-3所示。
在同步传送时,要求用时钟来实现发送端与接收端之间的同步。
为了保证接收正确无误,发送方除了传送数据外,还要把时钟信号同时传送。
同步传送的优点是可以提高传送速率(达56kbps或更高),但硬件比较复杂。
串行数据的传输
单工形式的数据传送是单向的,通信双方中一方固定为接收端。
单工形式的串行通信,只需要一条数据线,如图所示
半双工形式的数据传送也是双向的,但任何时刻只能由其中的一方发送数据,另一方接收数据。
因此半双工形式既可以使用一条数据线,也可以使用两条数据线,如上图所示。
全双工形式的数据传送是双向的,且可以同时发送和接收数据,因此全双工形式的串行通信需要两条数据线,如上图所示。
异步串行通信的信号形式
近程通信:
近程通信采用数字信号直接传送形式,即在传送过程中不改变原数据代码的波形和频率。
这种数据传送方式称之为基带传送方式。
计算机内部的数据信号是TTL电平标准,而通信线上的数据信号却是RS232C电平标准。
然而,尽管电平标准不同,但数据信号的波形和频率并没有改变。
近程串行通信只需用传输线把两端的接口电路直接连起来即可实现,既方便又经济。
远程通信
远距离直接传送数字信号,信号会发生畸变,因此要把数字信号变为模拟信号再进行传送。
信号形式的转变通常使用频率调制法,即以不同频率的载波信号代表数字信号的两种不同电平状态。
这种数据传送方式就称为频带传送方式。
波特率
波特率,即数据传送速率,表示每秒钟传送二进制代码的位数,它的单位是位/秒(bps)。
波特率对于CPU与外界的通信是很重要的。
假设数据传送速率是120bps,而每个字符格式包含10个代码位(1个起始位、1个终止位、8个数据位),这时传送的波特率为:
l0×l20bps=1200bps
每一位代码的传送时间td为波特率的倒数。
波特率是衡量传输通道频宽的指标,它和传送数据的速率并不一致。
如上例中,因为除掉起始位和终止位,每一个数据实际只占8位,所以数位的传送速率为:
8×120bps=960bps
接收/发送时钟
在串行通信过程中二进制数字系列以数字信号波形的形式出现,不论接收还是发送,都必须有时钟信号对传送的数据进行定位。
接收/发送时钟就是用来控制通信设备接收/发送字符数据速度的,该时钟信号通常由微机内部时钟电路产生。
在接收数据时,接收器在接收时钟的上升沿对接收数据采样,进行数据位检测;在发送数据时,发送器在发送时钟的下降沿将移位寄存器的数据串行移位输出。
如下图所示。
接收/发送时钟频率与波特率有如下关系:
收/发时钟频率=n×收/发波特率
收/发波特率其中频率系数n=1,16,64。
对于同步传送方式,必须取n=l,即接收/发送时钟的频率等于收/发波特率。
对于异步传送方式,n=1,16,64,即可以选择的接收/发送时钟频率是波特率的1,16或64倍。
因此,可由要求的传送波特率及所选择的倍数n来确定接收/发送时钟的频率。
串行通信的过程
串行通信协议
1.起始位
当通信线上没有数据被传送时处于逻辑“1”状态。
当发送设备要发送一个字符数据时,首先发出一个逻辑“0”信号,这个逻辑低电平就是起始位。
起始位通过通信线传向接收设备,接收设备检测到这个逻辑低电平后,就开始准备接收数据位信号。
起始位所起的作用就是使设备同步,通信双方必须在传送数据位前协调同步。
2.数据位
当接收设备收到起始位后,紧接着就会收到数据位。
数据位的个数可以是5、6、7或8,PC机中经常采用7位或8位数据传送,8051串行口采用8位或9位数据传送。
这些数据位被接收到移位寄存器中,构成传送数据字符。
在字符数据传送过程中,数据位从最低有效位开始发送,依次在接收设备中被转换为并行数据。
3.奇偶校验位
数据位发送完之后,便可以发送奇偶校验位。
奇偶校验用于有限差错检测,通信双方应约定一致的奇偶校验方式。
如果选择偶校验,那么组成数据位和奇偶位的逻辑“1”的个数必须是偶数;如果选择奇校验,那么逻辑“1”的个数必须是奇数。
4.停止位约定
在奇偶位或数据位(当无奇偶校验时)之后发送的是停止位。
停止位是一个字符数据的结束标志,可以是1位、1.5位或2位的低电平。
接收设备收到停止位之后,通信线路上便又恢复逻辑“1”状态,直至下一个字符数据的起始位到来。
5.波特率设置
通信线上传送的所有位信号都保持一致的信号持续时间,每一位的宽度都由数据传送速率确定,而传送速率是以每秒多少个二进制位来度量的,这个速率叫波特率。
如果数据以每秒300个二进制位在通信线上传送,那么这个传送速率为300bps。
6.软件挂钩(握手)信号约定
串行接口电路——通用的异步接收/发送器(UART)
现把UART的主要功能综述如下
1.数据的串行化/反串行化
所谓串行化处理就是把并行数据变换为串行数据。
所谓反串行化就是把串行数变换为并行数据。
在UART中,完成数据串行化的电路属发送器,而实现数据反串行化处理的电路则属接收器。
2.格式信息的插入和滤除
格式信息是指异步通信格式中的启始位、奇偶位和停止位等。
在串行化过程中,按格式要求把格式信息插入,与数据位一起构成串行数据位串,然后进行串行数据传送。
在反串行化过程中,则把格式信息滤除而保留数据位。
3.错误检验
错误检验的目的在于检验数据通信过程是否正确。
在串行通信中可能出现的错误包括奇偶错和帧错等。
串行口寄存器结构
图中SBUF是串行口的缓冲寄存器,它是一个可寻址的专用寄存器,其中包括发送寄存器和接收寄存器,以便能以全双工方式进行通信。
这两个寄存器有同一地址(99H)。
串行发送时,向SBUF写入数据;串行接收时,从SBUF读出数据。
此外,在接收寄存器之前还有移位寄存器,从而构成了串行接收的双缓冲结构,以避免在数据接收过程中出现帧重叠错误。
与接收数据情况不同,发送数据时,由于CPU是主动的,不会发生帧重叠错误,因此发送电路就不需双重缓冲结构。
串行控制寄存器(SCON)
电源控制寄存器PCON
该寄存器中除最高位之外,其它位都没有定义。
最高位(SMOD)是串行口波特率的倍增位,当SMOD=1时,串行口波特率加倍。
系统复位时,SMOD=0。
串行口的工作方式
串行口工作方式0
在方式0下,是把串行口作为同步移位寄存器使用,这时以RXD(P3.0)端作为数据移位的入口和出口,而由TXD(P3.1)端提供移位时钟脉冲.移位数据的发送和接收以8位为一组,低位在前高位在后。
实例
串行移位输出电路连接
使用CD4094的并行输出端接8只发光二极管,利用它的“串入并出”功能,把发光二极管从左向右依次点亮,
并反复循环。
假定发光二极管为共阴极型,则电路连接如上图所示。
当串行口把8位状态码串行移位输出后,TI置1。
如把TI作为状态查询标志,则使用查询方法完成的参考程序如下:
MOV
SCON,
#00H
;串行口方式0工作
CLR
ES
;禁止串行中断
MOV
A,
#80H
;发光管从左边亮起
DELR:
CLR
P1.0
;关闭并行输出
MOV
SBUF,
A
;串行输出
JNB
TI,
$
;状态查询
SETB
P1.0
;开启并行输出
ACALL
DELAY
;状态维持
CLR
TI
;清发送中断标志
RR
A
;发光右移
AJMP
DELR
;继续
串行口工作方式1
方式1的数据发送是由一条写发送缓冲器(SBUF)的指令开始的,随后在串行口由硬件自动加入起始位和停止位,构成一个完整的帧格式,然后在移位脉冲的作用下,由TxD端串行输出。
一个字符帧发送完后,使TXD输出线维持在“1”状态下,并将SCON寄存器的TI置“1”,通知CPU可以接着发送下一个字符。
RxD(P3.0)
TxD(P3.1)
RXD(P3.0)端作为数据移位的入口和出口,
而由TXD(P3.1)端提供移位时钟脉冲
接收数据时,SCON的REN位应处于允许接收状态(REN=1)。
在此前提下,串行口采样RXD端,当采样到从“1”向“0”的状态跳变时,就认定是接收到起始位。
随后在移位脉冲的控制下,把接收到的数据位移入接收缓冲器(SBUF)中。
直到停止位到来之后把停止位送入RB8中,并置位中断标志位RI,通知CPU从SBUF取走接收到的一个字符。
在接收数据时,接收器在接收时钟的上升沿对接收数据采样,进行数据位检测;在发送数据时,发送器在发送时钟的下降沿将移位寄存器的数据串行移位输出。
波特率的设定
方式0的波特率是固定的(fosc/12),但方式1的波特率则是可变的。
若以定时器1作波特率发生器,则方式1的波特率=
当定时器1作波特率发生器使用时,选用定时方式2。
之所以选择工作方式2,是因为方式2具有自动加载功能,可以避免通过程序反复装入初值所引起的定时误差,使波特率更稳定。
工作方式2,3
方式1是10位为一帧的异步串行通信方式。
共包括1个起始位,8个数据位和1个停止位。
方式2是11位为一帧的串行通信方式。
在方式2下,字符还是8个数据位,只不过增加了一个第9数据位(D8),而且其功能由用户确定,是一个可编程位。
在发送数据时,应预先在SCON的TB8位中把第9数据位的内容准备好。
这可使用如下指令完成:
SETBTB8;TB8位置“1”
CLRTB8;TB8位置“0”
在方式2、3时,其值由用户通过软件设置。
在双机通信时,TB8一般作为奇偶效验位使用;在多机通信中,常以TB8位的状态表示主机发送的是地址帧还是数据帧,且一般约定:
TB8=0为数据帧,TB8=1为地址帧。
发送数据(D0~D7)由MOV指令向SBUF写入,而D8位的内容则由硬件电路从TB8中直接送到发送移位寄存器的第9位,并以此来启动串行发送。
一个字符帧发送完毕后,将TI位置“1”,其它过程与方式1相同,方式2的接收过程也与方式1基本相似,所不同的只在第9数据位上。
方式2的波特率是固定的,且有两种。
一种是晶振频率的三十二分之一;另一种是晶振频率的六十四分之一。
方式3同样是11位为一帧的串行通信方式,其通信过程与方式2完全相同,所不同的仅在于波特率。
方式3的波特率可由用户根据需要设定,其设定方法与方式1相同。