第八章单片机串行数据通信第一节概述一、串行通信基本原理并行通信的特点是:各数据位同时传送,传送速度快、效率高。但并行数据传送有多少数据位就需多少根数据线,因此传送成本高。并行数据传送的距离小于30米。串行通信的特点是:数据传送按位顺序进行,最少只需一根传输线即可完成,成本低但速度慢。计算机与外界的数据传送大多数是串行的,其传送的距离可以从几米到几千公里。每秒传送一个格式位就是1波特。即:1波特=lbps(位/秒)2)、帧(frame):从起始位开始到停止位结束的全部内容称之为一帧,帧是一个字符的完整通信格式,因此也就把串行通信的字符格式称之为帧格式。起始位:发送器是通过发送起始位而开始一个字符的传送。起始位使数据线处于“space”状态。数据位:起始位之后就传送数据位。在数据位中,低位在前(左),高位在后(右)。数据位可以是5、6、7或8位。奇偶校验位:用于对字符传送作正确性检查。共有3种可能,即奇校验、偶校验和无校验。停止位:停止位在最后,用以标志一个字符传送的结束,它对应于mark状态。停止位可能是1、1.5或2位,在实际应用中根据需要确定。三、串行通信的数据通路形式串行数据通信共有以下几种数据通路形式。1、单工(Simplex)形式单工形式的数据传送是单向的。通信双方中一方固定为发送端,另一方则固定为接收端。单工形式的串行通信,只需要一条数据线。如图8.4所示。例如计算机与打印机之间的串行通信就是单工形式,因为只能有计算机向打印机传送数据,而不可能有相反方向的数据传送。2、全双工(Full-duplex)形式全双工形式的数据传送是双向的,且可以同时发送和接收数据,因此全双工形式的串行通信需要两条数据线。如图8.5所示。3.半双工(Half-duplex)形式半双工形式的数据传送也是双向的。但任何时刻只能由其中的一方发送数据,另一方接收数据。因此半双工形式既可以使用一条数据线,也可以使用两条数据线。如图8.6所示。四、异步串行通信的信号形式1、近程通信近程通信又称本地通信。近程通信采用数字信号直接传送形式,在传送过程中不改变原数据代码的波形和频率。这种数据传送方式称之为基带传送方式。图8.2就是两台计算机近程串行通信的连接和代码波形图。2、远程通信在远程串行通信中,应使用专用的通信电缆,但出于经济考虑也可以使用电话线作为传输线。如图8.3所示。远距离直接传送数字信号,信号会发生畸变,因此要把数字信号转变为模拟信号再进行传送。信号形式的转变通常使用频率调制法,即以不同频率的载波信号代表数字信号的两种不同电平状态。这种数据传送方式就称之为频带传送方式。调制器:把电平信号调制为频率信号解调器:把频率信号解调为电平信号在远程串行通信线路的两端都应设置调制器和解调器,并且把二者合在一起称之为调制解调器(Modem)。1270Hz或2225Hzmark1070Hz或2025Hzspace功能说明如下:·SM0、SM1—串行口工作方式选择位其状态组合所对应的工作方式为:·SM2—多机通信控制位SM2位主要用于方式2和方式3。当串行口方式2或方式3接收时,如SM2=1,则只有当接收到的第九位数据(RB8)为1,才将接收到的前8位数据送入SBUF,并置位RI产生中断请求;否则,将接收到的前8位数据丢弃。而当SM2=0时,则不论第九位数据为0还是为1,都将前8位数据装入SBUF中,并产生中断请求。·REN—允许接收位REN=0禁止接收REN=1允许接收该位由软件置位或复位。·TB8—发送数据位8在方式2和方式3时,TB8的内容是要发送的第9位数据,其值由用户通过软件设置。在双机通信时,TB8一般作为奇偶校验位使用;在多机通信中,常以TB8位的状态表示主机发送的是地址帧还是数据帧,且一般约定:TB8=0为数据帧TB8=1为地址帧。·RB8—接收数据位8在方式2或方式3时,RB8存放接收到的第9位数据,代表着接收数据的某种特征(与TB8的功能类似),故应根据其状态对接收数据进行操作。·TI—发送中断标志当方式0时,发送完第8位数据后,该位由硬件置位。在其它方式下,于发送停止位之前,由硬件置位。因此TI=1,表示帧发送结束,其状态既可供软件查询使用,也可请求中断。TI位由软件清“0”。·RI—接收中断标志当方式0时,接收完第8位数据后,该位由硬件置位。在其它方式下,当接收到停止位时,该位由硬件置位。因此RI=1,表示帧接收结束。其状态既可供软件查询使用,也可以请求中断。RI位由软件清“0”。2、电源控制寄存器PCONSMOD—串行口波特率的倍增位当SMOD=1时,串行口波特率加倍。系统复位时,SMOD=0。3、中断允许寄存器IEES=0禁止串行中断ES=1允许串行中断第三节波特率设计二、波特率的设定方式1的波特率是可变的,以定时器T1作波特率发生器使用,其值由定时器1的计数溢出率来决定,其公式为:波特率=mod2(1)32s定时器溢出频率当定时器1作波特率发生器使用时,选用工作方式2(即8位自动加载方式)。假定计数初值为X,则计数溢出周期为:12(256)oscXf溢出率为溢出周期的倒数。则波特率计算公式为:波特率=mod23212(256)soscfX实际使用时,总是先确定波特率,再计算定时器1的计数初值,然后进行定时器的初始化。根据上述波特率计算公式,得出计数初值的计算公式为:X=mod2256384soscf-波特率第四节串行口应用举例例1使用CD4094的并行输出端接8支发光二极管,利用它的串入并出功能,把发光二极管从左向右依次点亮,并反复循环之。假定发光二极管为共阴极型,则电路连接如图所示。分析:使用方式0实现数据的移位输入输出时,实际上是把串行口变成为并行口使用。串行口作为并行输出口使用时,要有“串入并出”的移位寄存器(例如CD4094或74LS164,74HC164等)配合。在方式0下,是把串行口作为同步移位寄存器使用,这时以RXD(P3.0)端作为数据移位的入口和出口,而由TXD(P3.1)端提供移位时钟脉冲。移位数据的发送和接收以8位为一帧,低位在前高位在后。使用查询方法完成的参考程序如下:MOVSCON,#00H;串行口方式0工作CLRES;禁止串行中断MOVA,#80H;发光管从左边亮起DELR:CLRP1.0;关闭并行输出MOVSBUF,A;串行输出JNBTI,$;状态查询SETBP1.0;开启并行输出ACALLDELAY;状态维持CLRTI;清发送中断标志RRA;发光组合右移AJMPDELR;继续例2设计一个发送程序,将片内RAM50H~5FH中的数据串行发送,串行口设定为方式2状态,TB8作奇偶校验位。在数据写入发送缓冲器之前,先将数据的奇偶位P写入TB8,这时第9位数据作奇偶校验用。程序清单如下TRT:MOVSCON,#80H;方式2设定MOVPCON,#80H;取波特率为fosc/32MOVR0,#50HMOVR7,#10H;数据长度10HLOOP:MOVA,@R0;取数据送AMOVC,PSW.0;MOVTB8,CMOVSBUF,A;数据送SBUF,启动发送WAIT:JBCTI,CONT;判断发送中断标志SJMPWAITCONT:INCR0DJNZR7,LOOPRET例3设计一个接收程序,将接收的16个字节数据送入片内RAM50H~5FH单元中。设串行口方式3状态工作,波特率为2400。定时/计数器1作波特率发生器时,SMOD=0,计数常数为F4H。程序清单如下:RVE:MOVTMOD,#20H;T1编程为方式2定时状态MOVTH1,#0F4H;计数常数送T1MOVT11,#0F4HSETBTR1;启动T1MOVR0,#50HMOVR7,#10H;数据长度lOH-R7MOVSCON,#0D0H;串行口编程方式3接收MOVPCON,#00H;置SMOD=0WAIT:JBCRI,PRI;等待接收到数据SJMPWAITPRI:MOVA,SBUF;奇偶校验判P=RB8?JNBPSW.0,PNPJNBRB8,PERSJMPRIGHTPNP:JBRB8,PERRIGHT:MOV@R0,A;数据送缓冲器INCR0DJNZR7,WAIT;判断数据块接收完否?CLRPSW.5;正确接收完16个字节置标志位RET作业:p237,问答题:1、3。填空题与选择题做在书本上。