一、串行通信基础知识
异步通信和同步通信计算机的数据传输共有两种方式:并行数据传输和串行数据传输。并行数据传输的特点:是各数据位同时传输,传输速度快,效率高。但并行数据传输时有多少数据位就需要有多少根数据线,因此,传送成本高。串行数据传输的特点:是数据传输按位顺序进行,只需一根传输线即可完成,成本低但速度慢,适用于远距离数据传输。常用的Internet网采用的就是串行数据传输。
串行通信又分为异步传输(Asynchronous Transmission)和同步传输(Synchronous Transmission)两种方式,一般称为异步串行通信和同步串行通信。
异步串行通信异步串行通信是以字符为单位的间歇传输形式。传送时按字符进行包装,为此,在数据位之外要增添起始位、奇偶校验位和停止位,构成一个通信帧。下图为异步通信的帧格式。
几点说明:
① 在串行通信中,信息的两种状态分别以mark和space标志。其中mark译为标号,对应逻辑状态1,在发送器空闲时,数据线应保持在mark状态;space译为空格,对应逻辑状态0。
② 起始位。发送器通过发送起始位而开始一个字符的传输。起始位使数据线处于space状态。
③ 数据位。起始位之后传送数据位。在数据位中,低位在前(左),高位在后(右)。由于字符编码方式的不同,数据位可以是5、6、7或8位等多种形式。
④ 奇偶校验位。用于对字符传送作正确性检查,因此,奇偶校验位是可选择的,共有3种可能,即奇校验、偶校验和无校验,由用户根据需要选定。
所谓偶校验,即数据位和奇偶校验位中逻辑1的个数加起来必须是偶数(全0也视为偶数个1)。
所谓奇校验,即数据位和奇偶校验位中逻辑1的个数加起来必须是奇数。
⑤ 停止位。停止位在最后,用于标志一个字符传输的结束,对应于mark状态。停止位可能是1、1.5或2位,在实际应用中根据需要确定。
⑥ 位时间。一个格式位的时间宽度。
⑦ 帧(Frame)。从起始位开始到停止位结束的全部内容称为一帧。
异步串行通信是一帧接一帧进行的,传输可以是连续的,也可以是断续(间歇)的。
(2)同步串行通信
为提高传送速度,把数据传输按相等的时间间隔分块进行,在数据块的开始加一些特殊字符,作为发送和接收双方的同步标志。由于数据块的位数较多,为防止错位,在发送数据时一般同时给出时钟信号,以保持接收与发送的同步,这就是同步串行通信。同步串行通信的数据传送格式如下图所示:
同步串行通信的数据格式有如下特点和要求:
① 只在数据块传输的开始使用同步字符串,作为发送和接收双方同步的标志,而在结束时不需要同步标志。
② 数据字符之间不允许有间隔,当线路空闲或没有数据可发时,可发送同步字符串。
③ 数据块内各字符的格式必须相同。
同步串行通信比异步串行通信的传送速度快,但同步串行通信要求收发双方在整个数据传输过程中始终保持同步,这将对硬件提出更高的要求,实现起来难度大一些;而异步串行通信只要求在每帧的短时间内保持同步即可,实现起来容易得多。所以同步串行通信适用于数据量大、对速度要求比较高的串行通信场合。
2 、串行通信线路形式
(1)单工形式
单工(Simplex)形式的数据传输是单向的。通信双方中一方固定为发送端,另一方则固定为接收端。单工形式的串行通信只需要一条数据线,如下图所示。
例如,计算机与打印机之间的串行通信。
全双工形式全双工(Fullduplex)形式的数据传输是双向的,可以同时发送和接收数据,因此,全双工形式的串行通信需要两条数据线。
(3)半双工形式
半双工(Halfduplex)形式的数据传输也是双向的。但任何时刻只能由其中的一方发送数据,另一方接收数据。因此半双工形式既可以使用一条数据线,也可以使用两条数据线。
二、80C51串行口
为了实现串行通信,需要有硬件电路以解决串行数据传输中的一系列协调问题,这些硬件就是串行接口电路或简称串行口。
1、80C51串行口硬件结构
通常把实现异步通信的串行口称为通用异步接收器/发送器UART(Universal Asynchronous Receiver/Transmitter)。
80C51的串行口,虽然是既能实现同步通信,又能实现异步通信的全双工串行口,但在单片机的串行数据通信中,最常用的是异步方式,因此,常把它写为UART。它的寄存器结构如下图所示。
2 、串行口控制机制
80C51串行口通过控制寄存器、中断功能和波特率设置实现串行通信控制。
串行口控制寄存器(SCON)-98H
SM0、SM1——串行口工作方式选择位。其状态组合所对应的工作方式为:
SM0SM1=00,工作方式0;SM0SM1=01,工作方式1;
SM0SM1=10,工作方式2;SM0SM1=11,工作方式3。
SM2——多机通信控制位。TB8——发送数据位8。RB8——接收数据位8。(这3位用于多机通信)
REN——允许接收位。REN=0;禁止接收;REN=1,允许接收。
TI——串行发送中断请求标志。在数据发送过程中,当最后一个数据位被发送完成后,TI由硬件置位。
RI——串行接收中断请求标志。在数据接收过程中,当采样到最后一个数据位有效时,RI由硬件置位。
(2)串行中断
80C51有两个串行中断,即串行发送中断和串行接收中断。但这两个串行中断共享一个中断向量0023H。每当串行口发送或接收一个数据字节时,都产生中断请求。
串行中断请求在芯片内部发生,因此不需要引脚。两个中断共享一个中断向量,就需要在中断服务程序中对中断源进行判断,以便进行不同的中断处理。
对于串行中断控制共涉及3个寄存器,其中一个就是串行口控制寄存器SCON,用于存放串行中断请求标志。另外两个中断允许控制寄存器IE和中断优先级控制寄存器IP。
三、80C51串行口工作方式
80C51单片机的串行口共有4种工作方式,见下表。
1、 串行工作方式0
串行工作方式0是把串行口作为同步移位寄存器使用,实现串行数据的输入/输出。移位数据的传输以8位为一组,低位在前、高位在后。
利用串行工作方式0,加上“并入串出”或“串入并出”芯片的配合,80C51的串行口可实现数据的并行输入/输出。
方式0实现数据并行输入/输出“并入串出”芯片(74165)用于把并行输入数据通过移位形成位串,传送给串行口;而“串入并出”芯片(74164)则接收串行口的串行数据,通过移位形成8位并行数据输出。
工作方式0时,移位操作(串入或串出)的波特率是固定的,为单片机晶振频率的1/12,若晶振频率用fosc表示,则波特率=fosc/12。按此波特率的一个机器周期进行一次移位,若fosc=6 MHz,则波特率为500kb/s,即2 μs移位一次。
利用串行口方式0实现数据并行输入/输出
2、串行工作方式1
串行工作方式1是10位为一帧的异步串行通信方式,这种工作方式是为双机通信而准备的。帧格式包括1个起始位,8个数据位和1个停止位。
方式1的数据发送:是由一条写发送寄存器(SBUF)的指令开始,随后在串行口由硬件自动加入起始位和停止位,构成一个完整的帧格式,然后在移位脉冲的作用下,由TXD端串行输出。一个字符帧发送完后,使TXD输出线维持在1状态下,并将SCON寄存器的TI位置1,通知CPU可以接着发送下一个字符。
接收数据:SCON的REN位应处于允许接收状态,即REN=1。在此前提下,串行口采样RXD端,当采样到从1到0的状态跳变时,就认为已接收到起始位。随后在移位脉冲的控制下,把接收到的数据位移入接收寄存器中。直到停止位到来之后置位中断标志位RI,通知CPU从SBUF取走接收到的一个字符。
3、 串行工作方式2 和3
串行工作方式2和3都是11位为一帧的串行通信方式,即1个起始位、9个数据位和1个停止位。
在这两种工作方式下,字符还是8个数据位,只不过增加了一个第9数据位(D8),它是一个可编程位,其功能由用户设定。
在发送数据时,应予先在串行口控制寄存器SCON的TB8位中把第9个数据位的内容准备好。
这两种工作方式的数据接收过程也与方式1基本类似,不同点仍在第9数据位上,串行口把接收到的前8个数据位移入SBUF,而把第9数据位送SCON的RB8。
串行工作方式2和3是为多机通信而准备的。两者的工作过程相同,差别仅在于波特率的设置,方式2的波特率是固定的,而方式3的波特率可由用户根据需要设定,设定方法与方式1相同。
串行通信数据传输速率
1 、传输速率的表示方法
与传输速率有关的术语
波特(Baud):每秒1次的信号变化称为1波特。波特原本是表示电信设备传输速率的单位,后来又用于表示调制解调器的数据传输速率。
波特率(Baud Rate):是每秒钟事件发生的数目或信号变化的次数。在单片机的串行数据传输中,事件和信号变化都反映在二进制位上,因此就以波特率表示串行数据的传输速率。
比特率(Bit Rate):也称为位速率,即每秒钟传输二进制数的位数。在一般的单片机串行通信中,波特率与比特率的概念是一样的,但在高速串行通信中,由于一个事件的编码往往不止1位,因此波特率与比特率就不一样了,例如事件按4位编码,如果数据传输的波特率是2400,则比特率就是9600。
(2)单片机中使用的波特率
单片机使用波特率作为串行通信传送速率的单位。即
1波特=1 b/s(位/秒)
在串行数据传输中,波特率除表明数据传送速率外,还可以表示串行口中移位脉冲频率的高低,因为串行数据发送和接收的速率是由移位脉冲决定的。波特率高表明移位脉冲频率高,串行数据传输速度就快;反之,波特率低表明移位脉冲频率也低,串行数据传输速度就慢。
波特率的数值差异很大,例如,在RS232C标准中规定,允许波特率为每秒50~19 200 b/s。在实际的串行数据传输应用中,应根据速度要求、线路质量以及设备情况等因素选定波特率。
2、80C51的波特率
(1)串行工作方式0的波特率
串行工作方式0的波特率是固定的,其值为
波特率=fosc/12
其中fosc表示外部振荡器频率。fosc/12即外部振荡脉冲的12分频。在串行工作方式0下,每个机器周期产生一个移位脉冲,进行一次串行移位。因为波特率固定,不存在设置波特率的问题。
(2)串行工作方式2的波特率
串行工作方式2的波特率也是固定的,但有两个数值。其计算公式为:
波特率=fosc×2smod/64
其中smod是串行口波特率倍增位SMOD的值。这两种固定的波特率可根据需要选择,而选择的方法是设置PCON寄存器中SMOD位的状态。
(3)串行工作方式1和方式3的波特率串行工作方式1和方式3的波特率不是固定的,可以根据需要设置。
80C51是以定时器T1作为波特率发生器,以其溢出脉冲产生串行口的移位脉冲。因此,在这两种工作方式中,通过计算T1的计数初值就可以实现波特率的设置。假定定时器的计数初值为X,则计数溢出周期为:
(12/fosc)×(256-X)
溢出率为溢出周期的倒数,则波特率计算公式为:
波特率=(2smod/32)×(定时器1溢出率)=(2smod/32)×{fosc/[12×(256-X)]}
根据上述波特率计算公式,得出计数初值的计算公式为:
X=256-[fosc×(2smod)]/(384×波特率)
以定时器T1作波特率发生器是由系统决定的,用户只需先把波特率确定下来,再通过计算得到定时器的计数初值,然后通过初始化程序装入T1即可。当定时器T1作波特率发生器使用时,应选择定时方式2(即8位自动加载方式) 。
串行通信应用
1 、近程串行通信
单片机的数据信号在传输线上传送时,由于受到线间分布电容和噪声干扰等影响,将引起传输信号的幅度衰减和波形畸变,极易导致传输错误。加之导线越长电容越大,所以传输距离就受到一定的限制。
由于近距离串行通信不改变数据位波形和频率,所以也称为基带传输方式。虽然基带方式实现起来既方便又经济,但只能用于近程通信。
2 、调制解调器的使用
对于远程通信(例如城市之间),不能使用基带传输方式,只能使用模拟信号形式进行,一般使用电话线。
为了在电话线上进行串行数据传输,需要在发送端把数字信号转变为模拟信号再进行发送,这种把数字信号转变为模拟信号的过程称为调制。
在接收端应把模拟信号再转变为数字信号,这一过程称为解调。
远程通信多采用双工方式,即通信双方都应具有发送和接收功能。为此在通信线路的两端都设置调制器和解调器,并且把二者结合在一起称为调制解调器(Modem)。使用电话线作传输线的远程通信连接如下图所示
3 、双机通信
双机通信使用串行工作方式1进行。在进行双机串行通信之前,首先把通信中的一些技术性问题设定下来。其中包括:
① 确定数据通路形式。若为单工形式,则需确定哪一方为发送方哪一方为接收方;而对于双工形式则双方都能发送和接收数据,不存在这个问题。
② 制定好通信协议。虽然串行工作方式1的数据帧格式是固定的,但数据传送的波特率以及是否使用奇偶校验等问题还需事先约定。
③ 设计好联系代码,以便进行通信联络。联系代码可以使用ASCII码,也可以自行设计。自行设计的联系代码只能供自己使用。
④ 定义数据表。以便给发送数据提供来源、给接收数据提供去处,只要指出数据表的首地址及数据长度就可以把数据表确定下来。
4 、多机通信
(1)多机通信系统
一对多式的多机通信可以构成一个主从结构的分布式单片机系统,常在规模较大的工业过程控制系统中使用。在这样的系统中,出于集中管理和控制的需要,主机可随时向各从机发布命令,并把现场状态和检测数据等通过从机及时传输回主机进行处理。以主机为主导方,要给每台从机编码,以便主机能按编码呼叫从机,有效的从机编码范围是01H~FEH,而把FFH作为一条控制命令使用。所以在80C51多机通信系统中,从机数目最多可达254台。
(2)多机通信技术要点说明
与双机通信相比,多机通信的复杂性在于主机如何呼叫从机以及如何从呼叫状态转入到通信状态。为此多机通信有3个技术要点:第9数据位,串行口控制寄存器SCON中的多机通信控制位SM2,串行工作方式2或方式3。
1)第9数据位
第9数据位是供主机使用的标识位。因为在多机通信中主机既发送从机编码(地址帧),又发送数据(数据帧),为区分地址帧和数据帧,设置了第9数据位。第9数据位为1时,表明主机发送的是从机编码;第9数据位为0时,表明主机发送的是数据。程序如下:
MOVSCON,#0D8H;TB8=1,串行工作方式3
MOV R3,#01H
MOV A, R3
MOVSBUF,A
从机接收到地址帧后与本机编码比较,若相符,则再把该机编码返回,作为应答码,以示呼叫成功。然后主机把TB8位清0(CLR TB8),接着进行命令和数据传输。
2)串行口控制寄存器SCON的多机通信控制位SM2
在从机方,对于主机发送过来的从机编码和数据,应该有不同的反映。在串行口控制寄存器SCON中定义一个多机通信控制位SM2,以SM2位的状态来通知从机是否进行接收操作。
如果SM2=1,只有接收到的第9数据位为1时,才将接收到的从机编码送入SBUF,并置位RI;否则,接收到的数据被丢弃。如果SM2=0,则不论第9数据位状态如何,都将所接收的内容装入SBUF中,并置位RI。
各从机初始化时应将串行控制寄存器SCON的SM2位置1,等待主机呼叫。各从机都能接收到主机发送的地址帧,自动把其中的第9数据位送串行口控制寄存器SCON的RB8位,并把RI置1,以便通过中断或查询程序进行编号比较,判断主机是否在呼叫自己。确认之后,再把从机编码返回作为应答,并把本身的SM2位复位为0,为后面的数据传输作准备。
从机接收地址帧的指令序列如下:
MOVSCON,#0F0H ;SM2=1,串行工作方式3
QWE: JBCRI,ASD ;等待主机呼叫
SJMPQWE
ASD: MOVA,SBUF ;判断是否为本机
XRLA,#01H
JZZXC
……
ZXC:CLRSM2 ;确认后应答,SM2=0
MOVA,#01H
MOVSBUF,A
3)串行工作方式2或方式3
多机通信的主机和从机均应工作于方式2或方式3,主要目的是为了传送和处理第9数据位。所设定的工作方式应一直保持,因为主机可能随时结束当前通信,再呼叫另一个从机。
(3)多机通信的格式约定
呼叫成功后,主从机双方即可进行通信,通信流程可根据需要确定。
多数情况是主机首先发出“方向”命令,通知从机数据传送的方向。
例如,用00H表示要求从机发送数据,用01H表示要求从机接收数据。从机接收到命令后,要作出应答,并报告自己的状态。
相关文章