1第7讲MCS-51单片机串行口及应用1.串行通信的基本概念计算机通信有两种基本方式:并行通信方式和串行通信方式。在并行通信方式中,数据并行传送,数据传送速率高,但需要用与数据位数目相同的传输线传送,这种方式适合近距离通信。而串行通信是将并行数据转换成串行数据,逐位传送。因此,串行通信最少可以只用2条传输线即可进行,特别是借用电话线来实现两地之间的远程串行通信这个优点使得计算机串行通信获得广泛应用。在串行通信中,发送方和接收方必须协调工作。这种协调的方法,从原理上有同步串行通信和异步串行通信之分。这里,我们仅介绍异步串行通信方式。1.1异步通信方式ASYNC(AsynchronousDataCommunication)所谓异步通信,主要指字符与字符之间的传送可以是异步的,但是一个字符中,位与位之间还是基本同步传送的。因此,通信双方必须统一通信字符的格式、发送字符位与附加信息位的次序以及发送和接收的波特率。图7-1给出了异步串行通信中一个字符的格式。开始前,线路处于空闲状态,送出连续的“1”。传送开始2图9-1异步串行通信字符格式时首先发一个“0”作为起始位,然后从低位至高位依次传送字符的二进制编码。每个字符的数据位长度可以约定为5位、6位、7位或8位。紧跟在数据位后面的是奇偶校验位,最后是停止位的“1”信号,停止位可以约定持续1位、1.5位或2位的时间宽度。有效停止位表示一个字符传送完毕。在具有串行通信功能的接口电路中,空闲位、起始位以及停止位一般是相关功能电路自动嵌入和发送的数据形成一帧完整的信息。1.2通用异步收发器(UniversalAsynchronousReceiverandTransmitter简记为UART)通用异步收发器(UART)能够将并行数据变成串行数据,并将该串行数据按图5.1所示格式发送出去,或者作为接收方能够接收该格式的数据,再把它变成并行数据,而且能够检测奇偶错误、覆盖错误和帧格式错误。通常称具有这种功能的部件为通用异步第n+1个字符起始位空闲位停止位停止位奇偶位起始位空闲位空闲位1111数据位第n个字符10101010101010101100D1D0D2D3D4D5D6D71111111111013收发器(UART)。1.3波特率对于二进制编码的数字通信系统而言,所谓波特率,是指单位时间内传送二进制数据的位数,可以用比特/秒(bps)为单位。在微机异步串行通信中,常用的波特率为50、75、110、150、300、1200、2400、4800、9600。发送和接收方应采用同样波特率进行通信。1.4奇、偶校验奇偶校验是串行通信中采用的一种简单的检验方法。所谓奇(偶)校验就是利用奇偶校验位的1,和数据中1的数目凑成奇(偶)数。二者凑成奇数的称为奇校验,凑成偶数的称为偶校验。MCS-5单片机状态寄存器中的奇偶标志位P,当累加器A中“1”的个数为奇数时P=1,当累加器A中“1”的个数为偶数时P=0。这说明MCS-51单片机在串行通信时采用的是偶校验,因为在通信时,A中的数据作为发送数据(或接收的数据)“1”的个数和奇偶标志位的“1”凑成偶数个“1”。.1.5串行通信传送方式在串行通信中,通信双方在发送、接收中有三种工作方式:单工方式、半双工方式和全双工方式。41.4.1单工(Simplex)方式这种方式只允许数据按一个固定方向传送,如图7.2(a)所示.图中甲方只能发送,叫发送器;乙方只能接收,叫接收器。1.4.2半双工(Half-duplex)方式这种方式允许通信的双方分时使用同一信道进行双向传输。当甲方发送时,乙方接收;而当乙方发送时,甲方接收。在空闲时,甲乙双方一般都处于接收状态以便随时响应对方呼叫。如图9.2(b)所示。甲乙数据(b)收收发发甲乙数据(a)51.4.3全双工(Full-duplex)方式在这种方式中,通信的甲乙双方既是发送器又是接收器,可以同时发送或接收。双方是有独立的发送器和接收器,两个方向的数据传输通道是分开的。如图9.2(c)所示。a)单工方式b)半双工方式c)全双工方式这三种数据传输方式在接收和发送控制上有差别,但作为发送和接收的基本原式理是一样的。2、MCS-51单片机串行口的结构及工作原理MCS-51单片机具有一个全双工串行口,在结构上它是一个完善的通用异步收发器(UART),它具有四种工作方式,可供使用者选用,通信过程由软件编程实现。图7-2三种串行传递方式甲乙数据(c)发收发收62.1MCS-51单片机串行口结构MCS-51单片机的串行口是一个全双工串行口,在结构上它由两个物理上独立的接收和发送缓冲器SBUF(共用一个逻辑地址99H)、一个串行口控制寄存器(SCON)、由T1构成的波特率发生器、移位寄存器等部件组成的通用异步收发器(UART)。串行口功能的设定以及数据的收发是通过对T1波特率发生器的设定和对SCON、SBUF的编程来实现的。2.2串行口控制寄存器SCON串行口控制寄存器的主要功能是选择串行口的通信方式、发送和接收控制及串行口通信状态的指示。SCON作为特殊功能寄存器之一,它占用内部98H地址,可以进行位寻址。该寄存器各位含义如下:SCON9FH9EH9DH9CH9BH9AH99H98HSM0SM1SM2RENTB8RB8TIRI1.串行工作方式选择位:SM0、SM1SMOSM1工作方式功能波特率00方式08位移位寄存器方式fosc/1201方式110位UART可变10方式211位UARTfosc/64、fosc/3211方式311位UART可变7方式0方式0为8位移位寄存器方式。该方式用于I/O口扩展,在这种方式下,RXD端可以作为串行数据的输出和输入端,TXD按fosc/12的速率输出同步移位脉冲。在同步移位脉冲作用下驱动外接的移位寄存器,可以将该串行口扩展为并行输出口或并行输入口。该方式以8位数据为一帧,没有起始位和停止位。这种串行口扩展I/O口方式,可节省单片机本身的I/O口资源。方式1:方式1为10位UART方式。在这种方式下,串行口按串行通信字符格式在发送的8位数据前嵌入一个起始位,在8位数据后嵌入一个停止位,10位作为一帧发送。波特率可按要求设定。接收方以同样方式和波特率接收数据。方式2方式2为11位UART方式。在这种方式下,TB8作为发送的第九位数据,8位数据和第九位TB8与起始位和停止位,共11位构成一帧。发送的第九位数据TB8是发送8位(D0-D7)数据的附加信息位,在双机通信时它可以代表数据的奇偶性,在多机通信8时,它可以表明所发的8位数据(D0-D7)是地址信息还是数据信息,第九位作为附加信息位与SM2(多机通信控制位)配合,完成多个分机的寻址。第九位数据TB8在发送前由程序设定。通信方式2的波特率,有两种选择:1/64fosc或1/32fosc,由PCON的最高位SMOD是0还是1确定。方式3方式3与方式2类似。它们之间的区别在于方式3波特率可变,更适用于要求以某一波特率进行通信的场合。2.多机通信控制位SM2在方式2或方式3中,若一主机与众多从机进行通信从机并接在串行总线上。如图7.4所示。图7-4主从式机通信示意图在方式2或方式3中,若SM2=1,则接收到的第9主机1#2#n#RTRTRTRXDTXD9位数据(RB8)为0时,不激活RI。这种主从式的多机通信控制过程如下:主机通过对分机地址的选择以达到一对一通信的目的,在通信开始前,各分机在初始化编程中将本分机的SM2控制位置1,做好应答主机呼叫的准备。主机首先要发送拟进行通信联系的分机地址,以第九位TB8=1作为地址帧的标识而和分机地址共同构成地址帧发送。发送的第九位TB8进入接收方的接收第九位RB8,由于各分机SM2=1,它们都可以接收到第九位RB8=1的地址帧信息,各分机与该帧地址比较,如果分机地址与接收到的分机地址不同,说明主机没有呼叫本分机,未被呼叫的分机继续保持SM2=1的等待呼叫状态。如果分机地址与接收到的分机地址相同,说明主机在呼叫本分机,被主机呼叫的分机将自己的SM2置0即SM2=0。作好接收数据帧的准备。主、分机经地址唯一确认后,主机开始发送数据信息,并以发送第九位TB8=0作为数据帧标识而和数据共同构成数据帧发送。主机发送的第九位TB8,作为数据帧标识而被分机接收进入分机的接收第九位RB8。凡是SM2=1(未被呼叫的分机)的分机在接收RB8=0的数据帧信息时不激活RI,因此被呼叫的分机就不能接收数据帧。而被主机呼叫的分机的SM2=0,它可以被RB8=0的数据10帧激活RI而接收数据,达到和主机通信目的。所以主机与各分机之间的一对一通信是由SM2的状态所控制的。SM2称之为多机通信控制位。在方式1时,双机通信若接收方SM2=1则只有接收到有效停止位时才激活RI使其置1。若SM2=0,RB8是接受到的停止位。在方式0时,SM2应为0。3.允许接收控制位REN通信的双方在通信前由软件将该位置1,允许接收。该位清零时禁止接收。4.发送第九位TB8该位是工作在方式2和方式3时要发送的第九位数据,根据需要由软件置位或清零在主从式多机通信时。该位作为标识位,标识所发数据是地址帧(TB8=1)还是数据帧(TB8=0)而由分机进行识别接收。在双机通信时,该位也可当作附加奇偶校验位。5.接收第九位RB8该位是方式2和方式3时,接收到的第九位数据。在方式1中,如果接收方SM2=0,则RB8是接收到的停止位。方式0,不使用RB8。6.发送完毕标志位TI该位是发送完毕标志,在方式0,发送完第8位11后,该位由硬件自动置1,在其它方式时,该位在串行发送有效停止位时置1,该位是由硬件自动置位,由软件清零。该位置位后作为发送完毕申请串行口中断标志,也可作为软件查询标志。7.接收完毕标志位RI该位是接收完毕标志。在方式0中,接收方接收完第八位数据后由硬件将RI置位,在其它方式中,接收方在接收到有效停止位时将该位置位,由软件清零。该位置位后作为接收完毕申请串行口中断标志。也可作为软件查询标志。SCON所有位在复位时被清零。2.3特殊功能寄存器PCONPCONSMOD该寄存器字节地址为87H,没有位寻址功能,与串行口有关的只有D7位。SMOD位是串行口波特率选择位,当SMOD=1时波特率加倍,其作用在波特率设置一节中说明。2.4串行发送、接收缓冲器SBUFSBUF是由发送缓冲器和接收缓冲器两个独立的缓冲器组成的,二者共用一个逻辑地址99H,当写这个地址时,是将数据写入发送缓冲器,启动发送,当读这个地址时,是读接收缓冲器,接收数据。87H122.5串行通信中波特率设置MCS-51单片机串行通信的波特率随工作方式选择不同而异。串行口方式0时,波特率固定不变,仅与系统的振荡频率fosc有关,其大小为fosc/12。例如;fosc=6×106MHZ时,若串行口工作在方式0移位寄存器方式时,其发送、接收数据的波特率为0.5Mbps。串行口方式2时,波特率有两种固定选择:当SMOD=1时,波特率=2SMOD.fosc/64=(1/32)fosc当SMOD=0时,波特率=2SMOD.fosc/64=(1/64)fosc指令:MOVPCON,#80H;令SMOD=1指令:MOVPCON,#00H;令SMOD=0当串行口工作于方式1和方式3时,波特率是可变的,由下式决定:波特率=(2SMOD/32)×定时器T1溢出率=2SMOD×fosc/[384×(256-N)]其中:N为为定时器T1工作于八位自动装入方式(方式2)时的时间常数。13在实际应用中,往往是给定波特率,确定时常数N,由下式决定:N=256-[2SMOD×fosc/(384×波特率)]例如:若已知系统fosc=6MHZ,要求波特率为2400bps,求时间常数N当SMOD=1时:N=256-(21×6×106)/(2400×384)=242.98=243=F3H当SMOD=0时:N=256-(20×6×106)/(2400×384)=249.49=249=F9H在例中,设置串行口波特率的初始化程序如下:MOVTMO