1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第七章,89C51,串行口及串行通信技术,7.1,串行通信基本知识,7.2,串行口及应用,7.3 RS-232C,标准接口总线及串行通信硬件设计,7.4 89C51,与,89C51,点对点异步通信,7.5 89C51,与,PC,机间通信软件的设计,7.6 PC,机与多个单片机间的通信,1,7.0,绪,如,89C51,与存储器,,存储器与存储器,,89C51,与并行打印机之间的通信。,89C51,处理,8,位数据,至少需
2、要,8,条数据线。,计算机之间、计算机与其终端之间的距离有时,非常远,此时,电缆线过多是不经济的,数据传送,:,并行方式,2,串行通信只用一位数据线传送数据的位信号,即使加上几条通信联络控制线,也用不了很多电缆线。,串行通信适合远距离数据传送,,如大型主机与其远程终端之间、处于两地的计算机之间采用串行通信就非常经济。,串行通信要求有转换数据格式、时间控制等逻辑电路,这些电路目前已被集成在大规模集成电路中(称为可编程串行通信控制器),使用很方便。,7.0,绪,数据传送,:,串行方式,3,本章将介绍,89C51,串行口的结构及应用,,一台,PC,机控制多台,89C51,前沿机的分布式系统,,通信接
3、口电路和软件设计,并给出设计实例,包括接口电路、程序框图、主程序和接收,/,发送子程序。,7.0,绪,4,7.1,串行通信基本知识,7.1.1,数据通信,7.1.2,串行通信的传输方式,7.1.3,异步通信和同步通信,7.1.4,串行,通信的过程及通信协议,5,7.1.1,数据通信,通信,CPU,与外设之间进行信息交换,,多台计算机之间也往往要交换信息,,所有这些信息交换均可称为通信。,通信方式有两种,-,并行通信和串行通信,。,6,7.1.1,数据通信,通常根据信息传送的距离决定采用哪种通信方式。,例如,,PC,机与外部设备(如打印机等)通信时,如果距离小于,30m,,可采用并行通信方式;当
4、距离大于,30m,时,则要采用串行通信方式。,89C51,单片机具有并行和串行二种基本通信方式,。,7,并行通信,数据的各位同时进行传送(发送或接收)的通信方式。,优点 传送速度快;,缺点 数据有多少位,就需要多少根传送线。,并行通信在位数多、传送距离又远时不合适,7.1.1,数据通信,8,串行通信,数据是一位一位按顺序传送的通信方式。,优点,只需一对传输线(利用电话线就可作为传输线),大大降低了传送成本,适用远距离通信;,缺点,传送速度较低。,设并行传送,N,位数据所需时间位,T,,那么串行传送的时间至少为,NT,实际上总是大于,NT,的。,7.1.1,数据通信,9,10,7.1.2,串行通
5、信的传输方式,串行通信的传送方式通常有三种:,单向(或单工),半双向(或半双工),全双向(全双工),11,7.1.2,串行通信的传输方式,单向(或单工),:,只允许数据向一个方向传送,半双向(或半双工),:,允许数据向两个方向中的任一方向传送,但每次只能有一个站点发送,全双向(全双工),:,允许同时双向传送数据,因此,全双工配置是一对单向配置,它要求两端的通信设备都具有完整和独立的发送和接受能力。,12,串行通信中的数据传送方式,13,7.1.3,异步通信和同步通信,串行通信两种基本方式:异步通信和同步通信,1,、异步通信,数据是一帧一帧(包括一个字符代码或一字节数据)传送的,每一帧的数据格式
6、如图所示,14,图 异步通信数据格式,15,1,、异步通信,在帧格式中,一个字符由四个部分组成:,起始位、数据位、奇偶校验位、停止位,首先是一个起始位(,0,),,然后是,5,位,-8,位数据(规定低位在前,高位在后),,接下来是奇偶校验位(可省略),,最后是停止位(,1,)。,16,1,、异步通信,起始位(,0,):,信号只占用一位,用来通知接收设备一个待接收的字符开始到达。线路上在不传送字符时应保持为,1,。接收端不断检测线路的状态,若连续为,1,以后又测到一个,0,,就知道发来一个新字符,应马上准备接收。字符的起始位还被用作同步接收端的时钟,以保证以后的接收能正确进行。,数据位:,起始位
7、后面紧接着是,数据位,,它可以是,5,位、,6,位、,7,位或,8,位。,17,1,、异步通信,奇偶校验(,D8,):,只占一位,但在字符中也可以规定不用奇偶校验位,则这一位就可省去。也可用这一位(,1/0,)来确定这一帧中的字符所代表信息的性质(地址,/,数据等)。,停止位:,用来表征字符的结束,它一定是高电位(逻辑,1,)。停止位可以是,1,位、,1.5,位或,2,位。接收端收到停止位后,知道上一字符已传送完毕,同时,也为接收下一个字符做好准备,-,只要再接收到,0,,就是新的字符的起始位。若停止位以后不是紧接着传送下一个字符,则使线路电平保持为高电平(逻辑,1,)。,18,例如,规定用,
8、ASCII,编码,字符为七位,加一个奇偶校验位、一个起始位、一个停止位,则一帧共十位。,1,、异步通信,19,2,、同步通信,在数据开始传送前用同步字符来指示(常约定,1,个,-2,个),并由时钟来实现发送端和接收端同步,即检测到规定的同步字符后,下面就连续按顺序传送数据,直到通信告一段落。,同步传送时,字符与字符之间没有间隙,也不用起始位和停止位,仅在数据块开始时用同步字符,SYNC,来指示,其数据格式如图所示。,20,图 同步通信数据格式,21,2,、同步通信,同步字符的插入可以是单同步字符方式或双同步字符方式,如图所示,然后是连续的数据块。同步字符可由用户约定。按同步方式通信时,先发送同
9、步字符,接收方检测到同步字符后,即准备接收数据。,在同步传送时,要求用时钟来实现发送端与接收端之间的同步。为了保证接收正确无误,,发送方除了传送数据外,还要同时传送时钟信号。,同步传送可以提高传输速率(达,56kb/s,或更高),但硬件比较复杂。,22,3,、波特率(,Baud rate,),波特率,即数据传送速率,表示每秒钟传送二进制代码的位数,它的单位是,b/s,。,波特率对于,CPU,与外界的通信是很重要的。,假设数据传送速率是,120,字符,/s,,而每个字符格式包含,10,个代码位(,1,个起始位、,1,个终止位、,8,个数据位)。这时,传送的波特率为:,10b,字符,120,字符,
10、s,1200b,s,23,3,、波特率(,Baud rate,),每一位代码的传送时间,Td,为波特率的倒数。,Td,1b,(,1200bs,-1,),0.833ms,异步通信的传送速率在,50b/s-19200b/s,之间,常用于计算机到终端机和打印机之间的通信、直通电报以及无线电通信的数据发送等。,24,7.1.4,串行通信的过程及通信协议,1,、串并转换与设备同步,两个通信设备在串行线路上成功地实现通信必须解决两个问题:,一是串并转换,,即如何把要发送的并行数据串行化,把接收的 串行数据并行化;,二是设备同步,,即同步发送设备与接收设备的工作节拍,以 确保发送数据在接收端被正确读出。,2
11、5,(,1,)串并转换,串行通信是将计算机内部的并行数据转换成串行数据,将其通过一根通信线传送;并将接收的串行数据再转换成并行数据送到计算机中。,26,在计算机串行发送数据之前,计算机内部的并行数据被送入移位寄存器并一位一位地输出,将并行数据转换成串行数据。,如图,所示。,在接收数据时,来自通信线路的串行数据被压入移位寄存器,满,8,位后并行送到计算机内部。,如图,所示。,在串行通信控制电路中,串,-,并、并,-,串转换逻辑被集成在串行异步通信控制器芯片中。,27,28,29,(,2,)设备同步,进行串行通信的两台设备必须同步工作才能有效地检测通信线路上的信号变化,从而采样传送数据脉冲。,设备
12、同步对通信双方有两个共同要求:,一是通信双方必须采用统一的编码方法;,二是通信双方必须能产生相同的传送速率。,30,采用统一的编码方法确定了一个字符二进制表示值的位发送顺序和位串长度,当然还包括统一的逻辑电平规定,即电平信号高低与逻辑,1,和逻辑,0,的固定对应关系。,通信双方只有产生相同的传送速率,才能确保设备同步,这就要求,发送设备和接收设备采用相同频率的时钟,。发送设备在统一的时钟脉冲上发出数据,接收设备才能正确检测出与时钟脉冲同步的数据信息。,31,2,、串行通信协议,通信协议是对数据传送方式的规定,包括数据格式定义和数据位定义等。,通信双方必须遵守统一的通信协议。串行通信协议包括同步
13、协议和异步协议两种。,在此只讨论异步串行通信协议和异步串行协议规定的字符数据的传送格式。,32,2,、串行通信协议,(,1,)起始位,通信线上没有数据被传送时处于逻辑,1,状态。,当发送设备要发送一个字符数据时,首先发出一个,逻辑,0,信号,这个逻辑低电平就是起始位。,起始位通过通信线传向接收设备,接收设备检测到这个逻辑低电平后,就开始准备接收数据位信号。,起始位所起的作用就是设备同步,,通信双方必须在传送数据位前协调同步。,33,2,、串行通信协议,(,2,)数据位,当接收设备收到起始位后,紧接着就会收到数据位。,数据位的个数可以是,5,、,6,、,7,或,8,。,89C51,串行口采用,8
14、位或,9,位数据传送。这些数据位被接收到移位寄存器中,构成传送数据字符。在字符数据传送过程中,数据位从最低有效位开始发送,依次顺序在接收设备中被转换为并行数据。,34,2,、串行通信协议,(,3,)奇偶校验位,数据位发送完之后,可以发送奇偶校验位。,奇偶校验用于,有限差错检测,,通信双方需约定已知的奇偶校验方式。如果选择偶校验,那么组成数据位和奇偶位的逻辑,1,的个数必须是偶数;如果选择奇校验,那么逻辑,1,的个数必须是奇数。,35,2,、串行通信协议,(,4,)停止位,在奇偶位或数据位(当无奇偶校验时)之后发送的是停止位。,停止位是一个字符数据的结束标志,可以是,1,位,,1.5,位或,2
15、位的高电平。接收设备收到停止位之后,通信线路上便又,恢复逻辑,1,状态,,直至下一个字符数据的起始位到来。,36,2,、串行通信协议,(,5,)波特率设置,通信线上传送的所有位信号都保持一致的信号持续时间,每一位的信号持续时间都由数据传送速度确定,而传送速度是以每秒多少个二进制位来衡量的,这个速度叫波特率。,如果数据以,300,个二进制位每秒在通信线上传送,那么传送速度为,300,波特,通常记为,300b/s,。,37,2,、串行通信协议,(,6,)挂钩(握手)信号约定,(见本章,7.4,节实例),38,7.2,串行口及应用,7.2.1 89C51,串行口,7.2.2 89C51,串行口的工
16、作方式及应用,39,7.2.1 89C51,串行口,1,、结 构,2,、串行口控制字及控制寄存器,3,、串行通信工作方式,4,、波特率设计,40,1,、结 构,引脚,RXD,(,P3.0,,串行数据接收端),引脚,TXD,(,P3.1,,串行数据发送端,),内部有,两个物理,独立的接收、发送缓冲器,SBUF,,占用同一地址,99H,,可同时发送、接收数据。,发送缓冲器只能写入,不能读出;接收缓冲器只能读出,不能写入。,串行发送与接收的速率与移位时钟同步。,89C51,用定时器,T1,作为串行通信的波特率发生器,,T1,溢出率经,2,分频(或不分频)后又经,16,分频作为串行发送或接收的移位脉冲
17、移位脉冲的速率即是波特率,。,41,图,串行口内部结构示意简图,42,1,、结 构,接收器是双缓冲结构,,在前一个字节被从接收缓冲器,SBUF,读出之前,第二个字节即开始被接收(串行输入至移位寄存器),但是,在第二个字节接收完毕而前一个字节,CPU,未读取时,会丢失移位寄存器的字节数据。,串行口的发送和接收都是以特殊功能寄存器,SBUF,的名义进行读或写的。当向,SBUF,发,“,写,”,命令时,:,MOV SBUF,A,即是向发送缓冲器,SBUF,装载并开始由,TXD,引脚向外发送一帧数据,发送完便使发送中断标志位,TI=1,。,43,1,、结 构,在满足串行口接收中断标志位,RI,(,
18、SCON.0,),=0,的条件下,置允许接收位,REN,(,SCON.4,),=1,就会接收一帧数据进入移位寄存器,并装载到接收,SBUF,中,同时使,RI=1,。当发读,SBUF,命令时,:,MOV A,SBUF,便由接收缓冲器(,SBUF,)取出信息通过,89C51,内部总线送,CPU,。,对于发送缓冲器,因为发送时,CPU,是主动的,不会产生重叠错误,一般不需要用双缓冲器结构来保持最大传送速率。,44,2,、串行口控制字及控制寄存器,89C51,串行口是可编程接口,用到两个特殊功能寄存器:,SCON,(,98H,),PCON,(,87H,)(电源控制寄存器)。,(,1,),SCON,(,
19、98H,),89C51,串行通信的方式选择、接收和发送控制以及串行口的状态标志等均由特殊功能寄存器,SCON,控制和指示,其控制字格式如图所示:,45,图 串行口控制寄存器,SCON,46,2,、串行口控制字及控制寄存器,SM0,和,SM1,(,SCON.7,,,SCON.6,),串行口工作方式选择位。,两个选择位对应,4,种通信方式,如表,7-1,所示。其中,,fosc,是振荡频率。,47,2,、串行口控制字及控制寄存器,SM2,(,SCON.5,),多机通信控制位,主要用于方式,2,和 方式,3,。,若置,SM2=1,,则允许多机通信。,当一片,89C51,(主机)与多片,89C51,(从
20、机)通信时,所有,从机的,SM2,位都置,1,。,主机首先发送的一帧数据为地址,即从机机号,其中第,9,位为,1,,所有的从机接收到数据后,将其中第,9,位装入,RB8,中。,各个从机根据收到的第,9,位数据(,RB8,中)的值来决定从机可否再接收主机的信息。若(,RB8,),0,,说明是数据帧,则使接收中断标志位,RI,0,,信息丢失;若(,RB8,),1,,说明是地址帧,数据装入,SBUF,并置,RI,1,,中断所有从机,被寻址的目标从机清除,SM2,以接收主机发来的一帧数据。其他从机仍然保持,SM2,1,。,48,2,、串行口控制字及控制寄存器,SM2,(,SCON.5,),多机通信控制
21、位,主要用于方式,2,和方式,3,。,若,SM2=0,即不属于多机通信情况,则接收一帧数据后,不管第九位数据是,0,还是,1,都制,RI=1,接收到的数据装,SBUF,。,根据,SM2,这个功能,可实现多个,89C51,应用系统的串行通信。,在方式,1,时,若,SM2=1,则只有接收到有效停止位时,RI,才置,1,以便接收下一帧数据。在方式,0,时,SM2,必须是,0,。,49,2,、串行口控制字及控制寄存器,REN,(,SCON.4,),允许接收控制位。,由软件置,1,或清,0,,只有当,REN,1,时才允许接收,相当于串行接收的开关;,若,REN,0,,则禁止接收。,在串行通信接收控制过程
22、中,如果满足,RI,0,和,REN,1,(允许接收)的条件,就允许接收,一帧数据就装载入接收,SBUF,中。,50,2,、串行口控制字及控制寄存器,TB8,(,SCON.3,),发送数据的第,9,位(,D8,)装入,TB8,中。,在方式,2,或方式,3,中,根据发送数据的需要由软件置位或复位。在许多通信协议中可用作奇偶校验位,也可在多机通信中作为发送地址帧或数据帧的标志位。,对于后者,,TB8,1,,说明该帧数据为地址;,TB8,0,,说明该帧数据为数据字节。,在方式,0,或方式,1,中,该位未用。,51,2,、串行口控制字及控制寄存器,RB8,(,SCON.2,),接收数据的第,9,位。,在
23、方式,2,或方式,3,中,接收到的第,9,位数据放在,RB8,位。,或是约定的奇,/,偶校验位,,或是约定的地址,/,数据标识位。,在方式,2,和方式,3,多机通信中,若,SM2,1,,如果,RB8,1,,说明收到的数据为地址帧。,在方式,1,中,若,SM2,0,(即不是多机通信情况),,RB8,中 存放的是已接收到的停止位。,在方式,0,中,该位未用。,52,2,、串行口控制字及控制寄存器,TI,(,SCON.1,),发送中断标志。,在一帧数据发送完时被置位。在方式,0,串行发送第,8,位结束或其他方式串行发送到停止位的开始时由硬件置位,可用软件查询。它同时也申请中断,,TI,置位意味着向,
24、CPU,提供,“,发送缓冲器,SBUF,已空,”,的信息,,CPU,可以准备发送下一帧数据。,串行口发送中断被响应后,,TI,不会自动清,0,,必须由软件清,0,。,53,2,、串行口控制字及控制寄存器,RI,(,SCON.0,),接收中断标志。,在接收到一帧有效数据后由硬件置位。在方式,0,中,第,8,位数据发送结束时,由硬件置位;在其他三种方式中,当接收到停止位中间时由硬件置位。,RI,1,,申请中断,表示一帧数据接收结束,并已装入接收,SBUF,中,要求,CPU,取走数据。,CPU,响应中断,取走数据。,RI,也必须由软件清,0,,清除中断申请,并准备接收下一帧数据。,54,2,、串行口
25、控制字及控制寄存器,(,2,),PCON,(,87H,),电源控制寄存器,PCON,中只有,SMOD,位与串行口工作有关,如图所示,图 电源控制寄存器,PCON,55,2,、串行口控制字及控制寄存器,SMOD,(,PCON.7,),波特率倍增位。,在串行口方式,1,、方式,2,和方式,3,时,波特率和,SMOD,成正比,亦即当,SMOD,1,时,波特率提高一倍。,复位时,,SMOD,0,。,56,3,、串行通信工作方式,根据实际需要,,89C51,串行口可设置,4,种工作方式,可有,8,位、,10,位或,11,位帧格式。,方式,0,以,8,位数据为一帧,,不设起始位和停止位,先发送或接收最低位
26、其帧格式如下:,57,方式,1,以,10,位为一帧传输,,设有,1,个起始位(,0,),,8,个数据位和,1,个停止位(,1,)。其帧格式为:,3,、串行通信工作方式,58,3,、串行通信,工作方式,方式,2,和方式,3,以,11,位为,1,帧传输,,设有,1,个起始位(,0,),,8,个数据位,,1,个附加第,9,位和,1,个停止位(,1,)。其帧格式为,:,附加第,9,位(,D8,)由软件置,1,或清,0,。,发送时在,TB8,中,接收时送,RB8,中。,59,同步移位寄存器输入,/,输出方式,,常用于扩展,I/O,口,RXD:,数据输入或输出端,,TXD,:输出移位时钟,作为外接部件的
27、同步信号,这种方式不适用于两个,89C51,之间的直接数据通信,但可以通过外接移位寄存器来实现单片机的接口扩展。,(,1,)串行口方式,0,60,图 方式,0,发送电路及时序,61,图 方式,0,接收电路及时序,62,74LS164,可用于扩展并行输出口,,74LS165,可用于扩展输入口。,在这种方式下,收,/,发的数据为,8,位,低位在前,无起始位、奇偶校验位及停止位,波特率是固定的。,63,发送过程中,当执行一条将数据写入发送缓冲器,SBUF,(,99H,)的指令时,串行口把,SBUF,中,8,位数据以,fosc/12,的波特率从,RXD,(,P3.0,)端输出,发送完毕置中断标志,TI
28、1,。,方式,0,发送时序如,图,所示。写,SBUF,指令在,S6P1,处产生一个正脉冲,在下一个机器周期的,S6P2,处数据的最低位输出到,RXD,(,P3.0,)脚上;再在下一个机器周期的,S3,,,S4,,,S5,输出移位时钟为低电平,而在,S6,及下一个机器周期的,S1,,,S2,为高电平,就这样将,8,位数据由低位至高位一位一位顺序通过,RXD,线输出,并在,TXD,脚上输出,fosc/12,的移位时钟,,在,“,写,SBUF,”,有效后的第,10,个机器周期的,S1P1,将发送中断标志,TI,置位。,64,接收时,用软件置,REN=1,(同时,,RI=0,),即开始接收。,接收时
29、序如图所示。,当使,SCON,中的,REN=1(RI=0),时,产生一个正脉冲,在下一个机器周期的,S3P1S5P2,,从,TXD(P3.1),脚上输出低电平的移位时钟,在此机器周期的,S5P2,对,P3.0,脚采样,并在本机器周期的,S6P2,通过串行口内的输入移位寄存器将采样值移位接收;,在同一个机器的,S6P1,到下一个机器周期的,S2P2,,输出移位时钟为高电平。于是,将数据字节从低位至高位一位一位地接收下来并装入,SBUF,中。在启动接收过程(即写,SCON,,清,RI,位)将,SCON,中的,RI,清,0,之后的第,10,个机器周期的,S1P1,,,RI,被置位。这一帧数据接收完毕
30、可进行下一帧接收。,65,3,、串行通信工作方式,(,2,)串行口方式,1,真正用于串行发送或接收,为,10,位通用异步接口。,TXD,与,RXD,分别用于发送与接收数据。,收发一帧数据的格式为,1,位起始位、,8,位数据位、,1,位停止位,共,10,位。(低位在前),在接收时,停止位进入,SCON,的,RB8,,此方式的传送波特率可调。,串行口方式,1,的发送和接收时序,如图所示,66,图 方式,1,发送和接收时序,67,数据从引脚,TXD,(,P3.1,)端输出。,当执行数据写入发送缓冲器,SBUF,的命令时,就启动了发送器开始发送。,发送时的定时信号,也就是发送移位时钟(,TX,时钟)
31、是由定时器,T1,送来的溢出信号经过,16,分频或,32,分频(取决于,SMOD,的值)而得到的,,TX,时钟就是发送波特率,方式,1,的波特率是可变的。发送开始的同时,,SEND,变为有效,将起始位向,TXD,输出;,此后每经过一个,TX,时钟周期产生一个移位脉冲,并由,TXD,输出一个数据位,;,8,位数据位全部发送完后,置为位,TI,,并申请中断置,TXD,为,1,作为停止位,再经一个时钟周期,,SEND,失效。,方式,1,发送时:,68,数据从引脚,RXD(P3.0),端输入,。接收是在,SCON,寄存器中,REN,位置,1,的前提下,并检测到起始位(,RXD,上检测到,10,的跳变
32、即起始位)而开始的。,接收时,定时信号有两种(,如图,(b),所示,):,一种是接收移位时钟(,RX,时钟),它的频率和传送波特率相同,也是由定时器,T1,的溢出信号经过,16,或,32,分频而得到的;,另一种是位检测器采样脉冲,它的频率是,RX,时钟的,16,倍,即在一位数据期间有,16,位检测器采样脉冲,为完成检测,以,16,倍于波特率的速率对,RXD,进行采样。,方式,1,接收时:,69,为了接受准确无误,在正式接受数据之前,还必须判定这个,10,跳变是否是干扰引起的。为此,在这位中间(即一位时间分成,16,等份,在第,7,,第,8,及第,9,等份)连续对,RXD,采样三次,取其中两次
33、相同的值进行判断。这样能较好地消除干扰的影响。当确认是真正的起始位(,0,)后,就开始接受一帧数据。当一帧数据接受完毕后,必须同时满足以下两个条件,这次接受才真正有效。,70,RI=0,,即上一帧数据接收完成时,,RI=1,发出的中断请求已被响应,,SBUF,中数据已被取走。由软件使,RI=0,,以便提供,“,接收,SBUF,已空,”,的信息。,SM2=0,或收到的停止位为,1,(方式,1,时,停止位进入,RB8,),则将接收到的数据装入串行口的,SBUF,和,RB8,(,RB8,装入停止位),并置位,RI,;如果不满足,接收到的数据不能装入,SBUF,,这意味着该帧信息将会丢失。,值得注意的
34、是,在整个接收过程中,保证,REN=1,是一个先决条件。只有当,REN=1,时,才能对,RXD,进行检测。,71,3,、串行通信工作方式,(,3,)串行口方式,2,和方式,3,两种方式操作是一样的,所不同的只是波特率。,每帧,11,位异步通信格式,即,1,位起始位,,8,位数据位(低位在前),,1,位可编程的第,9,数据位和,1,位停止位。,发送时,第,9,数据位(,TB8,)可以设置为,1,或,0,,也可将奇偶位装入,TB8,,从而进行奇偶校验;,接收时,第,9,数据位进入,SCON,的,RB8,。,发送、接收时序如图所示。,72,图 方式,2,、方式,3,发送和接收时序,73,发送前,,先
35、根据通信协议由软件设置,TB8,(如作奇偶校验位或地址,/,数据标志位),然后将要发送的数据写入,SBUF,,即可启动发送过程。串行口能自动把,TB8,取出,并装入到第,9,位数据位的位置,再逐一发送出去。发送完毕,使,TI=1,。,接收时,,使,SCON,中的,REN=1,,允许接收。当检测到,RXD(P3.0),端有,10,的跳变(起始位)时,开始接收,9,位数据,送入移位寄存器(,9,位)。当满足,RI=0,且,SM2=0,,或接收到的第,9,位数据为,1,时,前,8,位数据送入,SBUF,,附加的第,9,位数据送入,SCON,中的,RB8,,置,RI,为,1,;否则,这次接收无效,也不
36、置位,RI,。,74,4,、波特率设计,串行口的四种工作方式对应着三种波特率。,由于输入的移位时钟来源不同,因此,各种方式的波特率计算公式也不同。,75,方式,0,时,发送或接收一位数据的,移位时钟脉冲,由,S6,(即第,6,个状态周期,第,12,个节拍)给出,即每个机器周期产生一个移位时钟,发送或接收一位数据。因此,波特率固定为振荡频率的,1/12,,并不受,PCON,寄存器中,SMOD,位的影响。,图 串行口方式,0,波特率的产生,(,1,)方式,0,的波特率,76,方式,0,波特率,fosc/12,注意,符号,“,”,表示左面的表达式只是引拥右面表达式的数值,即右面的表达式是提供了一种计
37、算的方法。,77,(,2,)方式,2,的波特率,SMOD=0,时,波特率为,fosc,的,1/64,;,SMOD=1,时,波特率为,fosc,的,1/32,。,方式,2,波特率取决于,PCON,中,SMOD,位的值,波特率,2,SMOD,/64fosc,图 串行口方式,2,波特率的产生,78,(,3,)方式,1,和方式,3,的波特率,方式,1,和方式,3,的移位时钟脉冲由定时器,T1,的溢出率决定,波特率由定时器,T1,的溢出率与,SMOD,值同时决定。,方式,1,、方式,3,波特率,T1,溢出率,/n,图 串行口方式,1,、方式,3,波特率的产生,79,SMOD=0,时,,n=32,SMOD
38、1,时,,n=16,。,所以,可用下式确定方式,1,和方式,3,的波特率:,波特率,(T1,溢出速率,),2,SMOD,/32,其中,,T1,溢出速率取决于,T1,的计数速率(计数速率,fosc/12,)和,T1,预置的处置。,若定时器,T1,采用模式,1,时,波特率公式如下:,波特率,2,SMOD,/32(fosc/12)/(2,16,-,初值,),80,表,7-2,常用波特率与其他参数选取关系,表,7-2,列出了串行口方式,1,、方式,3,常用波特率及其初值,。,81,定时器,T1,用作波特率发生器时,,通常选用定时器模式,2,(自动重装初值定时器)比较实用,。,要设置定时器,T1,为定
39、时方式,计数速率为,fosc/12,注意应禁止,T1,中断,以免溢出而产生不必要的中断。,先设定,TH1,和,TL1,定时即输初值为,X,,那么每过,“,2,8,-X,”,个机器周期,定时器,T1,就会产生一次溢出。,82,因此,,T1,溢出速率为,T1,溢出速率,(fosc/12)/(2,8,-X),于是,可得出,定时器,T1,模式,2,的初始值,X,:,83,例,7-1,:,89C51,单片机时钟振荡频率为,11.0592MHz,,选用定时器,T1,工作模式,2,作为波特率发生器,波特率为,2400b/s,,求初值。,解:设置波特率控制为,(SMOD)=0,所以,,(TH1)=(TL1)=
40、F4H,。,84,系统晶体振荡频率选为,11.0592MHz,就是为了使初值为整数,从而产生精确的波特率。,如果串行通信选用很低的波特率,可将定时器,T1,置于模式,0,或模式,1,,即,13,位或,16,位定时方式;但在这种情况下,,T1,溢出时,需要中断服务程序重装初值。中断响应时间和执行指令时间会使波特率产生一定的误差,,可用改变初值的办法加以调整。,85,7.2.2 89C51,串行口的应用,89C51,串行口的四种工作方式传送的数据位数叙述如下:,方式,0,:,移位寄存器输入,/,输出方式。,串行数据通过,RXD,线输入或输出,,TXD,线专用于输出时钟脉冲给外部移位寄存器。,方式,
41、0,可用来,同步输出或接收,8,位数据,(最低位首先输出),波特率固定为,fosc/12,86,方式,1,:,10,位异步接收,/,发送方式。一帧数据包括,1,位起始位(,0,),,8,位数据位和,1,位停止位(,1,)。串行接口电路在发送时能自动插入起始位和停止位;在接收时,停止位进入特殊功能寄存器,SCON,的,RB8,位。方式,1,的传送波特率是可变的,可通过改变内部定时器的定时值来改变波特率。,方式,2,:,11,位异步接收,/,发送方式。除了,1,位起始位、,8,位数据位、,1,位停止位之外,还可以插入第,9,位数据位。,方式,3,:,同方式,2,,只是波特率可变。,7.2.2 89
42、C51,串行口的应用,87,1,、串行口方式,0,的应用,方式,0,时是同步操作。外接串入,并出或并入,串出器件,可实现,I/O,的扩展。,数据传送可以采用中断方式,也可以采用查询方式。无论哪种方式,都要借助于,TI,或,RI,标志。,在串行口发送时,,或者靠,TI,置位后引起中断申请,在中断服务程序中发送下一组数据;或者通过查询,TI,的值,只要,TI,为,0,就继续查询,直到,TI,为,1,后结束查询,进入下一个字符的发送。,在串行口接收时,,由,RI,引起中断或对,RI,查询来决定何时接收下一个字符。无论采用什么方式,在开始串行通信前,都要先对,SCON,寄存器初始化,进行工作方式的设置
43、88,1,、串行口方式,0,的应用,例,7-2,:用,89C51,串行口外接,164,串入,并出移位寄存器扩展,8,位并行口;,8,位并行口的每位都接一个发光二极管,要求发光二极管从左到右以一定延迟轮流显示,并不断循环。设发光二极管为共阴极接法,,如图所示,。,解:设数据串行发送采用中断方式,显示的延迟通过调用延迟程序,DELAY,来实现。,89,程序清单:,ORG 0023H,;,串行口中断入口,AJMP SBR ;,转入串行口中断服务程序,ORG 2000H,;,主程序起始地址,MOV SCON,#00H ;,串行口方式,0,初始化,MOV A,#80H ;,最左一位发光二极管先亮,C
44、LR P1.0,;,关闭并行输出,MOV SBUF,,,A,;,开始串行输出,LOOP:SJMP$;,等待中断,SBR :,SETB P1.0,;,启动并行输出,ACALL DELAY ;,显示延迟一段时间,CLR TI ;,清发送中断标志,RR A ;,准备右边一位显示,CLR P1.0 ;,关闭并行输出,MOV SBUF,A ;,再一次串行输出,RETI ;,中断返回,90,用方式,0,外加移位寄存器来扩展,8,位输出口时,要求移位寄存器带有输出控制,否则串行移位过程也会反映到并行输出口;另外,输出口最好再接一个寄存器或锁存器,以免在输出门关闭使(,STB=0,)输出又发生变化。,用方式,
45、0,加上并入,串出移位寄存器可扩展一个,8,位并行输入口。移位寄存器必须带有预置,/,移位的控制端,由单片机的一个输出端子加以控制,以实现先由,8,位输入口置数到移位寄存器,然后再串行移位从单片机的串行口输入到接收缓冲器,最后再读入到,CPU,中。,91,例,7-3,:,用,89C51,串行口外加移位寄存器,165,或,166,扩展,8,位输入口,输入数据由,8,个开关提供,另有一个开关,K,提供联络信号。当,K=0,时,表示要求输入数据,输入的,8,位为开关量,提供逻辑模拟子程序的输入信号。,如图所示,。,74HC165,并入串出寄存器的,shift,端口,,shift,为,1,,允许把外部
46、的数据置入到,74hc165,中,,shift,为,0,开始串行移位到单片机,sbuf,中,92,START:,MOV SCON,#10H ;,串行口方式,0,初始化,JB P1.1,$;,开关,K,未闭合,等待,SETB P1.0,;,并行置入数据?,CLR P1.0,;,开始串行移位?,JNB RI,$;,查询,RI,,完全移到,sbuf,后,ri,自动为,1,CLR RI ;,查询结束,清,RI,MOV A,SBUF ;,读数据到累加器,ACALL LOGSIM ;,进行逻辑模拟,SJMP START ;,准备下一次模拟,93,2,、串行口方式,1,的发送和接收,例,7-4,:,89C5
47、1,串行口按双工方式收发,ASCII,字符,最高位用来作奇偶校验位,采用,奇校验,方式,要求传送的波特率为,1200b/s,。编写有关的通信程序。,解:,7,位,ASCII,码加,1,位奇校验共,8,位数据,采用串行口方式,1,。,奇偶校验位,P,是当累加器,A,中,1,的数目为奇数时,,P=1,。如果直接把,P,的值放入,ASCII,码的最高位,恰好成了,偶校验,,与要求不符。因此,要把,P,的值取反,以后放入,ASCII,码最高位,才是要求的,奇校验,。,94,2,、串行口方式,1,的发送和接收,设发送数据区的首地址为,20H,,接收数据区的首地址为,40H,,,fosc,为,6MHz,,
48、通过查波特率初值,(,表,7-2,),可知定时器的初装值为,F3H,。定时器,T1,采用工作模式,2,,可以避免计数溢出后用软件重装定时初值的工作。,95,主程序,MOV TMOD,#20H ;,定时器,1,设为模式,2,MOV TL1,#0F3H ;,定时器初值,MOV TH1,#0F3H ;8,位重装值,SETB TR1 ;,启动定时器,1,MOV SCON,#50H ;,设置为方式,1,,,;,REN=1,MOV R0,#20H ;,发送数据区首址,MOV R1,#40H ;,接收数据,区,首址,ACALL SOUT,;,先输出一个字符,SETB ES,SETB EA,SJMP$;,等待
49、中断,96,中断,ORG 0023H,;,串行口中断入口,AJMP SBR1 ;,转至中断服务程序,.,ORG 0100H,SBR1:JNB RI,SEND ;TI=1,为发送中断,ACALL SIN,;RI=1,为接收中断,SJMP NEXT ;,转至统一的出口,SEND:,ACALL SOUT,;,调用发送子程序,NEXT:RETI ;,中断返回,97,发送子程序,SOUT:CLR TI,MOV A,R0 ;,取发送数据到,A,MOV C,P ;,奇偶标识赋予,C,CPL C ;,奇校验,MOV ACC.7,C,INC R0 ;,修改发送数据指针,MOV SBUF,A ;,发送,ASCII
50、码,RET ;,返回,98,接收子程序,SIN:CLR RI,MOV A,SBUF ;,读出接收缓冲区内容,MOV C,P ;,取出校验位,CPL C ;,奇校验,ANL A,#7FH ;,删去校验位,MOV R1,A ;,读入接收缓冲区,INC R1 ;,修改接收数据指针,RET ;,返回,99,在主程序中已初始化,REN=1,,则允许接收。,以上程序基本上具备了全双工通信的能力,但不能说很完善。例如,在接收子程序中,,虽然检验了奇偶校验位,但没有进行出错处理;,另外,发送和接收数据区的范围都很有限,也不能满足实际需要。但有了一个基本的框架之后,逐渐完善还是可以做到的。,100,2,、串行






