串口UART

今天来聊一下单片机中比较重要的一个概念——串口(UART)。随着计算机网络的不断发展。单片机的通信功能也越来越重要了。单片机通信其实就是指单片机和单片机之间,单片机和计算机之间的信息交换。

在信息通信中有两种通信方式,一种是并行通信,一种是串行通信。在单片机中,信息交互用的比较多的是串行通信。

1.串行和并行通信方式介绍

1.1并行方式

数据的各位用多条数据线同时发送或同时接收。

并行通信特点:传送速度快,但因需要多根传输线,曾经在近距离、高速率通信中使用。

1.2串行方式

串行方式:是将数据排成一串,分成一位一位的形式在一条传输线上逐个地传送。

串行通信的特点:传输线少,长距离传送时成本低,且可以利用电话线、网线等设备传输,但数据的传送控制比并行通信复杂。

1.3串行通信的两种方式

异步通信:ASYNC (asynchronous data communication)

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

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

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

同步通信:SYNC(synchronous data communication)

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

1.4串行通信的线路传输方式

1、单工 单工是指数据传输仅能沿一个方向,不能实现反向传输。

2、半双工 半双工是指数据传输可以沿两个方向,但需要分时进行

3、全双工 全双工是指数据可以同时进行双向传输

1.5串行通信数据校验方式

1、奇偶校验(最常用)

在发送数据时,数据位尾随的1位为奇偶校验位(1或0)。 奇校验时,数据中“1”的个数与校验位“1”的个数之和应为奇数;偶校验时,数据中“1”的个数与校验位“1”的个数之和应为偶数。接收字符时,对“1”的个数进行校验,若发现不一致,则说明传输数据过程中出现了差错。

2、代码和校验

就是发送方发送完数据块后,再产生一个字节的校验字符(校验和)方在数据快的末尾,再接收方接到数据的同时对数据库(除校验字符)求和,将所得结果和发上方的校验和进行比较

3、循环冗余校验

这个是通过数学计算实现有效信息和校验位之间的循环检验,纠错能力最强,广泛用于同步通信。

2.RS-232电平,TTL电平,RS-485电平

2.1RS-232

信号的调制与解调    

利用调制器(Modulator)把数字信号转换成模拟信号,然后送到通信线路上去,再由解调器(Demodulator)把从通信线路上收到的模拟信号转换成数字信号。由于通信是双向的,调制器和解调器合并在一个装置中,这就是调制解调器MODEM(猫)。

RS-232C接口      

 RS-232C是EIA(美国电子工业协会)1969年修订的标准。RS-232C定义了数据终端设备(DTE)与数据通信设备(DCE)之间的物理接口标准。 1、机械特性 RS-232C接口规定使用25针连接器,连接器的尺寸及每个插针的排列位置都有明确的定义,后来简化成了9针连接器。(阳头)

图中规定的RX,TX,GND这三跟线和我们规定的串口通信是保持一致的

功能特性

2.2过程特性

 过程特性规定了信号之间的时序关系,以便正确地接收和发送数据 

2.

2.3RS-232C电平与TTL电平转换驱动电路

2.4采用RS232C接口存在的问题

1、传输距离短,传输速率低    

 RS-232C总线标准受电容允许值的约束,使用时传输距离一般不要超过15米(线路条件好时也不超过几十米),最高传送速率有限(20k,也就是19200的波特率)

2、有电平偏移    

 RS-232C总线标准要求收发双方共地。通信距离较大时,收发双方的地电位差别较大,在信号地上将有比较大的地电流并产生压降。

3、抗干扰能力差      

RS-232C在电平转换时采用单端输入输出,在传输过程中当干扰和噪声混在正常的信号中。为了提高信噪比,RS-232C总线标准不得不采用比较大的电压摆幅。

2.5RS-232通讯

前面都是对于RS-232的一些介绍,接下来我们来正式介绍线电平是如何转换的。其实RS-232电平和TTL电平的区别就是,他们的高低电压不同。

对于单片机串口通信来说,他主要采用的就是TTL电平,他输出的TTL逻辑电平范围为高低电平也就是说,在2.4V和5V之间我们认为是高电平;0V-0.4V之间的电压我们都认为是低电平。

