关于串行接口的 4 种工作模式的概念总结
扫描二维码
随时随地手机看文章
串行口的结构比较复杂,它具有 4 种工作模式,这些工作模式可以用 SCON 中的 SM0 和 SM1 两位编码决定。以下着重介绍各种模式的工作原理。
模式 0:
串行口工作模式 0 为同步移位寄存器输入/输出模式,可外接移位寄存器,以扩展 I/O 口。
模式 0 又分为模式 0 输出和模式 0 输入两种工作状态。但应注意:在这种模式下,不管输出还是输入,通信数据总是从 P3.0(RXD) 管脚输出或输入,而 P3.1(TXD) 管脚总是用于输出移位脉冲,每一个移位脉冲将使 RXD 端输出或者输入一位二进制码。在 TXD 端 的移位脉冲即为模式 0 的波特率,其值固定为晶振频率 fOSC 的 1/12 ,即每个机器周期移动一位数据。
(1) 模式 0 输出状态 。当一个数据写入串行口数据缓冲器时,就开始发送。在此期间,发送控制器送出移位信号,使发送移位寄存器的内容右移一位。直至最高位(D7 位) 移出后,停止发送数据和移位脉冲,完成了发送一帧数据的过程,并置发送中断标志 TI 为 1,申请中断或用于查询。
这是将单片机的串行口扩展为若干并行输出口的工作模式,常用的外接扩展芯片是串行输入/8 位并行输出的移位寄存器 74LS164 。它与单片机的连接电路如图 6.10 所示。
图 6.10 外接移位寄存器输出
每片 74LS164 有两个串行数据输入端和一个同步移位脉冲输入端,以及 8 个并行输出口。时钟 CLK 端上每一个上升沿都会使该芯片的 8 位数据输出右移一位。
(2) 模式 0 输入状态。在特殊功能寄存器 SCON 中,位 REN 是串行 口允许接收控制位。当 REN=0 时,禁止接收;当 REN=1 时,允许接收。当串行口置为模式 0 ,且满足 REN=1 和 RI=0 的条件时,就会启动一次接收过程。在机器周期的 S6P2 时刻,在串行口 内接收控制器向移位寄存器写入 11111110 ,并在 TXD 端输出移位脉冲,从 RXD 端输入一位数据,同时使输入移位寄存器内容左移一位,其右端补上刚由 RXD 端输入的数据。这 样,原先在输入移位寄存器中的 1 就逐位从左端移出,而在 RXD 引脚上 的数据就逐位从右端移入,当写入移位寄存器最左端的一个 0 移到最左端时,其右边已经接收了 7 位数据。这时,将通知接收控制器进行最后一次移位,并把所接收的数据装入SBUF,置位接收中断标志位 RI,提供申请中断或查询标志。
这是将单片机的串行口扩展为若干并行输入口的工作模式,常用的外接扩展芯片是 8 位并行输入/串行输出移位寄存器 74LS165 。它与单片机的连接电路如图 6.11 所示。 74LS165 有 8 个并行输入端,一个串行输出端,以及一个用于移位的时钟输入端。在同步移位脉冲的作用下,每个脉冲使 8 位并行输入数据左移一位,最高位移入单片机 RXD 端, 8 个移位脉冲可以使 1 个字节信息通过 RXD 引脚送入单片机的 SBUF 中。
图 6.11 外接移位寄存器输入
模式 1 :
串行口工作于模式 1 时,为波特率可变的 8 位异步通信接口 。数据位由 P3.0(RXD) 端接收,由 P3.1(TXD) 端发送。传送一帧信息为 10 位:一位起始位(0),8 位数据位(低位 在前) 和一位停止位(1)。 波特率是可变的,它取决于定时器 T1 的溢出速率及 SMOD 的状态。
(1) 模式 1 发送过程。用软件清除 TI 后,CPU 执行任何一条以 SBUF 为目标寄存器的指令,就启动发送过程。数据由 TXD 引脚输 出,此 的发送移位脉冲是 由定时器/计数器 T1 送来的溢出信号经过 16 或 32 分频而取得的。一帧信号发送完时,将置位发送中断 标志 TI=1,向 CPU 申请中断,完成一次发送过程。
(2) 模式 1 接收过程。用软件清除 RI 后,当允许接收位 REN 被置位 1 时,接收器以 选定波特率的 16 倍的速率采样 RXD 引脚上的电平,即在一个数据位期间有 16 个检测脉冲,并在第 7 、8 、9 个脉冲期间采样接收信号,然后用三中取二的原则确定检测值,以抑制 干扰。并且采样是在每个数据位的中间,避免了信号边沿的波形失真造成的采样错误。当检测到有从“1”到“0”的负跳变时,则启动接收过程,在接收移位脉冲的控制下,接收完一帧信息。当最后一次移位脉冲产生时能满足下列两个条件:
① RI=0 ;
② 接收到的停止位为 1 或 SM2=0 。
则停止位送入 RB8 ,8 位数据进入 SBUF,并置接收中断标志位 RI=1 ,向 CPU 发出中断 求,完成一次接收过程。否则,所接收的一帧信息将丢失,接收器复位,并重新检测由“1”至“0”的负跳变,以便接收下一帧信息。注意:接收中断标志应由软件清除,通常串行口以模式 1 工作时,SM2 设置为“0”。
模式 2 和模式 3:
串行口工作于模式 2 和模式 3 时,被定义为 9 位异步通信接口。它们的每帧数据结构是 11 位的:最低位是起始位(0),其后是 8 位数据位(低位在先),第 10 位是用户定义位 (SCON 中的 TB8 或 RB8),最后一位是停止位(1)。模式 2 和模式 3 工作原理相似 ,唯一的差别是模式 2 的波特率是固定的,即为 fOSC/32 或 fOSC/64;而模式 3 的波特率是可变的,与定时器 T1 的溢出率有关。
(1) 模式 2 和模式 3 的发送过程。发送过程是由执行任何一条 SBUF 为目的寄存器的指令来启动的。由“写入 SBUF”信号把 8 位数据装入 SBUF ,同时还把 TB8 装入发送移位寄存器的第 9 位,并通知发送控制器要求进行一次发送。发送开始,把一个起始位(0) 送到 TXD 端。移位后,数据由移位寄存器送到 TXD 端。再过一位,出现第一个移位脉冲。第一次移位时,把一个停止位“1”由控制器的停止位发生端送入移位寄存器的第 9 位。此后,每次移位时,把 0 送入第 9 位。因此,当 TB8 的内容送到移位寄存器的输出位置时,其左面一位是停止位“1”,而再往左的所有位全为“0”。这种状态由零检测器检测到后,就通知发送控制器作最后一次移位,然后置 TI=1 ,请求申请中断 。第 9 位数据(TB8) 由软件置位或清零,可以作为数据的奇偶校验位,也可以作为 多机通信中的地址、数据标志位。如把 TB8 作为奇偶校验 位 ,可以在发送程序中 ,在数据写入 SBUF 之前,先将数据位写入 TB8 。
(2) 模式 2 和模式 3 接收过程。与模式 1 类似,模式 2 和模式 3 接收过程始于在 RXD 端检测到负跳变时,为此,CPU 以波特率 16 倍的采样速率对 RXD 端不断采样。一检测到负跳变,16 分频计数器就立刻复位,同时把 1FFH 写入输入移位寄存器。计数器 的 16 个 状态把一位时间等分成 16 份,在每一位的第 7 、8 、9 个状态时,位检测器对 RXD 端 的值采样。如果所接收到的起始位无效(为 1), 则复位接收电路,等待另一个负跳变的到来。若 起始位有效(为 0), 则起始位移入移位寄存器,并开始接收这一帧的其余位。当起始位 0 移到最左面时,通知接收控制器进行最后一次移位。把 8 位数据装入接收缓冲器 SBUF,第 9 位数据装入 SCON 中的 RB8,并置中断标志 RI=1。装入 SBUF 和 RB8 以及置位 RI 的信号只有在产生最后一个移位脉冲且同满足下列两个条件时,才会产生:
① RI=0 ;
② SM2=0 或接收到的第 9 位数据为“1”。
上述两个条件中任一个不满足,所接收的数据帧就会丢失,不再恢复。两者都满足时,第 9 位数据装入 TB8 ,前 8 位数据装入 SBUF 。
请注意:与模式 1 不 同,模式 2 和 3 中装入 RB8 的是第 9 位数据,而不是停止位, 所接收的停止位的值与 SBUF、RB8 和 RI 都没有关系,利用这一特点可将其用于多机通信中。