1、单片机中级教程 第6章 串行接口第6章 串行接口 串行通信是CPU与外界交换信息的一种基本通信方式。本章将介绍串行通信的一般知识和MCS-51系列单片机串行接口的结构、原理及应用6.1 串行通信的基础知识计算机与外界的信息交换称为通信。通信的基本方式可分为并行通信和串行通信两种。并行通信是指数据的各位同时进行传送。其优点是传送速度快,缺点是数据有多少位,就需要多少根传输线,适合于近距离传输。串行通信是指数据的各位按顺序一位一位传送。其优点是只需一对传输线(如电话线),占用硬件资源少,从而降低了传输成本,特别适用于远距离通信,缺点是传送速度较慢。611 串行通信的两种基本方式串行通信分为异步通信
2、和同步通信两种基本方式。1异步通信方式异步通信时,数据是以字符为单位进行传送的。一个字符又称为一帧信息,每个字符由4个部分组成:起始位、数据位、奇偶校验位和停止位。这样一组信息就称为一帧数据或简称一帧。一帧信息由起始位开始,停止位结束。异步传送的字符格式如图6-1所示。起始位为0信号,占用1位,用来表示一帧信息的开始;其后就是数据位,它可以是5位、6位、7位或8位,传送时低位在先、高位在后;再后面的是奇偶校检位(即可编程位),只占一位;最后是停止位,它用逻辑1来表示一帧信息的结束,可以是1位、1位半或2位。 图6-1 异步通信的字符格式异步通信的特点是数据在线路上的传送不连续。传送时,字符间隔
3、不固定,各个字符可以是连续传送,也可以是间断传送,这完全取决于通信协议或约定。间断传送时,在停止位后,线路上自动保持为1,在异步通信时,通信双方必须事先约定。(1)字符格式。 双方要事先约定字符的编码形式、奇偶校验形式及起始位和停止位的规定。例如用ASC码通信,有效数据为7位,加一个奇偶校验位、一个起始位和一个停止位共10位。当然停止位也可以大于1位。(2)波特率(Baud rate)。波特率就是传送速率,即每秒传送的二进制位数。单位为bit/s或波特。波特率与字符的传送速率之间的关系为:波特率等于一个字符的二进制编码位数乘字符/秒,要求发送端与接收端的波特率必须一致。异步串行通信的波特率一般
4、为509600波特,高低不等。常用于计算机到CRT终端和字符打印机之间的通信、直通电报、无线电通信的数据发送及工业现场的数据远传等。2同步通信方式异步通信由于要在每个数据前后附加起始位、停止位,每发送一个字符约有20%的附加数据,占用了传输时间,降低了传送效率。同步通信则去掉每个数据的起始位和停止位,把要发送的数据按顺序连接成一个数据块,其中每个数据也由58位组成。在数据块的开头附加12个同步字符,在数据块的末尾加差错校验字符。同步通信的数据格式如图6-2所示。在数据块内部,数据与数据之间没有间隙。 图6-2 同步通信的格式同步通信时,先发送同步字符,数据发送紧随其后。接收方检测到同步字符后,
5、即开始接收数据,按约定的长度拼成一个个数据字节,直到整个数据接收完毕,经校验无传送错误则结束一帧信息的传送。若发送的数据块之间有间隔,则发送同步字符填充。同步通信进行数据传输时,发送和接收双方要保持完全的同步,因此要求发送和接收设备必须使用同一时钟。在近距离通信时可以采用在传输线中增加一根时钟信号线来解决;远距离通信时,可以通过解调器从数据流中提取同步信号,用锁相技术使收方得到和发送方时钟频率完全相同的时钟信号。如上所述,异步通信技术较为简单,应用范围广;同步通信传输速率高,适用于高速率、大容量的数据通信,但硬件复杂。612 串行通信的数据传送方式串行通信的数据传送方式有以下3种:(1)单工方
6、式。如图6-3(a)所示 ,单工方式的数据传送是单向的,一方(A端)固定为发送端,另一方(B端)固定为接收端。单工方式只需要一条数据线。 (2)半双工方式。如图6-3(b)所示, 半双工方式的数据传送是双向的,数据既可以从A端发送到B端,又可以由B端发送到A端。不过在同一时间只能做一个方向的传送。半双工方式需要一条数据线。(3)全双工方式。如图6-3(c)所示,全双工方式的数据传送是双向的,A、B两端既可同时发送,又可同时接收。全双工方式需要两条数据线。(a) 单工方式 (b) 半双工方式 (c) 全双工方式 图6-3 串行通信数据传送的3种方式613 串并转换和串行接口CPU通常是并行的输入
7、/输出数据,但和某些外部设备或其他计算机交换信息时可采用串行通信方式。这就要求把从CPU来的并行数据转换为串行数据送给I/O设备,或者把I/O设备送来的串行数据转换为并行数据送给CPU。为了实现这样的串并转换,应使用专门的串行接口电路再加以适当的软件配合来完成。现在市场上有各种多样的串行接口芯片,并且大多是可编程的多功能芯片,统称为通用异步接收/发送器UART,或者是通用同步接收/发送器USART。UART的基本组成是接收器、发送器和控制器。它的主要功能是以下几点。(1) 把并行数据转换为串行数据或者把串行数据转换为并行数据。这主要由发送器或接收器来完成。(2) 完成格式信息的插入和滤除及错误
8、检验。格式信息是指异步通信中的起始位、奇偶位和停止位等。这部分工作由控制器完成。62 MCS-51系列单片机的串行接口 对于单片机来说,为了进行串行通信,同样也需要有相应的串行接口电路。只不过这个接口电路不是单独的芯片,而是集成在单片机芯片的内部,成为单片机芯片的一个组成部分。MCS-51系列单片机有一个全双工的串行口,这个口即可以用于网络通信,也可以实现串行异步通信,还可以作为同步移位寄存器使用。621 MCS-51系列单片机串行口的结构MCS-51系列单片机串行口主要由发送数据缓冲器、发送控制器、输出控制门、接收控制器、输入移位寄存器、接收数据缓冲器等组成,如图6-4所示。发送缓冲器只能写
9、入,不能读出,接收缓冲器只能读出,不能写入,故两者使用同一个符号(SBUF),占用同一个地址(99H)。通过使用不同的读、写缓冲器的指令来决定是对哪一个缓冲器进行操作。例:执行MOV SBUF,A指令,是将数据写入发送缓冲器,执行MOV A,SBUF指令,是从接收缓冲器中读取数据。串行口还有两个专用寄存器SCON、PCON,SCON用来存放串行口的控制和状态信息,PCON用于改变串行通信的波特率,波特率发生器可由定时器T1或T2构成。 MCS-51系列单片机串行口正是通过对上述专用寄存器的设置、检测与读取来管理串行通信。 图6-4 串行口结构框图使用串行接口以后,串行收、发的工作主要由串行接口
10、来完成。在发送时,由CPU执行一条写指令把数据写入发送缓冲器,则启动串行口一位一位地向外发送。与此同时接收端也可以一位一位地接收数据,直到把一组数据接收完,送入接收缓冲器,然后通知CPU,CPU执行一条读指令把接收缓冲器的内容读入。可见,在整个串行收、发过程中,CPU操作的时间很少,使得CPU还可以从事其他各种操作,从而大大提高了CPU的效率。622 MCS-51单片机串行口的控制串行口的工作主要受串行口控制寄存器SCON的控制,另外也和电源控制寄存器PCON有关。1串行口控制寄存器SCON串行控制寄存器SCON用以设定串行口的工作模式、接收/发送控制及设置状态标志。字节地址98H,可位寻址,
11、其格式为: D7 D6 D5 D4 D3 D2 D1 D0SM0SM1SM2RENTB8RB8 TI RI SM0、SM1:串行口工作模式选择位,可选择4种工作模式,见表6-1所示。 表6-1 串行口的工作模式SM0 SM1 工 作 模 式 功 能 说 明 波 特 率 0 0 模式0同步移位寄存器方式/12 0 1 模式110位异步接收发送可变(由定时器控制) 1 0 模式211位异步接收发送/32或/64 1 1 模式311位异步接收发送可变(由定时器控制)SM2:多机通信控制位。主要用于模式2和模式3。若SM2=1,则允许多机通信。在主从式多机通信中,SM2用于从机的接收控制,当SM2=1
12、时,从机可接收地址帧,若接收到的第9位数据(RB8)为0时(数据帧),不启动接收中断标志RI(即RI=0),并且将接收到的前8位数据丢弃;只有当RB8为1时(地址帧),才将接收到的前8位数据送入SBUF中,并置位RI,以产生中断申请。当SM2=0时,从机可接收所有信息,即接收到一帧数据后,不论第9位数据是0还是1,都置RI=1,接收到的数据装入SBUF中。在模式1时,若SM2=1,则只有接收到有效停止位时,RI才置1,以便接收下一帧数据。在模式0时,SM2必须是0。REN:允许接收控制位。只有当RI=1时才允许接收数据;若REN=0,则禁止接收;该位相当于串行接收的开关,由软件置1或清0。TB
13、8:在模式2和模式3中,TB8是发送数据的第9位,根据发送数据的需要由软件置位或复位。它可作为奇偶校验位(单机通信),也可在多机通信中作为发送地址帧或数据帧的标志位。多机通信时,一般约定:发送地址帧时,设置TB8=1;发送数据帧时,设置TB8=0。在模式0或模式1中,该位未用。RB8:在模式2或模式3中,RB8为接收数据的第9位,它即可以是约定的奇偶校验位,也可以是约定的地址/数据标志位。可根据RB8被置位的情况对接收数据进行某种判断,例如多机通信时,若RB8=1,说明收到的数据为地址帧;RB8=0,收到的数据为数据帧。在模式1时,若SM2=0(即不是多机通信情况),则RB8是已接收到的停止位
14、。模式0中该位未用。TI:发送中断标志,在一帧数据发送结束时由硬件置位。在模式0中,串行发送完8位数据时,或其他模式串行发送到停止位的开始时由硬件置位,TI=1表示“发送缓冲器已空”,通知CPU可以发送下一帧数据。TI位可作为查询;也可作为中断申请标志位。TI不会自动复位,必须由软件清0。RI:接收中断标志,在接收到一帧有效数据后由硬件置位,在模式0中,接收完8位数据后,或其他方式中接收到停止位时由硬件置位。RI=1表示一帧数据接收完毕,并已装入接收缓冲器中,即表示接收缓冲器以满,通知CPU可取走数据。该位可作为查询,也可作为中断申请标志位。同样RI不会自动复位,必须由软件清0。以准备接收下一
15、帧数据。2电源控制寄存器PCONPCON是为了在CHMOS的MCS-51系列单片机上实现电源控制而设置的,字节地址为87H,不可位寻址,PCON的内容如下: D7 D6 D5 D4 D3 D2 D1 D0SMOD GF1GF0 PD IDL 其中,PCON的低4位是CHMOS器件的掉电方式控制位,这里不做介绍(详见2.7节)。在HMOS的MCS-51系列单片机中,PCON寄存器中只有最高位SMOD与串行口的工作有关,其他位都是虚设的。SMOD称为波特率倍增位。在模式1、模式2、模式3时,若SMOD=1,则波特率提高一倍;若SMOD=0,则波特率不加倍。复位时,PCON=00H。623 波特率设
16、计在串行通信中,收发双方对发送或接收的数据速率要有一定的约定,通过软件对MCS-51系列单片机的串行口编程可设置4种工作模式。其中,模式0和模式2的波特率是固定的,而模式1和模式3的波特率是可变的,由定时器T1或T2的溢出率决定。串行口的4种工作模式对应着3种波特率。由于输入的移位时钟来源不同,所以,各种模式的波特率计算公式也不同。1模式0的波特率在模式0时,每个机器周期产生一个移位时钟,发送或接收一位数据。所以,波特率固定为振荡频率的1/12,且不受SMOD的影响。即 模式0的波特率=fosc/122模式2的波特率模式2波特率的产生与模式0不同,模式2的波特率由系统的振荡频率fosc和PCO
17、N的最高位SMOD确定,当SMOD=0时,波特率为fosc/64;若SMOD=1,则波特率foscc/32,即 模式2的波特率=fosc 3模式1和模式3的波特率模式1和模式3的移位时钟脉冲由定时器T1的溢出率决定,故波特率由定时器T1的溢出率与SMOD值共同决定,即 模式1和模式3的波特率=T1的溢出率当T1做波特率发生器使用时,最典型的用法是使T1工作在模式2(初值自动加载)、定时方式,若计数初值为X,则每过“256X”个机器周期。定时器T1就会产生一次溢出。为了避免因溢出而引起中断,此时应禁止中断。这时,溢出周期为 (256X)溢出率为溢出周期的倒数,所以 波特率=此时,定时器T1工作在
18、模式2时的初值为: X=256对于52子系列单片机,通过设置T2CON寄存器中TCLK和RCLK这两位,可选择T2做串行口的波特率发生器。当TCLK=1时,选T2做发送波特率发生器,当RCLK=1时,选T2做接收波特率发生器,当两者均为1时,选T2做发送/接收波特率发生器。当T2做波特率发生器时,波特率取决于它的溢出率,而与SMOD的状态无关。计数时钟可以来自内部,也可以来自外部,决定于T2CON中的C/位的值,并且T2的溢出信号要经过一个16分频计数器(见5.2节T2的内部结构框图)。当C/=0时,选用内部时钟,计数频率为fosc/2,波特率由下式给出波特率=式中RCAP2H,RCAP2L为
19、自动重装载值。当C/=1时,选用外部时钟,计数频率为外部时钟频率,其最高频率为fosc/24。波特率=例6-1 已知MCS-51系列单片机系统晶振频率为11.0592 MHz,选用定时器T1工作模式2做波特率发生器,波特率为2400波特,求初值X。解:设波特率选择位SMOD=0,则有 X=256=244=F4H所以,(TH1)=(TL1)=F4H。系统晶振频率选为11.0592 MHz是为了使初值为整数,从而产生精确的波特率。如果串行通信选用很低的波特率,可将定时器T1置于模式0或模式1,即13位或16位定时方式。在这种情况下,T1溢出时,需重装初值,从而会使波特率产生一定的误差。此时,可用改
20、变初值的办法加以调整。表6-2列出了各种常用的波特率及其初值。 表6-2 常用波特率与其他参数的关系波 特 率SMOD 定 时 器 C / 模式 初值 模式0: 1 M bit/s 12 MHz 模式2: 375 K bit/s 12 MHz 1 模式1、模式3:62.5 K bit/s 19.2 K bit/s 9.6 K bit/s 4.8 K bit/s 2.4 K bit/s 1.2 K bit/s 137.5 bit/s 110 bit/s 110 bit/s 12 MHz 11.059 MHz 11.059 MHz 11.059 MHz11.059 MHz11.059 MHz11.
21、986 MHz 6 MHz 12 MHz110000000000000000 2 2 2 2 2 2 2 2 1 FFH FDH FDH FAH F4H E8H 1DH 72H FEEBH63 串行口工作模式 MCS-51系列单片机通过软件编程可使串行口有四种工作模式,由SCON中的SM0、SM1两位进行定义。631 模式0模式0是同步移位寄存器输入/输出方式,用于扩展I/O口。8位串行数据的输入或输出都是通过RXD端,而TXD端用于送出同步移位脉冲,作为外接器件的同步移位信号。波特率固定为fosc/12。模式0以8位为一帧数据,没有起始位和停止位,低位在前、高位在后,其帧格式为:D0 D1D
22、2D3D4D5D6D7 模式0的发送是在TI=0的情况下,由一条写发送缓冲器的指令开始。例如 MOV SBUF ,A CPU执行完该指令,串行口即将8位数据从RXD端送出(低位在前),同时,在TXD端发出同步移位脉冲。8位数据发送完毕后,由硬件置位TI=1。可通过查询TI位来确定是否发送完一组数据,TI=1表示发送缓冲器已空;TI=1也可作为中断请求信号,申请串行口发送中断。当要发送下一组数据时,需用软件使TI清0,然后才可发送下一组数据。模式0的接收是在RI=0和REN=1的条件下,启动串行口接收。接收数据由RXD端输入(低位在前),TXD端仍发出同步移位脉冲。接收到8位数据以后,由硬件使R
23、I=1。可通过查询RI位来确定是否接收到一组数据,RI=1表示接收数据已装入接收缓冲器,可以由CPU用指令读取;RI=1也可作为中断请求信号,申请串行口接收中断。,当CPU读取数据后,需用软件使RI清0,以准备接收下一组数据。在模式0中,SCON寄存器中的SM2、RB8、TB8都不起作用,一般设它们为0即可。632 模式1串行口定义为模式1时,是串行异步通信方式。TXD为数据发送端,RXD为数据接收端。波特率可变,由定时器T1的溢出率以及SMOD位决定。一帧数据由10位组成,包括1位起始位、8位数据位、1位停止位,其帧格式为起始 D0 D1D2D3D4D5D6D7停止模式1的发送也是在TI=0
24、时由一条写发送缓冲器SBUF的指令开始的。启动发送后,串行口自动地插入一位起始位(逻辑0),接着是8位数据(低位在前),然后又插入一位停止位(逻辑1),在发送移位脉冲作用下,依次由TXD端发出。一帧信息发完之后,自动维持TXD端的信号为1。在8位数据发完之后,也就是在插入停止位时,使TI置1,用以通知CPU可以发送下一帧数据。模式1发送时的定时信号,也就是发送移位脉冲,是由定时器1送来的溢出信号经过16或32分频(取决于SMOD的值是0还是1)而取得的。因此,模式1的波特率受定时器控制,可以随着定时器初值的不同而变化。模式1的接收是在REN置1的前提下,串行口采样引脚RXD(P3.0)。在无信
25、号时,RXD端的状态为1,当采样到1至0的跳变时,确认是起始位“0”,就开始接收一帧数据。在接收移位脉冲的控制下,把收到的数据一位一位地送入输入移位寄存器,直到9位数据全部收齐(包括一位停止位)。当RI=0且停止位为1或者SM2=0时,8位数据送入接收缓冲器SBUF,停止位进入RB8,同时使RI置1;否则,8位数据不装入SBUF,放弃接收的结果。所以,模式1接收时,应先用软件清RI或SM2标志。在接收操作时,定时信号有两种:一种是接收移位脉冲,它的频率和发送波特率相同,也是由定时器1的溢出信号经过16或32分频而得到的;另一种是接收字符的检测脉冲,它的频率是接收移位脉冲的16倍,即在接收一位数
26、据的期间,有16个检测脉冲,并以其中的第7、8、9这3个脉冲作为真正的对接收信号的采样脉冲。对这3次采样结果采取三中取二的原则来决定所检测到的值。采取这种措施的目的在于抑制干扰。由于采样信号总是在接收位的中间位置,这样即可以避开信号两端的边沿失真,也可以防止由于收发时钟频率不完全一致而带来的接收错误。633 模式2模式2也是串行异步通信方式。TXD为数据发送端,RXD为数据接收端。一帧数据由11位组成,包括1位起始位、8位数据位、一位可编程位、1位停止位,其帧格式为: 起始 D0 D1D2D3D4D5D6D70/1停止模式2的波特率是固定的,且有两种。一种是fosc/32;另一种是fosc/6
27、4。模式2的发送包括9位有效数据,在启动发送之前,要把发送的第9位数值装入SCON寄存器中的TB8位,这第9位数据起什么作用串行口不做规定,完全由用户来安排。用户需根据通信协议用软件设置TB8(如做奇偶校验位或地址/数据标志位)。准备好TB8的值以后,在TI=0的条件下,就可以执行一条写发送缓冲器SBUF的指令来启动发送。串行口能自动把TB8取出,并装入到第9位数据的位置,逐一发送出去。发送完毕,使TI置1。这些过程与模式1基本相同。模式2的接收与模式1基本相似。不同之处是要接收9位有效数据。在模式1时是把停止位当作第9位数据来处理,而在模式2(或模式3)中存在着真正的第9位数据。因此,接收数
28、据真正有效的条件为:(1) RI=0;(2) SM2=0或收到的第9位数据为1。第一个条件是提供“接收缓冲器已空”的信息,即CPU已把SBUF中上次收到的数据读走,允许再次写入。第二个条件则提供了根据SM2的状态和所接收到的第9位状态来决定接收数据是否有效。若第9位是一般的奇偶校验位(单机通信时),应令SM2=0,以保证可靠的接收。若第9位作地址/数据标志位(多机通信时),应令SM2=1,则当第9位为1时,接收的信息为地址帧,串行口将接收该组信息。若上述两个条件成立,接收的前8位数据进入SBUF以准备让CPU读取,接收的第9位数据进入RB8,同时置位RI。若以上条件不成立,则这次接收无效,放弃
29、接收结果,即8位数据不装入SBUF,也不置位RI。634 模式3模式3同样是串行异步通信方式,其一帧数据格式,接收、发送过程与模式2完全相同,所不同的仅在于波特率。模式2的波特率只有固定的两种,而模式3的波特率由定时器T1的溢出率及SMOD决定。这一点与模式1相同。64 串行口应用举例MCS-51系列单片机的串行口基本上是异步通信接口,利用串行口控制寄存器SCON中的有关控制位,还可以实现多机通信。本节将介绍MCS-51系列单片机的串行口在作I/O口扩展及一般异步通信和多机通信中的应用。641 用串行口扩展I/O口串行口的模式0不属于通信,它的主要用途是可以和外接的移位寄存器结合来进行并行I/
30、O口的扩展。这种方法不占用片外RAM地址,而且还能简化单片机系统的硬件结构。缺点是操作速度较慢。当串行口别无它用时,就可利用串行口模式0来扩展并行I/O口。此处将给出实用电路和简单的控制指令。1扩展并行输出口MCS-51系列单片机的串行口在模式0时外接一个串入/并出的移位寄存器,就可以扩展一个8位并行输出口。所用的移位寄存器应该带有输出允许控制端,这样可以避免在数据串行输入时,并行输出端出现不稳定的输出。图6-5(a)是使用串入/并出移位寄存器CD4094(也可用74LS164)扩展并行输出口的接口电路。移位寄存器的STB为输出允许控制端,STB=1时,打开输出控制门,实现并行输出。 (a) 扩展并行输出口 (b) 扩展并行输入口 图6-5 利用串行口扩展并行I/O口串行口模式0的数据输出可以采用中断方式,也可以采用查询方式,但无论采用哪种方式都要借助于TI标志。采用中断方式时,是靠TI置位后产生中断申请,在中断服务程序中发送下一组数据。采用查询方式时,需查询TI的值,只要TI为0就继续查询,直到TI为1后结束查询,然后进入下一组数据的发送。无论采用什么方式,在使用串行口之前,都要先对SCO
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1