理论教育 串行通信接口的应用和原理

串行通信接口的应用和原理

时间:2023-06-25 理论教育 版权反馈
【摘要】:所以,可以根据自己的需要选择相应的单片机;在有些场合如果单片机没有需要的串行通信接口,则可以通过单片机的I/O口进行模拟。在MCS-51和AT89系列单片机中使用的是全双工UART。同步传输方式是指通信双方同时使用两条通信线。SCON寄存器的8个状态位规定了MCS-51串行通信的方式和功能,

串行通信接口的应用和原理

MCS-51单片机有一个全双工(具有同时收发数据的功能)的异步串行通信接口,具备两个功能:一个是可作为同步移位寄存器使用,进行串行口与并行口转换;另一个是用来实现单片机与单片机或单片机与PC之间的异步串行通信。

4.3.4.1 串行通信方式简介

在单片机内,目前使用的串行通信接口的种类很多,如UART、I2C、SPI、USB等。不同型号的单片机使用的串行通信接口不同,如AT89系列单片机内使用的是UART;C8051F系列单片机内有的使用UART和SPI、有的使用UART和USB等。所以,可以根据自己的需要选择相应的单片机;在有些场合如果单片机没有需要的串行通信接口,则可以通过单片机的I/O口进行模拟。

在MCS-51和AT89系列单片机中使用的是全双工UART(异步串行通信接口)。UART有两种工作状态:同步串行通信状态和异步串行通信状态。同步串行通信虽然传输速率较高,但由于其硬件电路复杂,且无论是在发送状态还是在接收状态都要同时使用两条信号线,所以在单片机上进行同步通信只能使用单工方式或半双工方式,很不方便。单片机上的串行口在同步方式下除了可以用于通信外,还可以用于I/O口的扩展。当与74LS164联合使用时,可以扩展成并行输出口;当与74LS165联合使用时,可以扩展成并行输入口等。而异步通信技术则相对同步通信较简单,虽然传输速率不高(这里指单片机的串行口),但应用十分广泛,并且方便与其他通信标准进行衔接。

4.3.4.2 51单片机的串行通信

(1)串口接口的数据传输方式。

1)异步传输方式。

数据异步传输方式就是指通信双方事先约好需要传输数据的格式、传输的速度。通过一条线路实现从一方到达另一方的数据传送;如果需要数据的双向传输,可以再增加一条通信线路。

数据传输格式:异步传输时,数据是以字符为单位进行数据传送的。每个字符由4部分组成:起始位、数据位、奇偶校验位和停止位。如图4-20所示。

图4-20 数据异步传输格式

起始位为“0”,占用1位,用来表示一个字符数据的开始;其后是数据位,可以是5位、6位、7位或8位,传输时待发送数据的低位在前,高位在后;接下来是奇偶校验位(即可编程位,单个单片机通信时,它为奇偶标志位;进行多机通信时,它为地址/数据标志位);最后是停止位,用逻辑“1”表示一个字符信息的结束,可以是1位、1位半或两位。

数据异步传输的特点:数据在线路上的传送不连续,传送时字符间隔不固定。各个字符可以是连续传送,也可以是间断传送,这完全取决于通信协议或双方的约定。间断传送时,在停止位后,线路上自动保持为“1”,表示通信总线“空闲”。

在使用数据异步传输时,数据传输的效率并不是很高。当采用1位起始位、8位数据位、1位奇偶位和1位停止位时,有效数据值占到了一次1个字符的73%。如果数据位减少,则传输的效率更低。但这种方式也有其优点:硬件电路简单,方便实现各种通信标准的变换。

2)同步传输方式。

同步传输方式是指通信双方同时使用两条通信线。其中一条用于产生时钟,并且要求发送和接收的双方必须保持完全同步(一般情况下,时钟信号由发送端提供),另一条用于传送数据。如果需要同时双向数据传输,则需要再添加两条通信线,但是MCS-51系列单片机不支持同时的双向数据同步传输,所以只能进行分时复用。

数据格式:同步传输时,数据是以数据块的形式进行传输的。每个数据块包括同步字符、数据和校验字符,如图4-21所示。

