MCS-51 单片机串口的基本结构是什么?如何工作?
扫描二维码
随时随地手机看文章
MCS-51单片机串口的基本结构
MCS-51单片机内部有一个全双工的异步串行通信接口,其结构如图4-18所示。串口工作时,单片机P3口的P3.0引脚和P3.1引脚处于第二功能,分别是串口的数据接收端RXD和发送端TXD。
图4-18 MCS-51单片机串口内部结构示意图
串口控制寄存器SCON决定了串口的工作方式,而串口的波特率与定时/计数器1的溢出率直接相关。另外,串口发送数据和接收数据都可以产生串口中断请求。
发送缓冲区只能写入不能读出。发送数据时,在发送控制器的控制下,发送缓冲区中的并行数据转换为串行数据,并被插入格式信息以形成完整的字符数据帧,最后由TXD引脚发送出去。接收缓冲区只能读出不能写入。接收数据时,由RXD引脚接收字符数据帧。在接收控制器的控制下,字符数据帧中的格式信息被滤除,然后数据被移位寄存器转换成并行数据并存入接收缓冲区。可见,MCS-51单片机的串口是全双工的串口,可以同时进行数据发送和接收。
串口的工作方式
MCS-51单片机的串口有4种工作方式,其中方式0主要用于并行I/O接口的扩展,其他方式用于数据传输。
1.串口工作方式0
在方式0时,串口是8位同步移位寄存器,既可以移位输入也可以移位输出,并不是真正的数据通信方式,主要用于扩展外部并行I/O接口。如该方式的时序(见图4-19)所示,TXD是移位脉冲的输出引脚,RXD是数据移位输入或输出的引脚。另外,方式0的字符数据帧中只有8个数据位,没有格式信息。
图4-19串口工作方式0时序
a)发送(输出)时序b)接收(输入)时序
(1)数据的发送
发送数据前,首先将TI清0,然后只要向SBUF中写入数据,就会启动串口的发送,如指令“MOV SBUF,A”。之后,引脚TXD和RXD分别出现移位脉冲和数据位。当所有数据位发送完毕后,串口发送中断请求标志位TI被单片机硬件置1,以表明一次数据发送过程结束。单片机硬件在任何时候都不会自动将TI清0。再次发送数据前,必须用软件指令将TI清0,如执行指令“CLR TI”。
(2)数据的接收
接收数据前,必须令REN=1且RI=0,以启动串口的接收过程。之后,TXD引脚出现移位脉冲,串口等待RXD引脚上出现的数据位,并将其送入移位寄存器。当接收完一个完整数据帧后,硬件将移位寄存器中的数据送入接收缓冲区SBUF,并将接收中断请求标志位RI置1,以表明数据接收完毕。再次接收数据前,需将SBUF中的数据取走,并将RI清0。取SBUF中的数据可以用指令“MOV A,SBUF”,该指令将接收缓冲区的数据送入累加器A。只能用软件指令将RI清0,如指令“CLR RI”,因为单片机硬件不会自动将RI清0。
2.串口工作方式1
在方式1时,串口可接收和发送8位数据,其时序如图4-21所示。1个字符帧中有10个二进制位,包括8个数据位、1个起始位和1个停止位。TXD和RXD分别是发送数据和接收数据的引脚。
图4-21串口工作方式1时序
a)发送(输出)时序b)接收(输入)时序
(1)数据的发送
与方式0相似,发送数据前,首先将TI清0,然后只要向SBUF中写入数据,就会启动串口的发送过程。被发送的数据从TXD向外输出,低位在前高位在后。一帧数据发送完毕后,TI被单片机硬件置1。再次发送数据前,必须用软件指令将TI清0。
(2)数据的接收
接收数据前,令REN=1且RI=0,以启动串口接收过程。通过RXD接收字符数据帧,接收顺序为先低位再高位。实际上,数据的接收是通过采样实现的,每个数据位上RXD被采样3次,其中两次相同的采样值作为采样结果送入接收端的移位寄存器。一个完整字符帧接收完毕后,RI被置1,并且接收的8个数据位被送入接收缓冲区,而停止位“1”被送入接收方SCON的RB8中。若再次接收数据,则必须提前将RI清0。
3.串口工作方式2和方式3
串口工作方式2和方式3属于多机通信方式(多机通信的具体实现方法见前文关于SM2的描述),主机与从机的连接关系如图4-23所示,其时序如图4-24所示。方式2和方式3的唯一差别是波特率计算公式不同,见表4-14。
图4-23多机通信中主机与从机的连接
(1)数据的发送
方式2和方式3的字符帧包含11个二进制位,与方式1相比,在停止位前多了TB8位,该TB8位来自于发送方SCON寄存器中的TB8位。发送方的TB8位最终将被送入接收方SCON寄存器的RB8位中。
图4-24串口工作方式2和方式3时序
a)发送(输出)时序b)接收(输入)时序
与其他工作方式的发送过程相同,发送前需将TI清0,然后向SBUF中写入数据以启动发送。数据由TXD向外发送,数据发送完毕后,TI被硬件置1。再次发送数据前,必须用指令将TI再次清0。
(2)数据的接收
串口接收数据前,需令REN=1且RI=0。数据由RXD引脚接收。在字符数据帧中,停止位和D7之间的位来自发送方的TB8,并被送入接收方SCON寄存器的RB8位中。因此在图4-24所示接收时序中,停止位和D7之间的位用RB8表示。一个字符数据帧接收完毕后,RI不一定被硬件置1。见表4-16,RI被硬件置1的情况有两种,分别是:①SM0=0;
②SM0=1并且RB8=1。再次接收数据前,必须将RI清0,并令REN=1。