串行通信/URAT串行接口


为了能与机器通信,51 单片机都设计了 UART(Universal Asynchronous Receiver/Transmitter)串行接口,这是一个可编程的全双工异步通信接口,通过软件编程可以作为通用异步接收和发送器,也可作为同步移位寄存器,还可实现多机通信。

单片机与串行口工作有关的寄存器共有六个:串行口控制器 SCON,接收与发送缓冲寄存器 SBUF(名字相同地址【99H】也相同的两个缓冲器,CPU 通过不同的命令区分),电源控制寄存器 PCON,中断允许控制寄存器 IE,中断优先级寄存器 IP。

串行口控制寄存器 SCON
9FH 9EH 9DH 9CH 9BH 9AH 99H 98H
SM0 SM1 SM2 REN TB8 RB8 TI RI

SCON 寄存器的地址为 98H,可以寻址,复位时,所有位均被置 0。

符号 功能
SM0 串行方式选择位
SM1
SM2 多机通信控制位,需要串口以方式 2方式 3 方式工作
REN 允许串行接收位,REN = 1 时,允许接收;REN = 0 时,禁止接收
TB8 发送数据的第 9 位
RB8 接收数据的第 9 位
TI 发送中断标志位
RI 接收中断标志位

 

串行口工作方式选择
SM0 SM1 方式 功能 波特率
0 0 方式 0 八位同步移位寄存器 fosc/12
0 1 方式 1 十位 UART 可变
1 0 方式 2 十一位 UART fosc/64,fosc/32
1 1 方式 3 十一位 UART 可变

当串行口以方式 2 方式 3 接收时,如果 SM2 = 1,允许多机通信,如果接收到的第九位 RB8 为 0,则 RI 不会置 1,且不接收主机发来的数据;如果SM2=1,且 RB8 为 1 时,则 RI 置 1,产生中断请求,并将接收到的 8 位数据送入 SBUF。当 SM2 = 0 时,不论 RB8 为 0 还是 1,都会将接收到的 8 位数据送入 SBUF,并产生中断。

如果是工作于方式 1,当处于接收状态时,若 SM2 = 1,则只有接收到有效停止位时,RI 才置 1。

如果工作于方式 0,SM2 应该置 0。

使用 SM2 多机通信控制
SM2 取值 RB8 取值 RI 结果状态 8 位数据是否送入 SBUF
1 0 0
1 1 1
0 0 1
0 1 1

方式 2 方式 3 的工作方式下,作为发送数据的第九位 TB8,如果是双机通信,该位可以约定作为奇偶校验位,如果是多机通信,该位也可以作为区别地址帧或数据帧的标识位。通常由指令设定地址帧时,设定 TB8 = 1,设定数据帧时,设定 TB8 = 0。

方式 2 方式 3 的工作方式下,作为接收数据的第九位 RB8,其状态与 TB8 相呼应,可以是约定的奇偶校验位,也可以是地址/数据标识位。

 

TI 和 RI 工作方式
方式 0 其它方式
TI 发送完八位数据后,硬件会置位 在发送停止位之初由硬件置位
TI = 1 时,可以申请中断,也可供软件查询,且必须由软件来清除
RI 接收完八位数据后,硬件会置位 在接收停止位的中间,由硬件置位
RI = 1时,可以申请中断,也可供软件查询,且必须由软件来清除

 


知识共享许可协议
《串行通信/URAT串行接口》CRAFTOUR.COM 采用 知识共享 署名-非商业性使用-禁止演绎 4.0 国际 许可协议进行许可。