数据传输时,由于不像异步传输那样附加了起始位和停止位,所以数据的传输效率较高;一旦发现接收到的数据出错,所有的数据都需要重新传输,效率也会相应地降低,而且当大量数据进行一次性传输时,错误的概率较高。

图4-21 数据同步传输格式

在近距离的数据通信时,同步传输方式可以使用两条通信线。在远距离通信时,可以通过调制解调从数据流中提取同步信号,用锁相的技术使接收方得到与发送方相同的时钟信号。另外,时钟信号线与数据线分离可以实现高速率、大容量的数据通信。

综上所述,数据异步传输方式较为简单,应用广泛;同步传输方式速率高,但硬件电路复杂,所以较少使用。

(2)串行接口寄存器。

单片机的串行接口主要受串行接口控制寄存器SCON的控制,另外也和电源控制寄存器PCON有关。

1)串口控制寄存器SCON。

SCON寄存器的8个状态位规定了MCS-51串行通信的方式和功能,其方式和功能由寄存器SCON来进行设置,可选择通信模式、允许接收、检查状态位。SCON的结构如表4-18所列。SCON各个位的定义和功能如表4-19所示。

表4-18 SCON寄存器结构

波特率发生器的时钟来源有两种:一是来自系统的时钟分频(波特率不可变),二是由定时器T1提供(波特率可变)。

2)电源控制寄存器PCON。

对PCON来说只有最高位SMOD对串口通信产生影响,那就是如果SMOD=0,波特率为原值;SMOD=1,波特率提高一倍。该寄存器不能进行位寻址,所以只能进行整字节操作。

PCON的结构见表4-20。

(3)串行口的工作方式

UART有一个接收数据缓冲区,当上一个字节还没被处理时,下一个数据仍然可以被缓冲区接收进来;但如果接收完这个字节而上个字节还没处理,则上个字节被覆盖。因此,软件必须在此之前处理数据。当连续发送字节时也是如此。

8051支持10位和11位数据方式,11位数据方式用来进行多机通信,并支持高速8位移位寄存器方式。方式1和方式3中波特率可变。

1)UART方式0。

方式0时,UART作为一个8位的移位寄存器使用,波特率为Fosc/12。数据由RXD从低位开始收发,TXD用来发送同步移位脉冲。因此,方式0不支持全双工。这种方式可用来和某些具有8位串行口的EEPROM器件通信。

表4-19 SCON各个位的定义和功能说明

表4-20 PCON寄存器结构

当向SBUF写入字节时,开始发送数据。数据发送完毕时,TI位置位。置位REN时,将开始接收数据;接收完8位数据时,RI位将置位。方式0的输出时序图如图4-22所示。输入时序图如图4-23所示。

图4-22 UART方式0输出

图4-23 UART方式0输入

2)UART方式1。

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

图4-24 传送一帧数据的格式

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

图4-25 UART方式1输出

(www.daowen.com)

图4-26 UART方式1输入

如果用定时器1来产生波特率,则应通过下式来计算装入TH1的初值:

TH1=256-(K×Fosc)/(384×BoudRate)

K=1(SMOD=0);K=2(SMOD=1)

其中,Fosc为单片机的晶振频率,BandRate为波特率。重装值要小于256,非整数的重装值必须和下一个整数非常接近,这点需要开发者把握。

举例:如果使用9.216 MHz晶振,想产生9600的波特率。设K=1,分子为9216000,分母为3686400,相除结果为2.5,不是整数。设K=2,分子为18432000,分母为3686400,相除结果为5,可得TH1=251或0FBH。

3)UART方式2和方式3。

方式2或方式3为11位数据的异步通信口。TXD为数据发送引脚,RXD为数据接收引脚。传送一帧数据的格式如图4-27所示。

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

方式2、3的输出时序如图4-28所示。发送开始时,先把起始位0输出到TXD引脚,然后发送移位寄存器的输出位(D0)到TXD引脚。每一个移位脉冲都使输出移位寄存器的各位右移一位,并由TXD引脚输出。

第一次移位时,停止位“1”移入输出移位寄存器的第9位上,以后每次移位左边都移入0。当停止位移至输出位时,左边其余位全为0,检测电路检测到这一条件时,控制电路进行最后一次移位并置TI=1,向CPU请求中断。

