51单片机复习:串口通信

浪子不回头ぞ 提交于 2020-03-10 10:23:18

计算机通信是指计算机与外部设备或计算机与计算机之间的信息交换。(比如电脑和单片机)
通信有并行通信和串行通信两种方式。在多微机系统以及现代测控系统中信息的交换多采用串行通信方式。

并行通信(通常是将数据字节的各位用多条数据线同时进行传送 )
比如这样说,一个字节有八位,我有八根线,一根传一位,八位同时传递
优缺点:
并行通信控制简单、传输速度快;由于传输线较多,长距离传送时成本高且接收方的各位同时接收存在困难。

串行通信(一个字节八位,一位一位传送)
串行通信是将数据字节分成一位一位的形式在
一条传输线上逐个地传送。

并行通信这里不多谈
我们下面谈谈串行通信,串行通信分异步通信与同步通信

异步通信与同步通信:
异步通信:
异步通信是指通信的发送与接收设备使用各自的时钟控制数据的发送和接收过程。
为使双方的收发协调,要求发送和接收设备的时钟尽可能一致。

异步通信是以字符(构成的帧)为单位进行传输,字符与字符之间的间隙(时间间隔)是任意的,
但每个字符中的各位是以固定的时间传送的,即字符之间不一定有“位间隔”的整数倍的关系,
但同一字符内的各位之间的距离均为“位间隔”的整数倍。

异步通信的特点:不要求收发双方时钟的严格一致,实现容易,设备开销较小,但每个字符要附加2~3位用于起止位,
各帧之间还有间隔,因此传输效率不高。

同步通信:
同步通信时要建立发送方时钟对接收方时钟的直接控制,使双方达到完全同步。
此时,传输数据的位之间的距离均为“位间隔”的整数倍,同时传送的字符间不留间隙,
即保持位同步关系,也保持字符同步关系。发送方对接收方的同步可以通过两种方法实现。

单工是指数据传输仅能沿一个方向,不能实现反向传输。
半双工是指数据传输可以沿两个方向,但需要分时进行。
全双工是指数据可以同时进行双向传输。

一个字符帧由一个起始位,八个数据位,一个停止位组成,八位数据位最后一个为校验位

比特率是每秒钟传输二进制代码的位数,单位是:位/秒(bps)。如每秒钟传送240个字符,
而每个字符格式包含10位(1个起始位、1个停止位、8个数据位),这时的比特率为:
10位×240个/秒 = 2400 bps

RXD(接收数据)
TXD(发送数据)

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

控制寄存器SCON:
SM0 SM1 SM2 REN TB8 RB8 TI RI
SM0和SM1控制工作方式
我们一般选择方式一,即01

我们用SM2实现多机通信
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,则禁止接收。

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

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

PCON控制波特率是否倍增(在方式一,方式二,方式三,波特率与此有关)
PCON中最高位有一个SMOD位,为一时波特率提高一倍
为零时不变

在串行通信中,收发双方对发送或接收数据的速率要有约定。
通过软件可对单片机串行口编程为四种工作方式,其中方式0和
方式2的波特率是固定的,而方式1和方式3的波特率是可变的

下面就是波特率的控制,有定时器来控制,选择方式二,即八位自动重装载

具体操作
串行口工作之前,应对其进行初始化,主要是设置产
生波特率的定时器1、串行口控制和中断控制。具体
步骤如下:
确定T1的工作方式(编程TMOD寄存器);
计算T1的初值,装载TH1、TL1;
启动T1(编程TCON中的TR1位);
确定串行口控制(编程SCON寄存器);
串行口在中断方式工作时,要进行中断设置(编程IE、
IP寄存器)。
然后再中断服务函数中操作

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!