串行口有4种工作方式,它们是由串行口控制寄存器SCON的SM0和SM1的状态来定义的,编码及功能参见表2-3。在这4种工作方式中,串行通信只使用方式1、2、3。
方式0主要用于扩展并行输入/输出接口。
表2-3 串行口工作方式
表中,fosc为晶振频率,UART为通用异步接收和发生器。
1.方式0
在方式 0 状态下,串行口为同步移位寄存器输入/输出方式,其波特率是固定不变的,数据由RxD(P3.0)端输入,同步移位脉冲由TxD(P3.1)端输出。方式0主要用于扩展并行输入/输出接口(如串行LED数码管显示系统等)。
1)方式0发送
当一个数据写入串行口发送缓冲器 SBUF 时,串行口即将 8 位数据以 fosc/12 的波特率从RxD引脚输出(从低位到高位),发送完8位数据时,将发送中断标志TI置1。TxD引脚输出同步脉冲,波形如图2-22所示。
2)方式0接收
在满足REN=1和RI=0的条件下,就会启动一次接收过程,此时RxD为串行输入端,TxD 为同步脉冲输出端。串行接收的波特率为 fosc/12,其时序如图 2-23 所示。当接收完一帧数据(8位)后,控制信号复位,中断标志RI被置1,呈中断申请状态。当再次接收时,必须通过软件将RI清零。
图2-22 串行口方式0发送时序
图2-23 串行口方式0接收时序
在方式0中,SCON中的TB8、RB8位没用,多机通信控制位SM2位必须为0。方式0下发送或接收完 8 位数据时由硬件置 1 并发送中断标志 TI 或 RI,向 CPU 申请中断,CPU响应TI或RI中断后,标志TI或RI必须由用户程序清0。
2.方式1
串行口以方式 1 工作时,SCON 中的 SM0、SM1 两位分别为 0、1,则串行口被控制为波特率可变的8位异步通信接口。发送的每帧信息为10位:1位起始位,8位数据位(先低位后高位)和1位停止位。
1)方式1发送
串行口以方式 1 发送时,数据由 TxD 端输出,CPU 执行一条数据写入发送数据缓冲器SBUF 的指令,数据字节写入 SBUF 后,就启动串行口发送器发送。发送完一帧信息的数据位后,发送中断标志置1,其时序如图2-24所示。
图2-24 串行口方式1发送时序
2)方式1接收
当 REN=1 时,允许接收器接收,数据从 RxD 端输入。接收器以所选波特率的 16 倍的速率采样RxD端的电平,当检测到RxD端从1到0的跳变时,启动接收器接收,并复位内部的16分频计数器,以便实现同步。
在起始位,如果接收到的值不为 0,则起始位无效,复位接收电路,当再次接收到一个由1到0的跳变时,重新启动接收器。如果接收值为0,则起始位有效,接收器开始接收本帧的其余信息(一帧信息为 10 位)。在方式 1 接收中,若同时满足以下两个条件:RI=0、SM2=0或接收到的停止位为1时,则接收数据有效,实现装载SBUF、停止位进入PB8、接收中断标志RI置1。接收控制器再次采样RxD的负跳变,以便接收下一帧数据。
若这两个条件不满足,信息将丢失。中断标志 RI 必须由用户的软件清零,通常情况下,串行口以方式1工作时,SM2置为0。方式1的接收时序如图2-25所示。
图2-25 串行口方式1接收时序
3.方式2
当 SM0、SMl 两位分别为 1、0 时,串行口工作在方式 2,此时串行口被定义为 9 位异步通信接口。发送时可编程位(TB8)根据需要设置为 0 或 1,接收时,可编程位被送入SCON中的RB8。
1)方式2发送
在方式 2 发送时,数据由 TxD 端输出,发送一帧信息由 11 位组成,即 1 位起始位、8位数据位(低位在前、高位在后)、1位可编程位(第9位数据)和1位停止位,附加的第9位数据为SCON中的TB8。TB8由软件置1或清0,可作为多机通信中的数据标志位,也可作为数据的奇偶校验位。
CPU 在执行一条写 SBUF 的指令以后,便立即启动发送器发送,送完一帧信息后,TI被置 1,其时序如图 2-26 所示。在发送下一帧信息之前,TI 必须由中断服务程序(或查询程序)清0。
图2-26 串行口方式2发送时序
2)方式2接收
当SM0、SMl两位分别为1、0,且REN=1时,允许串行口以方式2接收数据。数据由RxD端输入,接收11位信息,即1位起始位、8位数据位、1位可编程位(第9位数据)和1位停止位。当接收器采样到RxD端从1到0的跳变,并判断起始位有效后,便开始接收1帧信息。当接收器接收到第 9 位数据后,如果 RI=0 且 SM2=0 或接收到的第 9 位数据为 1时,接收到的数据送入 SBUF,第 9 位数据送入 RB8,并置RI=1,其时序如图 2-27 所示。若不满足这两个条件,接收的信息将丢失。
图2-27 串行口方式2接收时序
4.方式3
当SM0、SM1两位为11时,串行口工作在方式3,方式3为波特率可变的9位异步通信方式,除了波特率外,方式3和方式2的发送时序和接收时序相同。