51单片机(三十一)—— 串口通信介绍

       随着单片机系统的广泛应用和计算机网络技术的普及,单片机的通信功能越来越显得重要。通信有并行和串行两种方式。在单片机系统中,信息的交换多采用串行通信的方式。

        并行通信通常是将数据字节的各位用多条数据线同时进行传送,每一位数据都需要一条传输线,如下图所示。

        在8位数据总线的通信系统,一次传送8位数据,需要8条数据线。这种方式只适合短距离传输。

        并行通信控制简单,性对传输速度快,但由于传输线较多,产距离传送时成本高,且收发方的各位同时接收存在困难。

        串行通信是将数据字节分成一位一位的形式在一条传输线上逐个地传送,此时只需要一条数据线,外加一条公共的地线。因此一次只能传送一位,所以对于一个字节的数据至少要分8位才能传送完毕。如下图所示。

        串行通信的必要过程是:发送时,要把并行数据变成串行数据发送到线路上去,接收时,要把串行信号再变成并行数据,这样才能被计算机及其他设备处理。串行通信传输线少,长距离传送时成本低,且可以利用电话网等现成的设备,且数据的传送控制比并行通信复杂。

        串行通信又有两种方式:异步串行通信和同步串行通信。

        异步串行通信是指通信的发生与接收设备使用各自时钟控制数据的发送和接收过程。为使双方收、发协调,要求发送和接收设备的时钟尽可能一致。异步通信是以字符为单位进行传输,字符与字符之间的间隙是任意的,但每个字符中的各位是以固定的时间传送的。

        异步通信一帧字符信息由4部分组成:起始位、数据位、奇偶校验位和停止位,如下图所示。有的字符信息也有带空闲位形式,即在字符之间有空闲字符。

        异步通信的特点:不要求收发方时钟的严格一致,实现容易,设备开销较小,但每个字符要附加2~3位,用于起止位、校验位和停止位,各帧之间还有间隔,因此传输效率不高。在单片机与单片机之间,单片机与计算机之间通信时,通常采用异步串行通信方式。

        同步通信时要建立发送方时钟对接收方时钟的直接控制,使双方达到完全同步。此时,传输数据的位之间的距离均为“位间隔”的整数倍,同时传送的字符间不留间隙,即保持位同步关系,也保持字符同步关系。

         STC89C516单片机内部有一个异步串行口,用来与计算机通信。串口与单片机的P30和P31接口复用。P30为串口的接收端RXD,P31为串口的发送端TXD。单片机的串口不能直接与计算机进行通信。单片机的串口的电平制式为TTL电平,计算机的串口的电平制式为RS-232电平。TTL电平,5V代表逻辑“1”,0V代表逻辑“0”;计算机的串口电平为RS-232电平,-12V代表逻辑“1”,12V代表逻辑“0”。要使计算机能够接收到单片机的数据,就必须将TTL电平转换为RS-232电平;要使单片机能够接收到计算机的数据,就必须将RS-232电平转换为TTL电平。实现这两种电平转换的芯片主要有MAX232、MAX202、HIN232等。本开发板上使用MAX232实现两路串口电平的互换。电路如下图所示。

        MAX232可以两路异步串行信号进行转换。我们使用的开发板上只使用了其中的一路。MAX232芯片的9脚和10脚与单片机相连。7脚和8脚与计算机的串口相连。

        不过,目前一般的计算机上很多都不装备串口。如果要进行串口的实验,智能用USB口虚拟出一个串口。我使用的开发板上用PL2303芯片将单片机的串口信号,转换为USB信号。电路如下图所示。这个电路也是单片机的下载接口电路。

        MAX232芯片和PL2303芯片都需要与单片机的串口相连。开发板上设计了一个转接口JP3来设置单片机与哪个芯片相连。如下图所示。

       将JP3上的两个跳线帽跳到标有USB一端时,单片机的串口与PL2303芯片相连,计算机可以通过USB口与单片机的串口进行通信。将JP3上的两个跳线帽跳到标有232一端时,单片机的串口与MAX232芯片相连,计算机可以通过RS232串口与单片机的串口进行通信。

        在这个实验中,我们主要通过USB口模拟的串口与单片机的串口进行通信。

        接下来我们介绍一些STC89C516单片机的串口的基础知识。

         STC89C516单片机的串行口是一个可编程全双工的通信接口,具有UART(通用异步收发器)的全部功能,能同时进行数据的发送和接收,也可以作为同步移位寄存器使用。

          STC89C516单片机的串行口由两个独立的串行数据缓冲寄存器SBUF(一个发送缓冲寄存器,一个接收缓冲寄存器)和发送控制器、接收控制器、输入移位寄存器及若干控制门电路组成。

          STC89C516单片机可以通过特殊功能寄存器SBUF堆串行接收或串行发送寄存器进行访问,两个寄存器公用一个地址99H,但在物理上是两个独立的寄存器:执行读命令时,访问串行接收寄存器。接收器具有双缓冲结构,即在从接收寄存器中读出前一个已经收到的字节之前,便能接收第二个字节。如果第二个字节已经接收完毕,第一个字节没有读出,则将丢失其中一个字节,编程时应引起注意。对于发送器,因为数据是由CPU控制和发送的,所以不需要考虑。

       与串行口秘密相关的一个特殊功能寄存器是串行口控制寄存器SCON,它用来设定串行口的工作方式、接收/发送控制以及设置状态标志等。

 串行口控制寄存器SCON

