一.同步通信和异步通信
串行通信有两种基本通信方式,即同步通信和异步通信。
1.异步通信
在异步通信中,数据或字符是一帧一帧地传送的。帧定义为一个字符的完整的通信格式。
一般也称为顿格式。在格式中,一个字符由 4 个部分组成:起始位、数据位、奇偶校验和停止位。首先是一个起始位“0”表示字符的开始;然后是 5~8 位数据,规定低位在前高位在后:接下来是奇偶校验位(该位可省略);最后是一个停止位“1”,用以表示字符的结束,停止位可以是1位、1.5 位、2位,不同的计算机规定有所不同。如图所示为11位的帧格式
由于异步通信每传送一帧有固定格式,通信双方只需按约定的帧格式来发送和接收数据,所以,硬件结构比较简单;此外,它还能利用奇偶校验位检测错误,因此,这种通信方式应用比较广泛。
2.同步通信
同步通信中,在数据开始传送前用同步字符来指示,同步字符通常为 1~2个,数据传
送由时钟系统实现发送端和接收端同步,即检测到规定的同步字符后,下面就连续按顺序传送数据,直到通信告一段落。同步传送时,字符与字符之间没有间隙,不用起始位和停止位,仅在数据块开始时用同步字符SYNC来指示,同步传送格式如图所示。
同步通信中数据块传送时去掉了字符开始和结束的标志,因而其速度高于异步传送,但这种通信方式对硬件的结构要求比较高。
二.串行通信的方式
在串行通信中,数据是在两机之间进行传送的。按照数据传送的方向,串行通信可以分为单工制式、半双工制式和全双工制式。
1.单工
单工制式的数据传送是单向的。如图所示,通信双方中一方固定为发送端,另一方固定为接收端。单工制式的串行通信,只需要一条数据线。
2.半双工
在半双工制式下,甲乙两机之间只有一个通信回路,接收和发送不能同时进行,只能分时接收和发送,即在任一时刻只能由两机中的一方发送数据,另一方接收数据。因而两机之间只需一条数据线即可,如图所示
3.全双工
在全双工制式下,甲乙两机之间的数据发送和接收可以同时进行,全双工制式的串行通信必须使用两根数据线,如图所示。不管哪种形式的串行通信,两机之间均应有共地线。
三.串行通信的速率
传送速率是指数据传送的速度。在串行通信中,数据是按位进行传送的,因此传送速率用每秒钟传送数据的位数来表示,称之为波特率(baud/s)。例如数据传送速率是120个bit/s.每个字符由1个起始8个数据位和1个停位构成,则其传送波特率为:
10X120=1200baud/s
异步通信的传送速度一般在 50~19200baud/s 之间,常用于计算机低速终端以及双机或多机之间的通信等。在波特率选定之后,对于设计者来说,就是如何得到能满足波特率要求的发送时钟脉冲和接收时钟脉冲。
四.MCS-51单片机结构
MCS-51 的行口是一个可编程的全双工串行通信接口,通过软件编程可以用作通用异步接收和发送器,也可以用作同步移位寄存器。其格式有 8 位、10位和 11 位,并能设置各种波特率,使用灵活方便。
MCS-51单片机的串行口结构框图如图所示。由图可见,它主要由两个数据缓冲器SBUF和一个输入移位寄存器,以及一个串行口控制寄存器 SCON 等组成。MCS-51串行口能以全双工方式通信,即两个缓冲器可以同时接收和发送数据,但是对于单片机内部总线来说,发送和接收是不能同时进行的,所以给这两个缓冲器指定相同的名称(SBUF),且占用同一个地址99H。
串行发送与接收的速率与移位脉冲同步。MCS-51常用定时器T1(方式2)作为串行通信的波特率发生器,T1 的溢出率经 2 分频(或不分频)后,再经 16 分频作为行发送或接收的移位脉冲。移位脉冲的频率即是串行通信的波特率。
外,在接收缓冲器之前还有移位寄存器,从而构成了串行接收的双缓冲结构,以避免在数据接收过程中出现的帧重叠错误。在前一个字符从接收缓冲器SBUF取走之前,当前字符即开始串行的方式被接收到移位寄存器。但是,在当前字符接收完毕之后,如果前一个字符还未被读取时,前一个字符就会被当前字符覆盖。与接收数据情况不同,在发送数据时,由于CPU是主动的,不会发生重叠错误,因此发送电路不需要双缓冲结构,以保持最大的传送速率。
串行口的发送和接收都是以特殊功能寄存器SBUF的名义进行读或写的当向SBUF写数据(执行“MOV SBUF,A”)时,即开始启动一个字符的发送,发送完毕置发送中断标志位(TI=1)。在满足接收中断标志位 RI=0的条件下,只要置接收使能位 REN=1,就会启动一个字符的接收过程。一个字符接收完毕,自动置接收中断标志位(RI=1),同时将移位寄存器中所接收的字符移送到接收缓冲器SBUF 中。执行“MOV A ,SBUF”时,便由接收缓冲器将接收的字符送到累加器A中。
五.串行口的控制
MCS-51的串行口是可编程接口,通过对两个特殊功能寄存器SCON和PCON的初始化编程,可以实现对串行口的控制。
1.串行口控制寄存器(SCON)
SCON 是一个可位寻址的专用寄存器,用于串行数据通信的控制。其单元地址为98H,位地址为98H~9FH。其内容及位地址表示如下:
•SM0、SM1:串行口工作方式选择位。
其状态组合所对应的工作方式如下:
•SM2:多机通信控制位。
因多机通信是在方式2和方式3下进行,因此SM2主要用于方式2和方式3。当串行口以方式2或方式3接收时,若SM2=1,只有当接收到的第九位数据(RB8)为1才将接收到的前8位数据送入 SBUF,并置接收中断标志 (RI=1),产生中断请求;否则,将接收到的前 8 位数据丢弃。而当 SM2-0 时,则不论第九位数据 (RB8)为0还是1,都将前8位数据装入 SBUF 中,并产生中断请求。在方式0中,SM2必须为0。
•REN:接收使能位。
REN位用于对串行口数据的接收进行控制,该位由软件置位或清除。当REN=0时禁止接收;REN=1时,允许接收。
•TB8:发送数据的第九位。
在方式 2和方式 3中,根据需要由软件进行置位和复位。双机通信时该位可作奇校验位:在多机通信中可作为区别地址或数据的标识位。一般约定 TB8-1 时为地址帧,TB8=0时为数据帧。
•RB8:接收数据的第九位。
在方式2和方式3中,RB8 存放接收到的第九位数据。其功能类似于 TB8(例如可能是奇偶位,或是地址/数据帧标识)
•TI:发送中断标志位。
在方式0中,发送完 8 位数据后,由硬件置位;在其他方式中,在发送停止位之前由硬件置位。TI=1时,表示发送结束,其状态既可申请中断,也可供软件查询使用TI位必须由软件清0。
RI:接收中断标志位。
在方式0时,接收完8位数据后,由硬件置位;在其他方式中,在接收停止位的中间由硬件置位。RI=1时,表示接收结束,其状态既可申请中断,也可供软件查询使用RI位必须由软件清0。
2.电源控制寄存器(PCON)
PCON 寄存器主要是为 CHMOS 型单片机的电源控制而设的专用寄存器,单元地址为87H,其格式如下:
在HMOS单片机中,该寄存器中除最高位之外,其他位都是虚设的。最高位 SMOD是串行口波特率倍增位。当SMOD=1 时,串行口波特率加倍。系统复位时,SMOD=0。
六.波特率的设计
在串行通信中,收发双方对发送或接收的数据速率(即波特率)要有一定的约定。通过软件对串行口编程可约定为4种工作方式,其中方式0和方式2的波特率是固定的,而方式1和方式3的波特率是可变的,由定时器1的溢出率来控制。
1.方式0的波特率
在方式0中,每个机器周期接收或发送一位数据,因此波特率的数值固定为时钟频率数值(fosc𝑓𝑜𝑠𝑐)的1/12,且不受SMOD的影响。
2.方式2的波特率
串行口方式2的波特率取决于PCON中SMOD的值,当SMOD-0时,波特率为/的1/64:若SMOD=1,则波特率为fosc𝑓𝑜𝑠𝑐的 1/32,即:
3.方式1和方式3的波特率
方式1和方式3的波特率由定时器T1的溢出率与SMOD的值决定,即:
常用的波特率初值:
七.串行口的工作方式
根据需要,MCS-51单片机的串行口可设置四种工作方式,可有8 位、10位或11 位帧格式。
1.方式0
在方式0下,串行口是作为同步移位寄存器使用。这时以RXD(P3.0)端作为数据移入的入口和出口,而由TXD(P3.1)端提供移位脉冲。移位数据的发送和接收以8位为一帧,不设起始位和停止位,低位在前高位在后。这种方式常用于扩展I/O口。
2.方式1
工作方式1真正用于串行发送和接收,为 10 位通用异步接口。TXD(P3.1)用于发选数据,RXD(P3.0)用于接收数据。接收或发送一帧数据的格式为:1位起始位,8位数据位和1位停止位,其波特率可调。
发送时,数据从TXD(P3.1)引脚输出,当数据写入发送缓冲器SBUF时,就启动发送。发送完一帧数据后,由硬件将TI置1,并申请中断,通知CPU可以发送下一个数据。
接收时,由软件使 REN 置1允许接收,串行口采样脚 RXD(P3.0)。当采样到由1至0的跳变时,确认是起始位“0”,就开始接收一帧数据。当停止位来到之后将停止位送入RB8位,由硬件将RI置1,并申请中断,通知CPU从SBUF取走接收到的一个数据。
3.方式2与方式3
在工作方式2下,串行口为11 位格式的异步通信接口。接收或发送一数据的格式为:1个起始位,8位数据位,1位可编程位和1位停止位。波特率与SMOD有关。
发送前,先根据通信协议由软件设置 TB8(如作奇偶校验位或地址/数据标志位),然后将要发送的数据写入SBUF即能启动发送。“写SBUF”指令把8位数据装入SBUF的同时,还把TB8装入发送移位寄存器的第9位上,然后从TXD(P3.1)端输出,一帧数据发送完后,由硬件将TI置1,并申请中断。
接收时,先将 REN 置1,使串行口处于允许接收状态,同时还要将RI清0在演是此条件的前提下,再根据SM2的状态和所接收到的 RB8 的状态决定行口在数据到来后是否使RI置1,并申请中断,接收信息。
当SM2=0时,不管RB8为0还是为1,RI都置1,接收发来的信息,并申请中断。
当SM2=1,且RB8为1时,表示在多机通信的状态下,接收的信息为地址帧,此时RI置1,串行口接收发来的地址,并申请中断。
当SM2=1,且RB8为0时,表示接收的信息为数据帧,但不是发给本从机的,此时RI不置1,因而SBUF中所接收的数据将丢失。
方式3同样是11位为一帧的串行通信方式,其通信过程与方式2完全相同,所不同的仅仅是波特率。