第4.3串行通信4.3串行通信接口4.3.1串行通信的基本知识1.并行通信与串行通信在实际应用中,不但计算机与外部设备之间常常要进行信息交换,而且计算机之间也需要交换信息,所有这些信息的交换均称为“通信”。通信的基本方式分为并行通信和串行通信两种。并行通信是构成1组数据的各位同时进行传送,例如8位数据或16位数据并行传送。其特点是传输速度快,但当距离较远、位数又多时导致了通信线路复杂且成本高。第4.3串行通信串行通信是数据一位接一位地顺序传送。其特点是通信线路简单,只要一对传输线就可以实现通信(如电话线),从而大大地降低了成本,特别适用于远距离通信。缺点是传送速度慢。图4―10为以上两种通信方式的示意图。由图4―10可知,假设并行传送N位数据所需时间为T,那么串行传送的时间至少为NT,实际上总是大于NT的。第4.3串行通信图4―10(a)并行通信;(b)串行通信第4.3串行通信串行通信可分为异步传送和同步传送两种基本方式。1)异步传送方式异步传送的特点是数据在线路上的传送不连续。在传送时,数据是以一个字符为单位进行传送的。它用一个起始位表示字符的开始,用停止位表示字符的结束。异步传送的字符格式如图4―11(a)所示。第4.3串行通信•一个字符由起始位、数据位、奇偶校验位和停止位4个部分组成(一帧数据)。•起始位为0信号占1位;其后接着的就是数据位,它可以是5位、6位、7位或8位,传送时低位在先、高位在后;•再后面的1位为奇偶校验位,可要也可以不要;•最后是停止位,它用信号1来表示字符的结束,可以是1位、1位半或2位。第4.3串行通信图4―11(a)字符格式;(b)有空闲位的字符格式第4.3串行通信例如,采用串行异步通信方式传送ASCII码字符‘5’,规定为7位数据位,1位偶校验位,1位停止位,无空闲位。由于‘5’的ASCII码为35H,其对应7位数据位为0110101,如按低位在前、高位在后顺序排列应为1010110。前面加1位起始位,后面配上偶校验位1位0,最后面加1位停止位1,因此传送的字符格式为0101011001,其对应的波形如图4―12所示。第4.3串行通信图4―12传送ASCII码字符‘5’的波形图第4.3串行通信在串行异步传送中,CPU与外设之间事先必须约定(协议):①字符格式。双方要事先约定字符的编码形式、奇偶校验形式及起始位和停止位的规定。例如用ASCII码通信,有效数据为7位,加1个奇偶校验位、1个起始位和1个停止位共10位。当然停止位也可大于1位。②波特率(Baudrate)。波特率就是数据的传送速率,即每秒钟传送的二进制位数,单位为位/秒。它与字符的传送速率(字符/秒)之间存在如下关系:波特率=(位/字符)×(字符/秒)=位/要求发送端与接收端的波特率必须一致。第4.3串行通信例如,假设字符传送的速率为120字符/秒,而每1个字符为10位,那么传送的波特率为10位/字符×120字符/秒=1200位/秒=1200波特每1位二进制位的传送时间Td就是波特率的倒数,例如上例中Td=1/1200=0.833ms2)同步传送在异步传送中,每1个字符都要用起始位和停止位作为字符开始和结束的标志,占用了一定的时间。为了提高传送速度,有时就去掉这些标志,而采用同步传送,即1次传送1组数据。在这1组数据的开始处要用同步字符SYN来加以指示,如图4―13所示。第4.3串行通信图4―13同步传送第4.3串行通信2.数据传送方向串行通信的数据传送方向有3种形式。(1)单工方式。如图4―14(a)所示,A端为发送站,B端为接收站,数据仅能从A站发至B站。(2)半双工方式。如图4―14(b)所示,数据既可从A站发送到B站,也可以由B站发送到A站。不过在同一时间只能作1个方向的传送。(3)全双工方式。如图4―14(c)所示,每个站(A、B)既可同时发送,也可同时接收。第4.3串行通信图5―14(a)单工方式;(b)半双工方式;(c)全双工方式单工方式半双方式全双工方式第4.3串行通信3.信号的调制和解调计算机通信是1种数字信号的通信,如图4―15所示。它要求传送线的频带很宽,而在长距离通讯时,通常是利用电话线来传送的,该线不可能有这样宽的频带。如果用数字信号经过传送线直接通讯,信号就会畸变,如图4―16所示。图4―15通讯信号示意图第4.3串行通信图5―16数字信号通过电话线传送产生的畸变第4.3串行通信因此要在发送端用调制器(Modulator)把数字信号转换为模拟信号,在接收端用解调器(Demodulator)检测此模拟信号,再把它转换成数字信号,如图4―17所示。FSK(FrequencyShiftKeying)是1种常用的调制方法,它把数字信号的“1”与“0”调制成不同频率的模拟信号,其工作原理如图4―18所示。图4―17调制与解调示意图第4.3串行通信图4―18FSK调制法原理图第4.3串行通信4.数据终端与调制器的接口调制后的信号与数据终端连接时,经常使用EIARS-232C接口。它是目前最常用的1种串行通信接口。这是1种有25(或9个)个管脚的D型连接器,不但它的每一个管脚的规定是标准的,而且对各种信号的电平规定也是标准的,因而便于互相连接。其最基本的最常用的信号规定如图4―19所示。第4.3串行通信图4―19RS-232C的引脚图第4.3串行通信其次,标准的另1个重要的含义是这些信号的电气性能也是标准的。对各种信号的规定如下:(1)在TXD和RXD线上:MARK(即表示为1)=-3~-25VSPACE(即表示为0)=+3~+25V(2)在等线上:ON=+3~+25VOFF=-3~-25V....RTSCTSDSPDTRCD第4.3串行通信图4―20接收器和发送器电路第4.3串行通信4.3.251系列单片机的串行接口51系列单片机内部有1个功能很强的全双工串行口,可同时发送和接收数据。它有4种工作方式,可供不同场合使用。波特率可由软件设置,通过片内的定时器/计数器产生。接收、发送均可工作在查询方式或中断方式,使用十分灵活。MCS-51的串行口除了用于数据通信外,还可以非常方便地构成1个或多个并行输入/输出口,或作串并转换,用来驱动键盘与显示器。第4.3串行通信图4―2251单片机串行口的原理结构图第4.3串行通信1.串行接口的特殊功能寄存器1)串行口数据缓冲器SBUF接收缓冲器SBUF发送缓冲器SBUFSBUF是两个在物理上独立的接收、发送缓冲器,可同时发送、接收数据。两个缓冲器只用一个字节地址99H,可通过指令对SBUF的读写来区别是对接收缓冲器的操作还是对发送缓冲器的操作。CPU写SBUF,就是写发送缓冲器;读SBUF,就是读接收缓冲器。串行口对外也有两条独立的收、发信号线RXD(P3.0)和TXD(P3.1),因此可以同时发送、接收数据,实现全双工传送。第4.3串行通信2)串行口控制寄存器SCONSCON寄存器用来控制串行口的工作方式和状态,它可以是位寻址。在复位时所有位被清0,字地址为98H。SCON的格式为RITIRB8TB8RENSM2SM1SM0D7D6D5D4D3D2D1D0SM0、SM1:串行口工作方式选择位(具体内容参阅工作方式一节)。第4.3串行通信SM2:多机通信控制位。主要用于工作方式2和方式3。在方式2和方式3中,如SM2=1,则接收到的第9位数据(RB8)为0时不启动接收中断标志RI(即RI=0),并且将接收到的前8位数据丢弃;RB8为1时,才将接收到的前8位数据送入SBUF,并置位RI产生中断请求。当SM2=0时,则不论第9位数据为0或1,都将前8位数据装入SBUF中,并产生中断请求。在方式0时,SM2必须为0。REN:允许串行接收控制位。若REN=0,则禁止接收;若REN=1,则允许接收。该位由软件置位或复位。第4.3串行通信TB8:发送数据位8。在方式2和方式3时,TB8为所要发送的第9位数据。在多机通信中,以TB8位的状态表示主机发送的是地址还是数据:TB8=0为数据,TB8=1为地址;也可用作数据的奇偶校验位。该位由软件置位或复位。RB8:接收数据位8。TI:发送中断标志位。在方式0时,当发送到的第8位结束后,由内部硬件使TI置位,向CPU请求中断。在其它方式时,在发送到停止位开始时由硬件置位TI,必须在响应中断后,由软件使其复位。TI也可供软件查询使用。第4.3串行通信RI:接收中断标志位。在方式0时,当接收到的第8位结束后,由内部硬件使RI置位,向CPU请求中断。在其它方式时,接收到停止位的中间便由硬件置位RI,同样,也必须在响应中断后,由软件使其复位。RI也可供软件查询使用。3)特殊功能寄存器PCONPCON主要是电源控制而设置的专用寄存器,单元地址为87H,不能位寻址。其内容如下:IDLPDGF0GF1SMODD7D6D5D4D3D2D1D0PCON87H第4.3串行通信最高位SMOD为串行口波特率系数控制位,当SMOD=1时,方式1、2、3的波特率加倍。2.串行接口的工作方式串行口有4种工作方式,它是由SCON中的SM0、SM1来定义的,如表4―5所示。表4―5串行口的工作方式第4.3串行通信1)方式0串行接口的工作方式0为8位的同步移位寄存器方式,其波特率是固定的,为fosc(振荡频率)的1/12。用于扩展并行I/O接口,一帧8位,无起始位和停止位。方式0发送:数据从RXD引脚串行输出,TXD(P3.1)引脚输出同步脉冲。当1个数据写入串行口发送缓冲器时,串行口将8位数据以fosc/12的固定波特率从RXD引脚输出,从低位到高位。发送完后置中断标志TI为1,呈中断请求状态,在再次发送数据之前,必须用软件将TI清0。第4.3串行通信发送时序写入SBUFRXD输出TXDTID0D1D2D3D4D5D6D7写REN=1RI=0RXD输入RI接收时序(a)(b)图4―23串行口方式0的发送、接收时序图第4.3串行通信方式0接收在满足REN=1和RI=0的条件下,串行口处于方式0输入。此时,RXD为数据输入端,TXD为同步信号输出端,接收器也以fosc/12的波特率采样RXD引脚输入的数据信息。当接收器接收完8位数据后,置中断标志RI=1请求中断,在再次接收之前,必须用软件将RI清0。第4.3串行通信在方式0工作时,必须使SCON寄存器中的SM2位为“0”。方式0发送或接收完8位数据后由硬件置位TI或RI中断请求标志,CPU在响应中断后要用软件清除TI或RI标志。若串行口要作为并行口输入输出扩展,这时必须设置“串入并出“或”并入串出”的移位寄存器来配合使用(如CD4094或CD4014等)。例如将串行口作为并行输出口使用时,可采用如图4―23、24所示的方法。第4.3串行通信图4―23一种串行转换为并行的方法第4.3串行通信图4―24一种串行转换为并行的方法第4.3串行通信2)方式1在方式1时,串行口被设置为波特率可变的8位异步通信接口。方式1发送:串行口以方式1发送时,数据位由TXD端输出,发送1帧信息为10位,其中1位起始位、8位数据位(先低位后高位)和一个停止位“1”。CPU执行1条数据写入发送缓冲器SBUF的指令(如指令MOVSBUF,A),就启动发送器发送。当发送完数据,就置中断标志TI为1。方式1所传送的波特率取决于定时器T1的溢出率和特殊功能寄存器PCON中SMOD的值,即方式1的波特率=(2SMOD/32)×定时器T1的溢出率。SENDD0D1D2D3D4D5D6D7起始位TXD停止位写入SBUFTI(a)第4.3串行通信方式1接收:数据从RXD端输入。当允许输入位REN置1后,接收器便以波特率的16倍速率采样RXD端电平,当采样到1至0的跳变时,启动接收器接收,并复位内部的16分频计数器,以实现同步。计数器的16个状态把1位时间等分成16份,并在第7、8、9个计数状态时,采样RXD电平。因此,每一位的数值采样三次,至少两次相同的值才被确认。在起始位,如果接收到的值不是0,则起始位无效,复位接收电路。在检测到一个1到0的跳变时,再重新启动接收器