位序号

D7

D6

D5

D4

D3

D2

D1

D0

位符号

SM0

SM1

SM2

REN

TB8

RB8

TI

RI

SM0,SM1—工作方式选择位。

    串行口有4中工作方式,它们由SM0,SM1设定,对应关系如表18.2所示。

表18.2串行口工作方式

SM0

SM1

方式

功能说明

0

0

0

同步移位寄存器方式(通常用于扩展I/O口)

0

1

1

10位异步收发(8位数据),波特率可变(由定时器1的溢出率控制)

1

0

2

11位异步收发(9位数据),波特率固定

1

1

3

11位异步收发(9位数据),波特率可变(由定时器1的溢出率控制)

    所谓波特率是指单片机与计算机在串口通信时的速率,它定义为每秒传输二进制代码的位数。即1波特=1位/秒。

    这4种方式的波特率的计算方式如下:

    方式0的波特率=fosc/12。

    方式1的波特率=(2SMOD/32)×(T1溢出率)

    方式2的波特率=(2SMOD/64)×fosc

    方式3的波特率=(2SMOD/32)×(T1溢出率)

    其中SMOD是电源管理寄存器PCON中的一位。它用来设置串口在方式1、2、3时的波特率,SMOD=0时,波特率正常;SMOD=1时,波特率加倍。

SM2—多机通信控制位。

SM2主要用于方式2和方式3,当接收机的SM2=1时,可以利用收到的RB8来控制是否激活RI(RB8=0时不激活RI,收到的信息丢弃;RB8=1时收到的收据进入SBUF,并激活RI,进而在中断服务中将数据从SBUF读走)。当SM2=0时,不论收到的RB8是0还是1,均可以使收到的数据进人SBUF,并激活RI(即此时RB8不具有控制RI激活的功能)。通过控制RM2,可以实现多机通信,在方式0时,SM2必须是0,在方式1时,若RM2=1,则只有接收到有效停止位时,RI才置1。

REN—允许串行接收位。

REN=1:允许串口接收数据;

REN=0:禁止串行口接收数据。

TB8—方式2、3中发送数据的第9位。

在方式2或方式3中,是发送数据的第9位,可以用软件规定其作用,可以用做数据的奇偶校验位,或在多机通信中,作为地址帧/数据帧的标志位,在方式0和方式1中,该位未用。

RB8—方式2、3中接收数据的第9位。

在方式2或方式3中,是接收数据的第9位,可作为奇偶校验位或地址帧/数据帧的标志位,在方式1时,若SM2=0,则RB8是接收到的停止位。

TI—发送中断标志位。

在方式0时,当串行发送第8位数据结束时,或在其他方式,串行发送停止位的开始时,由内部硬件使TI置1,向CPU发出中断申请,也必须在中断服务程序中,必须用软件将其清0,取消此中断申请。

RI—接收中断标志位。

在方式0时,当串行接收第8位数据结束时,或在其他方式,串行接收停止位的中间时,由内部硬件使RI置1,向CPU发出中断申请,也必须在中断服务程序中,用软件将其清0,取消此中断申请。

在这里对串口4种方式做一下简单介绍。

(1)方式0。方式0时,串行口为同步移位寄存器的输入/输出方式,主要用于扩展并行输入或输出口。数据由RXD(P3.0)引脚输入或者输出,同步移位脉冲由TXD(P3.1)引脚输出。发送和接收均为8位数据,低位在先,高位在后,波特率固定为fosc/12。

(2)方式1。方式1是10位数据的异步通信口,其中1位起始位,8位数据位,1位停止位。TXD(P3.1)为数据发送引脚,RXD(P3.0)为数据接收引脚。其传输波特率是可变的,对于51单片机,波特率由定时器1的溢出率决定。通常我们在做单片机与单片机串口通信、单片机与计算机串口通信、计算机与计算机串口通信时,基本都选择方式1,因此这种方式大家务必要完全掌握。

(3)方式2、3。方式2、3时为11位数据的异步通信口。TXD(P3.1)为数据发送引脚,RXD(P3.0)为数据接收引脚。这两种方式下,起始位1位,数据9位(含1位附加的第9位,发送时为SCON中的TB8,接收时为RB8),停止位1位,一帧数据位11位。方式2的波特率固定为晶振频率的1/64或者1/32,方式3的波特率由定时器T1的溢出率决定。

方式2和方式3的差别仅在于波特率的选取方式不同,在两种方式下,接收到的停止位与SBUF、TB8及RI都无关。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章