11.1.3 串行接口控制寄存器SCON

串行控制寄存器SCON的格式及各位的含义如图11.5所示,控制寄存器SCON的字节地址为98H,可进行位寻址。该寄存器用于选择串行通信的工作方式和某些控制功能,包括接收/发送控制及设置状态标志等。下面分别介绍各位的用途。

❑SM0和SM1(D7和D6):用于选择串行通信接口的工作方式。按照SM0和SM1的二进制组合,分别对应4种工作方式,如表11.1所示。

11.1.3 串行接口控制寄存器SCON - 图1

图 11.5 串行接口控制寄存器SCON

11.1.3 串行接口控制寄存器SCON - 图2

在进行串行接口通信前,一般都需要选择工作方式。这里,fosc为单片机系统的主振频率。

❑SM2(D5):多机串行通信的控制位。在多机串行通信模式中,通信的双方分为主机和从机,而SM2用于控制从机的接收。

提示因多机通讯是在方式2和方式3下进行的,因此,SM2位主要用于方式2或方式3中。

当SM2=1时,则从机可以接收地址帧。若接单片机收到的第9位数据RB8为0时,表示此为数据帧,不启动中断标志RI,即RI=0,并且将前面接收到的8位数据丢弃;如果接收到的第9位数据RB8为1时,表示此为地址帧,此时将接收到的前8位数据送入SBUF中,并置位中断标志RI=1,向CPU提出中断申请。

当SM2=0时,从机可以接收所有的信息。从机在接收到一帧的数据后,无论第9位数据RB8是0还是1,都将启动中断标志RI,即RI=1,将接收到的串行数据送入SBUF中。

一般来说,当SM2=1时,允许多机串行通信,主要用于串行模式2和串行模式3中。在串行模式0中,SM2必须置为0。而在串行模式1中,如果SM2=1,则只有接收到有效停止位时,才启动接收中断标志RI,即置RI=1,以便于接收下一帧数据。

❑REN(D4):串行数据接收允许/禁止控制位。REN可以在C51程序中置1或者清零,当REN=1时,表示允许接收串行数据;当REN=0时,表示禁止接收串行数据。REN相当于串行数据接收的开关。

❑TB8(D3):主要用于串行模式2和串行模式3中,TB8作为发送数据的第9位随串行数据一起传输。TB8可以根据发送数据的需要由软件置位或清零。在串行模式0和串行模式1中,TB8位不使用。

一般来说,在单机串行通信中,TB8经常作为奇偶校验位。而在多机串行通信中,TB8可以作为地址帧和数据帧的区分标志位。此时,可以规定发送地址帧的时候,TB8=1;而发送数据帧的时候,TB8=0。

❑RB8(D2):主要用于在串行模式2和串行模式3中,RB8作为接收数据的第9位。在模式1中,如果SM2=0,即采用的不是多机通信模式,则RB8是已接收到的停止位。在模式0中,该位不使用。

在C51程序中,可以根据RB8被置位的情况对接收到的数据进行判断处理。在多机通信中可以作为约定的地址/数据标志位,若RB8被置为1,即RB8=1,则说明收到的数据为地址帧,否则为数据帧;如果RB8=0,则说明收到的数据为数据帧。在单机串行通信中,RB8也可以作为约定的奇偶校验位。

❑TI(D1):串行数据发送中断请求标志位。在一帧串行数据发送结束的时候,由单片机硬件自动置位。如果TI=1则表示发送缓冲器已空,通知8051 CPU可以发送下一帧数据。在模式0中,串行发送完8位数据时便进行硬件置位;其他模式中,串行发送到停止位的时候由硬件置位。

串行数据发送中断请求标志位TI不会自动复位,需要用软件复位清零。在程序中,可以查询TI,以决定CPU是否需要向SBUF发送数据,也可以将TI用作中断申请标志位来使用。

❑RI(D0):串行接收中断请求标志位。在接收到一帧有效的串行数据后,由单片机硬件置位。如果RI=1则表示接收缓冲器已满,即一帧数据接收完毕,并已装入接收缓冲器中,通知8051 CPU可以将数据取走。在模式0中,串行接收完8位数据时便进行硬件置位;其他模式中,串行接收到停止位的时候由硬件置位。

同样,串行接收中断请求标志位RI不会自动复位,需要在C51程序中手工复位清零,以便于接收下一帧数据。在程序中,可以查询RI,以决定CPU是否需要从SBUF中提取接收到的数据,也可以将RI用作中断申请标志位来使用。

提示SCON的所有位都可进行位操作清零或置1。

在KeilµVision3集成开发环境中,头文件reg51.h中包含了对特殊功能寄存器TCON及其各位的声明,示例如下。


sfr SCON=0x98;//定义SCON

sbit SM0=0x9F;

sbit SM1=0x9E;

sbit SM2=0x9D;

sbit REN=0x9C;

sbit TB8=0x9B;

sbit RB8=0x9A;

sbit TI=0x99;

sbit RI=0x98;


提示在reg52.h头文件中,使用以下形式定义SCON各位。


sbit SM0=SCON^7;//串行通信接口工作方式选择位

sbit SM1=SCON^6;//串行通信接口工作方式选择位

sbit SM2=SCON^5;//多机通信的控制位

sbit REN=SCON^4;//接收允许/禁止控制位

sbit TB8=SCON^3;//发送数据的第9位

sbit RB8=SCON^2;//接收数据的第9位

sbit TI=SCON^1;//发送中断请求标志位

sbit RI=SCON^0;//接收中断请求标志位


因此,在程序中加入该头文件后,便可以在C51程序中直接对这些位进行操作,示例如下。


SM0=0;

SM1=1;

REN=1;


该语句直接赋值SM0和SM1,用于设置串口为工作模式1,并置REN=1表示运行接收。这些语句也可以通过直接为寄存器SCON赋值来设置串口,示例如下。


SCON=0x50;

//串口模式1,允许接收


该语句直接为SCON赋值,用来设置串口为工作模式1,允许接收。