我们一般认为串口通信的高电平是5V,低电平是0V.这就造成了他的抗干扰能力很弱,如果在这个时候突然来了一个静电,就很容易把某一个低电平变为高电平。这就是串口通信距离传输比较短的原因。

一般都是在一块电路板上的两个芯片之间通讯,或者芯片和电脑之间的通讯(距离一般也就是1M左右)

所以为了提升这个传输距离,于是EIA(美国电子工业协会)制定了 RS-232C(推荐)标准。前面我已经详细介绍过了。

2.5单片机如何进行RS232通讯

其实非常简单,我们只需要在原来串口通讯的基础上加一个电平转换芯片(例如MAX232),这样他就可以把TTL电平转换为RS232电平

比如我们给单片机发送一个5V,通过MAX232芯片,我们可以得到一个-12V的232电平;发送一个0V那么就可以得到一个正12V电平;如果接收到-12V的232电平那么就可以通过芯片得到一个5V的TTL电平;如果是12V电平,就转换为0V;也就是说通过芯片后,电平的大小范围发生了变化。所以可以知道,RS232串口通讯只是改变了电平的大小,但是仍然还是0和1的通讯方式

通过改变原本TTL电平大小,就可以大大的增加了抗干扰能力了。

2.6RS485通讯

为了满足更严苛的工业环境和更远的传输标准,于是人们就有制定了RS485标准。和RS232类似,其实485通信就是在单片机通讯之间加了一个485转换芯片,485转换芯片可以把输出的串口信号转换为差分信号,差分信号只需要两根双绞线,不需要地线。比如当信号A大于信号B是代表逻辑0;而信号A小于信号B时代表逻辑1。

485转换芯片既可以把串口信号转换为差分信号,也可以从差分信号转换为串口信号。(和CAN通信类似)

他最大的特点就是抗干扰能力强,因为他用的是两根信号的差值来表示逻辑0和1的,而且他的两根线是双绞线,这样即使受到干扰也是两根线同时受到干扰了。所以最后的电压差值也基本保持不变。

所以RS485的传输距离可以达到1500m左右。传输频率也更高可以达到50M。

RS232和RS485之间的对比

与RS232不同是,他是采用半双工通讯方式,也就是说他要不是在发送数据要不就是在进行接收数据。不能同时进行。这样的好处就是它可以进行一主多从的组网通讯

而串口通讯和RS232之间只能进行简单的点对对通讯。

下图是三中通信的波形图。

3.串口通讯

3.1串口通讯

UART:Universal Asynchronous Receiver Transmitter,通用异步串行通信接口,为全双工通信,即在发送数据的同时也能够接收数据,因此,UART至少需要两根数据线用于通信双方进行数据双向同时传输,最简单的UART接口由TxD、RxD、GND共3根线组成。其中,TxD用于发送数据,RxD用于接收数据,GND为信号地线,通过交叉连接实现两个芯片间的串口通信。

3.2数据帧格式

异步串行通信的数据帧由起始位、数据位、校验位、停止位4部分组成。

起始位:位于数据帧开头,占1位,始终为低电平,用于向接收设备表示发送端开始发送1帧数据。

数据位:要传输的数据信息,可以是字符或数据,一般为5~8位,由低位到高位依次传送。

校验位:位于数据位之后,占1位,用于发送数据的校验,或传送多机串行通信的联络信息。

停止位:位于数据位末尾,占1位,始终为高电平,用于向接收端表示1帧数据已发送完毕。

3.3 51单片机串口结构

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

3.4 接收和发送工作原理

接收控制器

在输入移位寄存器和定时器T1的配合下,使来自RXD引脚的串行数据转为并行数据,并自动过滤掉起始位、可编程位、停止位。 这一过程结束后自动使接收中断请求标志位RI置1,表明接收的数据已存入SBUF收,即SBUF收为满 。

发送控制器

在门电路和定时器T1的配合下,将SBUF发中的并行数据转为串行数据,并自动添加起始位、可编程位、停止位。 这一过程结束后自动使发送中断请求标志位TI置1,表明已将SBUF发中的数据输出到TXD引脚,即SBUF发为空。

3.5串行口相关寄存器

接下来我们对于相关寄存器进行接收

SCON寄存器

SCON:Serial Control Register,串行控制寄存器。主要用于设置串行通信的工作方式、接收和发送控制以及串口的状态标志等,地址:98H。通过芯片手册我们可以知道

