二、串行口控制
89C51串行接口是一个可编程的全双工串行通信接口,可用作异步通信收发器(UART)。89C51串行口不仅可以与外部设备实现串行通信,也可以用方式0来扩充并行I/O口。
89C51单片机通过引脚RXD(P3.0,串行数据接收端)和TXD(P3.1,串行数据发送端)与外界串行通信。SBUF是串行口缓冲寄存器,包括发送缓冲器和接收缓冲器。它们有相同名字和地址空间,但接收缓冲器只能被CPU读出数据,发送缓冲器只能被CPU写入数据。
以下介绍与串行口有关的特殊功能寄存器:
1.数据缓冲器SBUF
串行口缓冲器SBUF是可直接寻址的特殊功能寄存器,其内部RAM字节地址是99H。在物理上,它对应着两个独立的寄存器,一个为发送缓冲器,另一个为接收缓冲器。发送时,就是CPU写入SBUF的过程,51系列单片机没有专门的启动发送状态的指令;接收时,就是读取SBUF的过程。接收缓冲器是双缓冲的,其目的是避免在接收下一帧数据之前,CPU未能及时响应接收器的中断,没有把上一帧数据读走,而产生两帧数据重叠的问题。
2.串行口控制寄存器SCON
SCON用于控制和监视串行口的工作状态,其各位定义如下:
相应的各位功能介绍如下:
SM0、SM1:由软件置位或清零,用于选择串行口四种工作方式,见表5-4。
表5-4 串行口工作方式
SM2:多机通信控制位。在方式2和方式3中,若SM2=1,表示多机通信。接收到的第9位数据(RB8)为0时,表示该帧为数据帧,这时不启动接收中断标志RI(即RI=0),并且将接收到的前8位数据丢弃;若RB8为1时,表示该帧为地址帧,这时才将接收到的前8位数据送入SBUF,并置位RI,产生中断请求。当SM2=0时,表示点对点通信,无论第9位数据为0或1,都将前8位数据装入SBUF中,并产生中断请求。在方式0时,SM2必须为0。
REN:允许串行接收控制位。若REN=0,则禁止接收;REN=1,则允许接收,该位由软件置位或复位。
TB8:发送数据D8位。在方式2和方式3时,TB8为所要发送的第9位数据。在多机通信中,以TB8位的状态表示主机发送的是地址帧还是数据帧:TB8=0为数据,TB8=1为地址;也可用作数据的奇偶校验位。该位由软件置位或复位。
RB8:接收数据D8位。在方式2和方式3时,接收到的第9位数据,可作为奇偶校验位或地址帧或数据帧的标志。方式1时,若SM2=0,则RB8是接收到的停止位。在方式0时,不使用RB8位。
TI:发送中断标志位。在方式0时,当发送数据第8位结束后,或在其他方式发送停止位后,由内部硬件使TI置位,向CPU请求中断。CPU在响应中断后,必须用软件清零。此外,TI也可供查询使用。
RI:接收中断标志位。在方式0时,当接收数据的第8位结束后,或在其他方式接收到停止位时,由内部硬件使RI置位,向CPU请求中断。同样,在CPU响应中断后,也必须用软件清零。RI也可供查询使用。
3.电源控制寄存器PCON
电源控制寄存器PCON中只有SMOD位与串行口工作有关,各位定义如下:
SMOD:串行口波特率加倍位。
SMOD=1:方式1和3时,波特率=定时器1溢出率/16;方式2波特率为fosc/32。
SMOD=0:方式1和3时,波特率=定时器1溢出率/32;方式2波特率为fosc/64。
CF1,CF0:两个通用标志位。
PD,IDL:CHMOS器件的低功耗控制位。