图4-27 传送一帧数据的格式

图4-28 UART方式2、3输出

方式2、3的输入时序图如图4-29所示。接收时,数据从右边移入输入移位寄存器,在起始位0移到最左边时,控制电路进行最后一次移位。当RI=0且SM2=0(或接收到的第9位数据为1)时,接收到的数据装入接收缓冲器SBUF和RB8(接收数据的第9位),置RI=1,向CPU请求中断。如果条件不满足,则数据丢失且不置位R1,继续搜索RXD引脚的负跳变。

图4-29 UART方式2、3输入

(4)波特率的计算。

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

串行口的4种工作方式对应3种波特率。由于输入移位时钟的来源不同,所以各种方式的波特率计算公式也不相同。

方式0的波特率=Fosc/12

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

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

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

当T1作为波特率发生器时,最典型的用法是使T1工作在自动再装入的8位定时器方式(即方式2,且TCON的TR1=1,以启动定时器)。这时溢出率取决于TH1中的计数值。

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

在单片机的应用中,常用的晶振频率为12 MHz和11.0592 MHz。所以,选用的波特率也相对固定。常用的串行口波特率以及各参数的关系如表4-21所列。串行口工作之前应对串口通信进行初始化,主要是设置产生波特率的定时器1、串行口控制和中断控制。具体步骤如下:

①确定T1的工作方式(编程TMOD寄存器)。

②计算T1的初值,装载TH1、TL1。

③启动T1(编程TCON中的TR1位)。

④确定串行口控制(编程SCON寄存器)。

串行口在中断方式工作时,要进行中断设置(编程IE、IP寄存器)。常用串口波特率与定时初值见表4-21。

表4-21 常用串口波特率与定时初值对应表

4.3.4.3 RS232标准及应用

目前RS232是PC与通信工业中应用最广泛的一种串行接口,其中EIA(Electronic Industry Association)代表美国电子工业协会,RS代表推荐标准,232是标识号。RS232定义为一种在低速率串行通信中增加通信距离的单端标准。一个完整的RS232接口有22根线,采用标准的25芯插头座(DB25)。除此之外,目前广泛应用的还有一种9芯的RS232接口(DB9)。它们的外观都是D形的,对接的两个接口又分为针式和孔式两种,如图4-30所示。DB9的引脚定义如表4-22所列。

RS232采取不平等传输方式,即单端通信,是指发送和接收双方的数据信号都是相对于信号地的。由于RS232电平采用负逻辑(即逻辑“1”:-3~-15 V,逻辑“0”:+3~+15 V),而单片机使用的CMOS电平(即逻辑“1”:3.5~5 V,逻辑“0”:0~0.8 V),所以在单片机与RS232进行连接通信之前,需要在单片机的串行接口上连接电平转换电路,将与TTL兼容的CMOS电平转换成RS232的标准电平,转换后的典型值为逻辑“1”:-10 V;逻辑“0”:+10 V。RS232是为点对点(即只用一对收发设备)通信而设计的,其驱动器负载为3~7 kΩ。

图4-30 DB25与DB9的孔式外形图

常用的RS232电平转换接口芯片为MAX232。MAX232芯片是MAXIM公司生产的、包含两路接收器和驱动器的IC芯片,内部有一个电源电压变换器,可以把+5V电源电压变换成RS232输出电平所需的+10 V电压。所以,采用此芯片接口的串行通信系统只需单一的+5V电源就可以了。其引脚图和外部连接电路图如图4-31所示。

表4-22 DB9引脚定义

图4-31 MAX232引脚及标准外部连接电路图

RS232串行通信信号引脚分为两类:一类为基本的数据传送信号引脚,另一类是用于MODEM控制的引脚信号。在无MODEM的电路中,可以采用最简单的连接方式,即只有使用3个引脚信号:TXD、RXD和GND。使用这种方式的引脚连接如图4-32所示。

图4-32 引脚连接

4.3.4.4 串口通信的应用

例4-4 串口波特率为9600,通过串口发送接收数据。需要串口调试助手来辅助调试。

代码如下:

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