51单片机的串口通信

51单片机的通信方式分为并行通信和串行通信。前者是指通常是将数据字节的各位用多条数据线同时进行传送,而后者是将数据字节分成一位一位的形式。

一、串行通信的传输方向

单工是指数据传输仅能沿一个方向,不能实现反向传输。半双工是指数据传输可以沿两个方向,但需要分时进行。全双工是指数据可以同时进行双向传输。串行通信常见的错误校验有奇偶校验、循环冗余校验。传输速率以为比特率为单位,它是每秒钟传输二进制代码的位数,单位是:位/秒(bps)。

二、80C51串行口的结构

串口结构如下图:

 51单片机的串口通信

 

80C51有两个物理上独立的接收、发送缓冲器SBUF,它们占用同一地址99H ;接收器是双缓冲结构 ;发送缓冲器,因为发送时CPU是主动的,不会产生重叠错误。

三、串行口的控制寄存器(SCON)

用以设定串行口的工作方式、接收/发送控制以及设置状态标志:

 51单片机的串口通信

 

SM0和SM1为工作方式选择位,可选择四种工作方式:

SM2,多机通信控制位,主要用于方式2和方式3。当接收机的SM2=1时可以利用收到的RB8来控制是否激活RI(RB8=0时不激活RI,收到的信息丢弃;RB8=1时收到的数据进入SBUF,并激活RI,进而在中断服务中将数据从SBUF读走)。当SM2=0时,不论收到的RB8为0和1,均可以使收到的数据进入SBUF,并激活RI(即此时RB8不具有控制RI激活的功能)。通过控制SM2,可以实现多机通信。在方式0时,SM2必须是0。在方式1时,如果SM2=1,则只有接收到有效停止位时,RI才置1。

REN,允许串行接收位。由软件置REN=1,则启动串行口接收数据;若软件置REN=0,则禁止接收。

TB8,在方式2或方式3中,是发送数据的第九位,可以用软件规定其作用。可以用作数据的奇偶校验位,或在多机通信中,作为地址帧/数据帧的标志位。在方式0和方式1中,该位未用。

RB8,在方式2或方式3中,是接收到数据的第九位,作为奇偶校验位或地址帧/数据帧的标志位。在方式1时,若SM2=0,则RB8是接收到的停止位。

TI,发送中断标志位。在方式0时,当串行发送第8位数据结束时,或在其它方式,串行发送停止位的开始时,由内部硬件使TI置1,向CPU发中断申请。在中断服务程序中,必须用软件将其清0,取消此中断申请。

RI,接收中断标志位。在方式0时,当串行接收第8位数据结束时,或在其它方式,串行接收停止位的中间时,由内部硬件使RI置1,向CPU发中断申请。也必须在中断服务程序中,用软件将其清0,取消此中断申请。

四、波特率的计算(用波特率计算器)

方式0的波特率 =  fosc/12

方式2的波特率 =(2SMOD/64)· fosc

方式1的波特率 =(2SMOD/32)·(T1溢出率)

方式3的波特率 =(2SMOD/32)·(T1溢出率)

  T1 溢出率 = fosc /{12×[256 -(TH1)]}

在单片机的应用中,常用的晶振频率为:12MHz和11.0592MHz。所以,选用的波特率也相对固定。常用的串行口波特率以及各参数的关系如表所示。

 51单片机的串口通信

 

【参考资料】

51单片机的串口通信(一)https://blog.csdn.net/sinat_38816924/article/details/84706854

上一篇:c-在Linux上使用X11抢占特定键上的事件


下一篇:从Xlib转换为xcb