1第七章UART串行接口串行通信是CPU与外界交换信息的一种基本通信方式。为了实现串行通信,绝大多数单片机都配置了UART串行接口。27.1串行通信概述计算机与外界的信息交换称为通信。基本的通信方式有两种。•并行通信(parallelcommunication):所传送数据的各位同时发送或接收。•串行通信(serialcommunication):所传送数据的各位按顺序一位一位地发送或接收。3在并行通信中,一个并行数据占多少位二进制数,就要多少根传输线,这种方式的特点是通信速度快,但传输线多,价格较贵,适合近距离传输。串行通信仅需1~2根传输线,故在长距离传输数据时比较经济,但由于它每次只能传送1位,所以传送速度较慢。4图7.1基本通信方式图示57.1.1同步通信和异步通信方式串行通信分同步和异步两种方式。61.异步通信ASYNC在异步通信中数据或字符是逐帧(frame)传送的。帧定义为一个字符的完整的通信格式,通常也称为帧格式。最常见的帧格式一般是先用一个起始位“0”表示字符的开始;然后是5~8位数据,规定低位在前,高位在后;其后是奇偶校验位;最后是停止位,用以表示字符的结束,停止位可以是1位、1.5位、2位,不同的计算机规定有所不同。从起始位开始到停止位结束就构成完整的1帧。7•起始位——通信线上没有数据传送时,为高电平(逻辑1);当要发送数据时,首先发1个低电平信号(逻辑0),此信号称为“起始位”,表示开始传输1帧数据。•数据位——起始位之后的位即数据位。数据位可以是5、6、7或8位(不同计算机的规定不同),上图的数据位为8位。一般从最低位开始传送,最高位在最后。8•奇偶校验位——数据位之后的位为奇偶校验位(有的方式具有)。此位可用于判别字符传送的正确性,其有3种可能的选择,即奇、偶、无校验,用户可根据需要选择(在有的格式中,该位可省略)。在80C51单片机中,此位还可以用来确定该帧字符信息的性质(地址或数据)。•停止位——校验位后为停止位,用于表示1帧结束,用高电平(逻辑1)表示。停止位可以是1、1.5或2位,不同计算机的规定有所不同。9•异步通信的主要特点如下:进行串行通信的单片机的时钟相互独立;其时钟频率可以不相同;在通信时不要求有同步时钟信号。由于异步通信是逐帧进行传输的,各位之间的时间间隔应该相同,所以必须保证2个单片机之间有相同的传送波特率。如果传送波特率不同,则时间间隔不同;当误差超过5%时,就不能正常进行通信。由于信息传输可以是随时不间断地进行的,因而帧与帧之间的时间间隔可以是不固定的,间隙处为高电平。10由于异步通信每传送一帧有固定格式,通信双方只需按约定的帧格式来发送和接收数据,所以硬件结构比同步通信方式简单。此外,它还能利用校验位检测错误,所以这种通信方式应用较广泛。在单片机中主要是采用异步通信方式。112.同步通信SYNC在同步通信中,数据或字符开始处是用一同步字符来指示(一般约定为l~2个字符),以实现发送端和接收端同步,一旦检测到约定同步字符,下面就连续、顺序地发送和接收数据。12由于同步通信数据块传送时去掉了每个数字都必须具有的字符开始和结束的标志,且它一次可以发送一个数据段(多个数据),因此,其速度高于异步通信;但这种方式要求接收和发送时钟严格保持同步,在通信时通常要求有同步时钟信号,对硬件结构要求较高。由于这种方式易于进行串行外围扩展,所以目前很多型号的单片机都增加了串行同步通信接口,如目前已得到广泛应用的I2C串行总线和SPI串行接口等。137.1.2串行通信的数据传送速率传送速率是指数据传送的速度。用b/s或bps(比特/秒)表示,称为比特率。在二进制的情况下,比特率与波特率数值相等,因而在单片机的串行通信中,常称为波特率。假如数据传送的速率为120个字符每秒,每个字符由1个起始位、8个数据位和1个停止位组成,则其传送波特率为:10b×120/s=1200b/s=1200波特每一位的传送时间即为波特率的倒数:mssbbtd833.012001114异步通信的数据传送速率一般为50b/s~100kb/s,常用于计算机到CRT终端,以及双机或多机之间的通信等。157.1.3串行通信的方式在串行通信中,数据是在两机之间传送的。按照数据传送方向,串行通信可分为单工(Simplex)制式、半双工(halfduplex)制式和全双工(fullduplex)制式。16图7.2串行通信方式示意图•(1)单工制式在单工制式下,数据在甲机和乙机之间只允许单方向传送。两机之间只需1条数据线。17•(2)半双工制式在半双工制式下,数据在甲机和乙机之间允许双方向传送,但它们之间只有一个通信回路,接收和发送不能同时进行,只能分时发送和接收(即甲机发送,乙机接收,或者乙机发送,甲机接收),因而两机之间只需1条数据线。18•(3)全双工制式在全双工制式下,甲、乙两机之间数据的发送和接收可以同时进行,称为“全双工传送”。全双工形式的串行通信必须使用2条数据线。•不管哪种形式的串行通信,在两机之间均应有公共地线。19*信号的调制与解调当异步通信的距离在15m之内时,计算机之间可以直接进行通信。而当传输距离较远时,通常是用电话线传送。由于电话线频带不够宽,再加上远距离传输时信号不可避免地衰减,因而使信号发生明显的畸变。在发送时要用调制器(modulator)把数字信号转换为模拟信号,并加以放大再传送,这个过程叫做调制。在接收时,再用解调器(demodulator)检测此模拟信号,并把它转换成数字信号再送入计算机接口,这个过程即解调。207.1.4通信协议通信协议是指在计算机之间进行数据传输时的一些约定,包括通信方式、波特率、命令码的约定等。为保证计算机之间能准确、可靠地通信,相互之间必须遵循统一的通信协议。在通信之前一定要先设置好通信协议。217.280C51串行口简介80C51的串行口是一个可编程的全双工串行通信接口,通过软件编程它可以作通用异步接收和发送器UART(UniversalAsynchronousReceiver/Transmitter)用,也可作同步移位寄存器用。其帧格式可有8位、10位和11位,并能设置各种波特率,使用灵活方便。227.2.1串行口结构与工作原理80C51串行口主要由接收与发送缓冲寄存器SBUF、输入移位寄存器以及串行控制寄存器SCON等组成。波特率发生器可以利用定时器T1或T2控制发送和接收的速率。SCON用于存放串行口的控制和状态信息;发送数据缓冲寄存器SBUF用于存放准备发送出去的数据;接收数据缓冲寄存器SBUF用于接收由外部输入到输入移位寄存器中的数据。80C51串行口正是通过对上述专用寄存器的设置、检测与读取来管理串行通信的。23图7.3串行口结构框图24在进行串行通信时,外界数据通过引脚RXD(P3.0)输入。输入数据首先逐位进入输入移位寄存器,由串行数据转换为并行数据,然后再送入接收寄存器。在接收寄存器中采用了双缓冲结构,以避免在接收到第2帧数据前,CPU未及时响应接收寄存器前一帧的中断请求,没把前一帧数据读走,而造成2帧数据重叠的错误。在发送时,串行数据通过引脚TXD(P3.1)输出。由于CPU是主动的,因此不会产生写重叠问题,一般不需要双缓冲器结构。要发送的数据通过发送控制器控制逻辑门电路逐位输出。257.2.2串行口寄存器与串行口工作有关的寄存器共有6个,分别是串行口控制寄存器SCON、接收与发送缓冲寄存器SBUF、电源控制寄存器PCON、中断允许控制寄存器IE、中断优先级寄存器IP。261.串行口控制寄存器SCON串行口控制寄存器SCON用于串行通信的方式选择、接收和发送控制,并可反映串行口的工作状态。SCON9FH9EH9DH9CH9BH9AH99H98H(98H)SM0SM1SM2RENTB8RB8TIRI27•SCON.7和SCON.6位SM0和SM1——串行方式选择位表7.1串行口工作方式选择SM0SM1工作方式功能描述波特率00010011方式0方式1方式2方式38位同步移位寄存器10位UART11位UART11位UARTfosc/12可变fosc/64和fosc/32可变28•SCON.5位SM2——多机通信控制位。在方式2和方式3中,SM2主要用于进行多机通信控制。当串行口以方式2或方式3接收时,如果SM2=1,允许多机通信,且接收到第9位RB8为0时,则RI不置1不接收主机发来的数据;如果SM2=1,且RB8为1,则RI置1,产生中断请求,将接收到的8位数据送入SBUF。当SM2=0时,不论RB8为0还是1,都将收到的8位数据送入SBUF,并产生中断。在方式1中,当处于接收状态时,若SM2=1,则只有接收到有效的停止位时,RI才置1。在方式0中,SM2应置0。29•SCON.4位REN——允许串行接收位。REN=1时,允许接收;REN=O时,禁止接收。由软件置位或清除。30•SCON.3位TB8——发送数据的第9位(D8)。在方式2或方式3中,根据需要由软件置位或复位。双机通信时,它可约定作奇偶校验位;在多机通信中,可作为区别地址帧或数据帧的标识位。一般由指令设定地址帧时,设TB8为1;而设定数据帧时,设TB8为0。方式0和方式1中没用该位。31•SCON.2位RB8——接收数据的第9位(D8)。在方式2或方式3中,RB8的状态与TB8相呼应,(如可以是约定的奇偶校验位,也可以是约定的地址/数据标识位)。例如,当SM2=1时,如果RB8为0,则说明收到的是数据帧。32•SCON.1位TI——发送中断标志位。在方式0中,发送完8位数据后,由硬件置位;在其他方式中,在发送停止位之初由硬件置位。TI=1时,可申请中断,也可供软件查询用。在任何方式中,都必须由软件来清除TI。•SCON.0位RI——接收中断标志位。在方式0中,接收完8位数据后,由硬件置位;在其他方式中,在接收停止位的中间,由硬件置位。RI=1时,可申请中断,也可供软件查询用。在任何方式中,都必须由软件清除RI。33SCON的低2位与中断有关。SCON的地址为98H,可以位寻址。复位时,SCON的所有位均清0。342.数据缓冲寄存器SBUF数据缓冲寄存器SBUF实际上是2个寄存器:发送数据缓冲寄存器和接收数据缓冲寄存器。接收与发送缓冲寄存器SBUF采用同一个地址代码99H,其寄存器名亦同样为SBUF。CPU通过不同的操作命令,区别这2个寄存器,所以不会因为地址代码相同而产生错误。当CPU发出写SBUF命令时,即向发送缓冲寄存器中装载新的信息,同时启动数据串行发送;当CPU发出读SBUF命令时,即读接收缓冲寄存器的内容。353.电源控制寄存器PCON电源控制寄存器PCON主要用于电源控制,PCON的最高位SMOD是串行口的波特率倍增位:当SMOD为1时,波特率加倍;当SMOD为O时,波特率不变。PCOND7D6D5D4D3D2D1D0(87H)SMOD———GF1GF0PDIDL364.中断允许控制寄存器IE•中断允许控制寄存器IE用于控制与管理单片机的中断系统。IE的ES位用于控制串行口的中断:当ES=O时,禁止串行口中断;当ES=1时,允许串行口中断。375.中断优先级寄存器IP中断优先级寄存器IP用于管理单片机中各中断源中断优先级。IP的PS位用于设置串行口中断的优先级:当PS=0时,串行口中断为低优先级;当PS=1时,串行口中断为高优先级。387.2.380C51的帧格式80C51串行口通过编程可设置四种工作方式及三种帧格式。39•方式0以8位数据为一帧,不设起始位和停止位,先发送或接收最低位。•方式1以10位为一帧传输,设有1个起始位“0”、8个数据位和1个停止位“1”。40•方式2和3以11位为一帧传输,设有1个起始位“0”、8个数据位、1个可编程位(第9数据位)D8和1个停止位“1”。可编程位D8由软件置“1”或清“0”,该位可作检验位,也可作它用。417.2.4波特率的设置在串行通信前,首先要设置收/发双方对发送或接收的数据传送速率,即波特率。通过软件对