串行通信/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 国际 许可协议进行许可。