7.2.2 串行口控制寄存器和波特率倍增设置
串行口控制寄存器用来选择串行口工作方式、控制数据接收和发送,并标示串行口的工作状态等。当串行口接收数据时,外界的串行信号通过单片机的引脚RXD(P3.0串行数据接收端)进入串行口的接收缓冲器。当串行口发送数据时,CPU将数据写入发送缓冲器,由发送缓冲器将数据通过引脚TXD(P3.1串行数据发送端)发送至外部的通信设备。特殊功能寄存器PCON控制串行口的波特率。
接收/发送数据时,无论是否采用中断方式工作,每接收/发送一个数据后都必须用指令对串行中断标志RI和TI清0,以备下一次接收/发送数据。
1.串行口控制寄存器
SCON决定串行口通信的工作方式,控制数据的接收和发送,并标示串行口的工作状态等。其位格式为:
SM0、SM1:串行口工作方式控制位。其对应4种工作方式,如表7-1所示(fosc是晶振频率)。
表7-1 串行口的工作方式
SM2:多机通信控制位。其主要用于工作在方式2和方式3的时候。若SM2=1,则允许多机通信。多机通信规定:第9位数据位为1(即TB8=1),说明本帧数据为地址帧;第9位数据为0(即TB8=0),说明本帧数据为数据帧。当从机接收到的第9位数据(在RB8中)为1时,数据才装入接收缓冲器,并置RI=1,向CPU申请中断;如果接收到的第9位数据(在RB8中)为0,则不置位中断标志RI,信息丢失。当SM2=0时,则不管接收到第9位数据是否为1,都产生中断标志RI,并将接收到的数据装入接收缓冲器。应用这一特点可以实现多机通信。
串行口工作在方式0时,SM2必须设置为0;串行口工作在方式1时,如SM2=1,则只有接收到有效的停止位时才会激活RI。
REN:允许接收控制位。当REN=1时,允许接收;当REN=0时,禁止接收。此位由软件置1或清0。
TB8:在方式2和方式3中,此位为发送数据的第9位,在多机通信中作为发送地址帧或数据帧的标志。TB8=1,说明该发送帧为地址帧;TB8=0,说明该发送帧为数据帧。在许多通信协议中,它可作为奇偶校验位。此位由软件置1或清0。在方式0和方式1中,此位未使用。
RB8:接收数据的第9位。在方式2和方式3中,接收到的第9位数据放在RB8中。它是约定的奇/偶校验位或是约定的地址/数据标志位。在方式2和方式3多机通信中,若SM2=1且RB8=1,说明接收到的数据为地址帧。
TI:发送中断标志位。在一帧数据发送完时置位。TI=1,申请中断,说明发送缓冲器已空,CPU可以发送下一帧数据。中断被响应后,TI不能自动清0,必须由软件清0。
RI:接收中断标志位。在接收到一帧有效数据后,由硬件置位。RI=1,申请中断,表示一帧数据接收结束,并已装入接收缓冲器中,CPU响应中断,取走数据。RI不能自动清0,必须由软件清0。
串行口发送中断标志TI和接收中断标志RI共为一个中断源。因此,CPU接收到中断请求后,不知道是发送中断标志TI还是接收中断标志RI,必须用软件来判别。单片机复位后,SCON的各位均清0。
2.串行口波特率倍增设置
串行口波特率倍增通过波特率倍增位实现,PCON的字节地址为87H,其中波特率倍增位SMOD与串行口工作有关。PCON的位格式为:
串行口工作在方式1、方式2、方式3时,波特率与SMOD有关,当SMOD=1时,波特率提高一倍。复位时,SMOD=0。