一、SCON寄存器(SCON的所有位都可进行位操作清“0”或置“1”)
D0 D1 D2 D3 D4 D5 D6 D7
RI TI RB8 TB8 REN SM2 SM1 SM0
1.SM0和SM1
2、SM2
SM2——多机通信控制位
a.多机通信是在方式2和方式3下进行。当串口以方式2或方式3接收时,如果SM2=1,则只有当接收到的第9位数据(RB8)为“1”时,才使RI置“1”,产生中断请求,并将接收到的前8位数据送入SBUF。
当接收到的第9位数据(RB8)为“0”时,则将接收到的前8位数据丢弃。
b.在方式1时,如果SM2=1,则只有收到有效的停止位时才会激活RI。
c.在方式0时,SM2必须为0。
当SM2= 0时,则不论第9位数据是1还是0,都将前8位数据送入SBUF中,并使RI置1,产生中断请求。
3、REN——允许串行接收位(使能)
由软件置“1”或清“0”。
REN=1,允许串行口接收数据。
REN=0,禁止串行口接收数据。
4、TB8——发送的第9位数据
方式2和方式3,TB8是要发送的第9位数据,其值由软件置“1”或清“0”。在双机串行通信时,一般作为奇偶校验位使用。在多机串行通信中用来表示主机发送的是地址帧还是数据帧,TB8=1为地址帧,TB8=0为数据帧。
5、RB8——接收的第9位数据
方式2和方式3,RB8存放接收到的第9位数据。在方式1,如SM2=0,RB8是接收到的停止位。在方式0,不使用RB8。
6、TI——发送中断标志位
方式0,串行发送的第8位数据结束时TI由硬件置“1”,在其他方式中,串行口发送停止位的开始时置TI 为“1”。
TI =1,表示一帧数据发送结束。TI的状态可供软件查询,也可申请中断。CPU响应中断后,在中断服务程序中向SBUF写入要发送的下一帧数据。TI必须由软件清“0”。
7、RI—接收中断标志位
方式0时,接收完第8位数据时,RI由硬件置“1”。在其他工作方式中,串行接收到停止位时,该位置“1”。RI = 1,表示一帧数据接收完毕,并申请中断,要求CPU从接收SBUF取走数据。该位的状态也可供软件查询。RI必须由软件清“0”。
二、PCON寄存器(仅其最高位与串口通信有关,故其他位略去)
D0 D1 D2 D3 D4 D5 D6 D7
IDL PD GF0 GF1 - - - SMOD
1、SMOD:波特率选择位。
SMOD = 1时,要比SMOD = 0时的波特率加倍。
三、SBUF寄存器
串行口中有两个缓冲寄存器SBUF,一个是发送寄存器,一个是接收寄存器,在物理结构上是完全独立的。它们都是字节寻址的寄存器,字节地址均为99H。这个重叠的地址靠读/写指令区分:串行发送时,CPU向SBUF写入数据,此时99H表示发送SBUF;串行接收时,CPU从SBUF读出数据,此时99H表示接收SBUF。
四、串行口的4种工作方式
1、方式0
方式0为同步移位寄存器输入/输出方式。该方式并不用于两个单片机之间的异步串行通信,而是用于串行口外接移位寄存器,扩展并行I/O口。
8位数据为一帧,无起始位和停止位,先发送或接收最低位。波特率固定,为fosc/12。
a.输出:
当CPU执行一条将数据写入发送缓冲器SBUF的指令时,产生一个正脉冲,串行口开始把SBUF中的8位数据以fosc/12的固定波特率从RXD引脚串行输出,低位在先,TXD引脚输出同步移位脉冲,发送完8位数据,中断标志位TI置“1”。
b.输入:
方式0输入,REN为串行口允许接收控制位,0—禁止接收; 1—允许接收。
当向SCON寄存器写入控制字(设置为方式0,并使REN位置1,同时RI = 0)时,产生一个正脉冲,串行口开始接收数据。
引脚RXD为数据输入端,TXD为移位脉冲信号输出端,接收器以fosc/12的固定波特率采样RXD引脚的数据信息,当接收完8位数据时,中断标志RI置1,表示一帧数据接收完毕,可进行下一帧数据的接收。