工作方式:

电源控制寄存器PCON

PCON为89C51系列单片机的电源控制寄存器,除用于设置单片机的工作模式:掉电模式、正常模式等,该寄存器中的SMOD位用于串口设置相关的工作,地址:87H。

IE和IP两种寄存器已经在中断那一章节介绍过了,这里就不过多介绍了。

3.6四种工作方式

一、方式0 方式0时,串行口为同步移位寄存器的输入输出方式。主要用于扩展并行输入或输出口。数据由RXD(P3.0)引脚输入或输出,同步移位脉冲由TXD(P3.1)引脚输出。发送和接收均为8位数据,低位在先,高位在后。波特率固定为fosc/12。 

                                                                方式0输出

     

                                                                  方式0输入

二、方式1(最为常用)     

方式1是10位数据的异步通信口。TXD为数据发送引脚,RXD为数据接收引脚,传送一帧数据的格式如图所示。其中1位起始位,8位数据位,1位停止位。  

                                                                  方式1输出

                                                                方式1输入

用软件置REN为1时,接收器以所选择波特率的16倍速率采样RXD引脚电平,检测到RXD引脚输入电平发生负跳变时,则说明起始位有效,将其移入输入移位寄存器,并开始接收这一帧信息的其余位。接收过程中,数据从输入移位寄存器右边移入,起始位移至输入移位寄存器最左边时,控制电路进行最后一次移位。当RI=0,且SM2=0(或接收到的停止位为1)时,将接收到的9位数据的前8位数据装入接收SBUF,第9位(停止位)进入RB8,并置RI=1,向CPU请求中断。

三、方式2和方式3      

方式2或方式3时为11位数据的异步通信口。TXD为数据发送引脚,RXD为数据接收引脚 。

方式2和方式3时起始位1位,数据9位(含1位附加的第9位,发送时为SCON中的TB8,接收时为RB8),停止位1位,一帧数据为11位。方式2的波特率固定为晶振频率的1/64或1/32,方式3的波特率由定时器T1的溢出率决定。 

3.7波特率

串行通信的传输速率---波特率 串行通信中,数据传送速率有两种名称,即比特率或波特率。 表示每秒传送的二进制数据的位数,单位为bps,即bit per second。 如每秒钟传送240个字符,而每个字符格式包含10位(1个起始位、1个停止位、8个数据位),这时的波特率为:10位×240个/秒 = 2400 bps

国际推荐波特率:600、1200、2400、4800、9600、19200、38400、115200波特等。串行通信的收发双方必须采用相同的波特率。

传输距离与传输速率的关系    

串行接口或终端直接传送串行信息位流的最大距离与传输速率及传输线的电气特性有关,传输距离随传输速率的增加而减小。当比特率超过1000 bps 时,最大传输距离迅速下降,如9600 bps 时最大距离下降到只有76m(约250英尺)。 经验距离供参考: TTL电平:1.5米之内 RS232电平:15米之内 长距离传输可以使用RS485方式,可达1000米。

波特率的计算

在串行通信中,收发双方对发送或接收数据的速率要有约定。通过软件可对单片机串行口编程为四种工作方式; 方式0和方式2的波特率是固定的; 方式1和方式3的波特率是可变的,由定时器T1的溢出率来决定。 串行口的四种工作方式对应输入的移位时钟的来源不同,所以,各种方式的波特率计算公式有三种波特率。

方式0的波特率 =  fosc/12

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

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

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

通信时钟波特率原理

T1溢出脉冲有两种分频路径:16分频或32分频; SMOD是决定分频路径的逻辑开关。

SMOD是决定分频路径的逻辑开关。

波特率取决于T1的定时参数(a, n, fosc)和SMOD参数。(a是初值数,n是字符串位数,fosc是晶振频率)

当T1作为波特率发生器时,最典型的用法是使T1工作在自动再装入的8位定时器方式(即方式2,且TCON的TR1=1,以启动定时器)。 这时溢出率取决于TH1中的计数值。          T1 溢出率 = fosc /{12×[256-(TH1)]}   在单片机的应用中,常用的晶振频率为:12MHz和11.0592MHz。所以,选用的波特率也相对固定。常用的串行口波特率以及各参数的关系如表所示。

  • 29
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值