资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,本章介绍的主要内容,串行通信的基本概念,串行通信接口,结构和工作原理,串行通信,的控制,寄存器,串行通信,的应用编程,8,1,概 述,单片机应用与数据采集或工业控制时,往往作为前端机安装在工业现场,远离主机,现场数据采用串行通信方式发往主机进行处理,以降低通信成本,提高通信可靠性。如下图所示,。,数据通信方式有两种:并行通信与串行通信,并行通信:所传送数据的各位同时发送或接收,,数据有多少位就需要多少根数据线。,特点:速度快,成本高,适合近距离传输,如计算机并口,打印机,,8255,。,串行通信:所传送数据的各位按顺序一位一位,地发送或接收。,只需一根数据,一根地线,共,2,根,(如双向通信发送和接收各需,1,根数据线。),特点:成本低,硬件方便,适合远距离通信,,传输速度低。,串行通信的分类:同步串行通信和异步串行通信,一、异步通信:,通信的双方应该有一个约定,什么时候开始发送,什么时候发送完毕;接收方收到的信息是否正确等,这就是,通信协议,。,异步串行通信一帧数据格式:,一个起始位“,0”,表示字符的开始,然后是,5,8,位数据即该字符的代码,规定低位在前,高位在后,接 下来是奇偶校验位,(,可省略,),,最后以停止位“,1”,表示字符的结束。,优点:硬件结构简单。,缺点:传输速度慢。,P,1,D0,D1,D2,D3,D4,D5,D6,D7,P,1,0,第,n,个字符(一帧),n-1,n+1,0,D0,起始位,数据位(,5,8,位),校验位,停止位,二、同步通信,在同步通信中,发送方在数据或字符开始处就用同步字符,(,常约定,1,2,个字节,),指示一帧的开始,由时钟来实现发送端和接收端同步,接收方一旦检测到与规定的同步字符符合,下面 就连续按顺序传送若干个数据,最后发校验字节。见下图:,SYN,字符,1,SYN,字符,2,数据,1,数据,2,.,数据,n,连续传送,n,个数据,校验,三、单工、半双工、全双工通信方式,按通信方向分类:单工、半双工、全双工通信方式,1,单工方式,:,一端是发送端,另外一端是接收端:,2.,半双工方式,每端口有一个发送器和一个接收器,通过开关连接在线路上,数据可以双向传送,但不能同时发送和接收,.,要通过换向器转换方向。,3.,全双工方式,通信双方用两个独立的收发器单独连接,可以同时发送和接收数据,因而提高了速度。,1.,实现数据格式化,因为,CPU,发出的数据是并行数据,接口电路应实现不同串行通信方式下的数据格式化任务,如自动生成起止方式的帧数据格式,(,异步方式,),或在待传送的数据块前加上同步字符等。,在串行传输中,通信的双方都按通信协议进行,所谓,通信协议,就是通信双方必须共同遵守的 一种约定,约定包括数据的格式、同步的方式、传送的步骤、检纠错方式及控制字符的定义 等。,串行接口的基本任务就是:,2.,进行串、并转换,在发送端,接口将,CPU,送来的并行信号转换成串行数据进行传送;而在接收端,接口要将接 收到串行数据变成并行数据送往,CPU,,由,CPU,进行处理。,3.,控制数据的传输速率,接口应具备对数据传输率,波特率的控制选择能力,即具有波特率发生器。,4.,进行传送错误检测,在发送时,对传送的数据自动生成校验位或校验码,在接收端能检查校验位或校验 码,以确定传送中是否有误码。,51,系列单片机内有一个全双工的异步通信接口,通过对串行接口写控制字可以选择其数据格 式,同时内部有波特率发生器,提供可选的波特率,可完成双机通信或多机通信。,四、,波特率,单位时间内传送的信息量。在计算机中,以每秒传送的二进制位数为单位。,例如:,100,字符,/,秒,,1,个字符,11,位,,波特率为:,10011=1100,(波特),平均每位传送占用时间,Td=1/1100=0.909ms,(一)通信线的连接,通信速率和通信距离这两个方面是相互制约的,降低通信速率,可以提高通信距离,.,不同的通信距离,,串行通信电路有不同的连接方法,五,.,串行通信总线标准及接口,RXD,TXD,GND,RXD,TXD,GND,RXD,TXD,GND,电,平,转,换,RXD,TXD,GND,RXD,TXD,GND,电,平,转,换,RXD,TXD,GND,微机,微机其他设备,较远距离传送电路,近距离传送电路,微,机,接,口,调,制,解,调,器,调,制,解,调,器,接,口,微,机,电,话,分,机,电,话,分,机,远距离传送电路,数字信号通过调制器变成模拟信号通过电话线传送到对方,接收方通过解调器将模拟信号转换成数字信号接收。,(二),串行通信接口总线标准,测控系统中,计算机通信主要采用异步串行通信方式,常用的异步总线标准有三种:,RS-232,(,RS-232A RS-232B RS-232C,),RS-449,(,RS422 RS423 RS485,),这里重点介绍,RS-232,RS-232C,:速率:,20Kbit/S,,,最大通信距离 :,15m,RS422,:,10Mbit/s,,,:300m,90Kbit/s,,:,1200m,1,2.,抗干扰能力,采用标准的通信接口,本身具有一定的抗干扰能力,但是工业现场的情况往往很恶劣,因而要根据具体情况进行选择。,RS232C,:一般场合,RS422,:共模信号比较强,光纤:电磁干扰较强,二、,RS,232C,美国电子工业协会(,EIA,)公布的一种异步通信标准。,RS232C,标准是:,设备之间通信的距离不大于,15,米,最大传输速率,20KB/S,采用负逻辑:“,1”5V 15V,“0”,+,5V ,+,15V,不带负载时输出电平:,25V +25V,输出短路电流:,0.5A,最大负载电容,:2500pF,当计算机采用,RS232,标准时必须通过电平,,MAX232,是,EIA,和,TTL,电平转换芯片。内部具有电压提升电路,并有两路接收器和发送器。其连线和引脚如图,TTL,电平可以由专用集成电路转换成,RS232C,标准,;,如,:MC1488,或,75188 TTL RS232C,从,MC1489,或,75189 RS232C TTL,由于,MC1488,需要采用,12V,电源,一般在单片机通信中大量使用的是只需要,+5V,电源、具有发送和接收的一体化芯片,如:,MAX232,、,ICL232,、,ADM202,等。,MCS,51,之间的,双机通信,RXD,TXD,GND,TXD,GND,8xx51,8xx51,RXD,MCS,51,和,PC,机的,双机通信,MCS,51,和,PC,机的,双机通信见下图,8.2 MCS-51,的,串行口,结构,51,单片机有一个可编程的全双工异串,行通信接口,它可作,UART,用,也可作同,步移位寄存器,其帧格式可有,8,位、,10,位,或,11,位,并能设置各种波特率,给使用者,带来很大的灵活性。,一、串行口的内部结构,发送,SBUF,(,99H,),门,8,8,串行口结构框图,RXD(P3.0),TXD(P3.1),中断,接收,SBUF,(,99H,),定,时,器,T1,f,osc,2,分频器,发送控制器,接收控制器,串寄,行存,控器,制,SCON,(,98H,),输入移位寄存器,TI,RI,内 部 总 线,5 l,单片机通过引脚,RXD(P3.0),串行数,据接收端,),和引脚,TXD(P3.l),串行数据发送,端,),与外界进行通信。,图中有两个物理上独立的接收、发送,缓冲器,SBUF,,它们占用同一地址,99H,,可,同时发送、接收数据。,发送缓冲器只能写入,不能读出,,CPU,写,SBUF,,一方面修改发送寄存器,同时启动数据串行发送;,接收缓冲器只能读出、不能写入。读,SBUF,,就是读接收寄存器。,串行控制寄存器,SCON,用以存 放串行口的控制和状态信息。,8XX51,串行口正是通过对上述专用寄存器的设置、检测与读取 来管理串行通信的。,特 殊功能寄存器,PCON,的最高位,SMOD,为串行口波特率的倍增控制位。,波特率发生器,可以有两种选择:,1.,定时器,T1,作波特率发生器,改变计数初值就可以改变串行通信的速率,称为可变波特率。,2.,以内部时钟的分频器作波特率发生器,因内部时钟频率一定,称为固定波特率,shift,MOV A,SBUF,串行数据,CPU,CPU,SBUF,SBUF,shift,MOV SBUF,A,并行数据,并行数据,甲方(发送),乙方(接收),甲方发送时,,CPU,执行,指令,MOV SBUF,A,启动了发送过程,数据并行送入,SBUF,,在发送时钟,shift,的控制下由低位到高位一位一位发送,乙方在接收时钟,shift,的控制下由低位到高位 顺序进入移位寄存器,SBUF,,甲方一帧数据发送完毕,置位发送中断标志,二、串行通信的传送过程用下面简图说明,TI,RI,TI,,该位可作为查询标志(或引起中断),,CPU,可再发送下一帧数据。乙方一帧数据到齐,即接收缓冲器满,置位接收中断标志,RI,,该位,可作为查询标志(或引起接收中断),通过,MOV A,SBUF,CPU,将这帧数据并行读入。,由上述可知:,甲、乙方的移位时钟频率应相同,即应具有相同的波特率,否则会造成数据丢失。,发送方是先发数据再查标志,接收方是先查标志再收数据。,51,单片机串行口是一个可编程接口,对它的编程只用两个控制字分别写入特殊功能寄存器:,串行口控制寄存器,SCON(98H),电源控制寄存器,PCON(97H),三、串行口的控制寄存器,3.CPU,通过指令和,SBUF,并行交换数据,并不能控制数据的串行移位,它只能查询标志位来确定数据的移位是否完成。,8.3,串行口的控制寄存器,8.3.1,串行口的控制寄存器,SCON 98H,8XX51,串行通信的方式选择,接受和发送控制及串,行口的标志均由专用寄存器,SCON,控制和指示,其格式,如下,:,SM0,SM1,SM2,REN,TB8,RB8,TI,RI,方式选择,多机控制,串行接收,允许,/,禁止,欲发的第九位,收到的第九位,发送中断有,/,无,接收中断有,/,无,SM0,、,SM1,:工作方式设置位,0 0,:移位寄存器 ,,fosc/12,0 1,:,10,位异步收发器(,8,位数据),,波特率可变,1 0,:,11,位异步收发器(,9,位数据),,fosc/64,或,fosc/32,1 1,:,11,位异步收发器(,9,位数据),,波特率可变,SM2,,多机通信控制位。,主要用于方式,2,和方式,3,。对于接收机,SM2=0,,收到,RB8,(,0,或,1,)既可使收到的数据进入,SBUF,,并激活,RI,。,SM2=1,,收到的,RB8,0,时,收到的信息丢弃,不激活,RI,;若收到的,RB8,1,时,收到的数据进入,SBUF,,并激活,RI,,进而在中断服务中将数据从,SBUF,读走。,方式,0,时,,SM2,必须是,0,。,方式,1,时,,SM2=1,时,只有接收到有效停止位时,,RI,才激活。,REN,,允许串行接收位。,置,REN=1,,启动串口接收过程,置,REN=0,,则禁止串口接收,TB8,,,在方式,2,、,3,中,是发送数据的第,9,位,数据的奇偶校验位,地址帧,/,数据帧的标志位,RB8,,,在方式,2,、,3,中,是接收到数据的第,9,位,奇偶校验位,地址帧,/,数据帧的标志位。,方式,1,时,若,SM2=0,,则,RB8,是接收到的停止位。,TI,,发送中断标志位。,方式,0,时,串行发送第,8,位数据结束时,其它方式,串行发送停止位的开始时,硬件使,TI,置,1,,发中断申请。必须在中断服务程序中用软件将其清,0,。,RI,,接收中断标志位。,方式,0,时,串行接收第,8,位数据结束时,其它方式,串行接收停止位的中间时,硬件使,RI,置,1,,发中断申请。必须在中断服务程序中用软件将其清,0,。,PCON,的字节地址为,87H,无位地址,只能字节,寻址,.,初始化时,SMOD=0.,SMOD,X,X,X,X,X,X,X,PCON,87H,8.3.2,电源控制寄存器,PCON,PCON,的格式如下图所示,串行通信只用其中的最高位,SMOD,SMOD:,波特率加倍位。在计算串行方式,1,、,2,、,3,的波特率时,,SMOD,0,不加倍,;,SMOD,1,加倍,8.4,串行口的工作方式,根据串行通信数据格式和波特率的不同,51,系列单片机的串行通信有四种工作方式,通过编程进行选择,各工作方式的特点如下,:,1.,方式,0,RXD,为串行数据的发送端或接收端,TXD,输出频率为,fosc/12,的时钟脉冲。,波特率固定为,fosc/12(fosc,为单片机晶振频率,),方式,0,的数据格式为,8,位,低位在前,高位在后,移位寄位器方式多用于接口的扩展,当用单片机构成系统时,往往感到并行口不够用,此时可通过外接串入并出移位寄存器扩展输出接口;通过外接并入串出移位寄存器扩展输入接口,方式,0,也可应用于短距离的单片机之间的通信。,2.,方式,1,为,10,位异步通信方式,几每帧数据由,1,个起始位,“,0”.,八个数据位 和,1,个停止位“,1”,共,10,位构成,.,其 中起始位和停止位在发送时是自动插入的,.,以,TXD,为串行数据的发送端,T1,提供位时钟,RXD,为数据的接收端,由,T1,提供移位时钟,是波特率可,变方式,波特率,=,(2,SMOD,/32)(,TI,的溢出率,),=,(2,SMOD,/32)(fosc/12(256-x),根据给定的波特率,可以计算,T1,的计数初值,X,。,11,位异步发送,/,接收方式,即每帧数据由有一个起,始位,“,0,”,9,个数据位和,1,个停止位,“,1,”,组成,.,发送时九个数据位,由,SCON,寄存器的,TB8,位 提供,接收,到的第九位数据存放在,SCON,寄存器的,RB8,位,.,第九位数据可作为检验位,也可用于多机通信中,识别传送的是地址还是数据的特征位。,波特率固定为,(2,SMOD,/64)fosc.,3.,方式,2,4.,方式,3,数据格式同方式,2,,所不同的是,波特率可变,计,算,方式同方式,1,。,波特率的计算,方式,0,、,2,的波特率是固定的,而方式,1,、,3,的波特率是可变的,由定时器,T1,的溢出率来决定。,方式,0,波特率,=fosc/12,方式,2,波特率,=,(,2,SMOD,/64,),fosc,方式,1,波特率,=,(,2,SMOD,/32,),(,T1,溢出率),方式,3,波特率,=,(,2,SMOD,/32,),(,T1,溢出率),T1,溢出率,=fosc/12256,(,TH1,),T1,方式,2,,,TR1=1,(以启动定时器),串行口初始化具体步骤:,确定,T1,的工作方式(编程,TMOD,寄存器);,计算,T1,的初值,装载,TH1,、,TL1,;,启动,T1,(编程,TCON,中的,TR1,位);,确定串行口控制(编程,SCON,寄存器);,串行口在中断方式工作时,还要进行中断设置(编程,IE,、,IP,寄存器)。,8.5,串行口的应用编程,串行口的波特率有两种方式:,固定波特率,可变波特率,注意:使用可变波特率时,先确定,TI,的计数初值,,并对,TI,进行初始化。,串行通信的编程方式:,查询方式,:,查,TI,或,RI,是否为“,1”,。,中断方式:如果预先开了中断,当,TI,、,RI,为“,1”,,会自动产生中断。,注意:两种方式中当发送或接受数据后都要注意,清,TI,或,RI,。,查询方式发送程序:,(,先发后查),发送一个数据查询,TI,发送下一个数据,查询方式接收程序:(先查后收),查询,RI,读入一个数据查询,RI,读下一个数据,中断方式发送程序:,发送一个数据等待中断,在中断中再发送下一个数据。,中断方式接收程序:,等待中断,在中断中再接收一个数据。,8.5.1,查询方式,查询方式发送流程图和接收流程图见下页,T1,初始化、启动,T1,工作,设定串行通信方式,置发送数据块首址,数据块长度计数器,清,TI,发送数据,TI,1,?,修改地址指针,和块长度计数器,全部数据发送完?,开始,结束,查询方式发送流程图,Y,N,Y,N,T1,初始化、启动,T1,工作,设定串行通信方式,允许接收,置接收缓冲区首址,接收数据块长度,清,RI,RI,1,?,修改地址指针,和块长度计数器,全部数据接收完?,开始,结束,接收数据,Y,查询方式接收流程图,Y,N,Y,N,8.5.2,中断方式,中断方式的初始化编程同查询方式,不,同的是要开中断,即置位,EA,和,ES,,编写中,断服务程序。,中断方式串行通信的程序流程见下图:,T1,初始化、启动,T1,工作,设定串行通信方式,置发送数据块首址,数据块长度计数器,发送数据,全部数据发送完?,Y,N,中断方式发送流程图,等待中断,1,EA,1,ES,发送数据,中断返回,0,EA,0,ES,中断服务程序,主程序,修改地址指针,和块长度计数器,清,TI,Y,N,T1,初始化、启动,T1,工作,设定串行通信方式,置接收数据块首址,数据块长度计数器,全部数据接收完?,Y,N,中断方式接收流程图,等待中断,1,EA,1,ES,中断返回,0,EA,0,ES,中断服务程序,主程序,修改地址指针,和块长度计数器,清,RI,接收数据,Y,N,例,8-1.,在内部数据存贮器,20H,3FH,单元中共有,32,个数据,要求采用方式,1,串行发送出去,传送速率为,1200,波特,设,fosc,12MHZ,。,方法:,T1,工作于方式,2,作波特率发生器,取,SMOD,0,,,T1,的时间常数计算如下:,波特率,1200,(1/32)1210/12(256-x),x,230,E6H,2,SMOD,fosc,12(256-x),32,6,发送程序:,ORG 0000H ,MOV TMOD,,,#20H,;,T1,方式,2,MOV TH1,,,#0E6H ,MOV TL1,,,#0E6H,;,T1,时间常数,SETB TR1,;启动,T1,MOV SCON,,,#40H,;串行口工作于方式,1,MOV R0,,,#20H,;,R0,指发送缓冲区首,MOV R7,,,#32,;,R7,作发送数据计数,LO:MOV SBUF,,,R0,;发送数据,JNB TI,,;一帧未发完继续查询,CLR TI,;一帧发完清,TI,INC R0,DJNZ R7,,,LO,;数据块未发完继续,SJMP,接收程序:,ORG 0000H ,MOV TMOD,,,#20H ,MOV TH1,,,#0E6H ,MOV TL1,,,#0E6H ,SETB TR1,;初始化,T1,,并启动,T1,MOV SCON,,,#50H,;设定串行方式,1,,并允许接收,MOV R0,,,#20H ,MOV R7,,,#32 ,LOOP,:,JNB RI,,;一帧收完,?,CLR RI,;收完清,RI,MOV,R0,,,SBUF,;将数据读入,INC R0,DJNZ R7,,,LOOP ,SJMP,RXD,89C51,TXD,P1.0,例,8-2,接线如图,编一个自发自收程序,检查单片机的串行口是否完好,,f=12MHz,,波特率,600,,取,SMOD,0,。,解:依据公式,波特率,求得,汇编语言编程,MOV TMOD,#20H,MOV TH1,#0CCH,MOV TL1,#0CCH ;,设定波特率,SETB TR1,MOV SCON,#50H,ABC:CLR TI,MOV P1,#0FEH ;LED,灭,ACALL DAY ;,延时,MOV A,#OFFH,MOV SBUF,A ;,发送数据,FFH,JNB RI,$;RI=0,等待,CLR RI,MOV A,SBUF ;,接收数据,,A=FFH,MOV P1,A ;,灯亮,JNB TI,$;TI=0,等待,ACALL DAY ;,延时,SJMP ABC,DAY:MOV R0,#0,DAL:MOV R1,#0,DJNZ R1,$,DJNZ R0,DAL,RET,如果发送接收正确,可观察到,P1.0,接的发光二极管闪亮。,例,8-3,例如串行通信方式,0,,扩展,I/O,接口,接八个数码管,使内部数据存储器,58H,-5FH,单元的内容为,0XH,。,分析,由于,TXD,,,RXD,运行在工作方式,0,时,可方便的连接串入并出移位寄存器,74LS164,,,TXD,发送移位脉冲,,RXD,发送数据,,P3.3,用于显示器的输入控制,通过,74LS164,接八个数码管,电路如下图所示。,例,8-4,程序如下:,ORG 0050H,SETB P3.3 ;,允许移位寄存器工作,MOV SCON,#0 ;,选串行通信方式,0,MOV R7,#08H ;,显示八个字符,MOV R0,#5FH ;,先送最后一个显示字符,MOV DPTR,#TBA ;DPTR,指向字形表首址,DLO:MOV A,R0 ;,取待显示数码,MOVC A,A+DPTR ;,查字形表,MOV SBUF,A ;,送出显示,JNB TI,$;,一帧输出完?,CLR TI ;,已完,清中断标志,DEC R0 ;,修改显示数据地址,DJZN R7,DLO,CLR P3.3 ;8,位送完,关发送脉冲,SJMP$,TBA:DB 0C0H,0F9H,0A4H,B0H,99H,92H DB 82H,0F8H,80H,90H,83H,83H,0C6H,DB 0A1H,86H,84H,0FFH,0BFH,
展开阅读全文