1、上页上页下页下页回目录回目录上页上页下页下页回目录回目录 在传送大量数据时,为了提高传送信息的效率,采用一在传送大量数据时,为了提高传送信息的效率,采用一个数据块共用一个同步字作为起始位的格式,叫同步通信方个数据块共用一个同步字作为起始位的格式,叫同步通信方式式 用发、收双方规定的同步字来作为数据块的开始和结束用发、收双方规定的同步字来作为数据块的开始和结束包括物理上独立的发送缓冲器、接收缓冲器包括物理上独立的发送缓冲器、接收缓冲器发送缓冲器:只能写入不能读出发送缓冲器:只能写入不能读出接收缓冲器:只能读出不能写入接收缓冲器:只能读出不能写入二者共用一个地址二者共用一个地址99H字节地址为字节
2、地址为98H,可位寻址,位地址为,可位寻址,位地址为98H9FH(1)SM0、SM1:串行口工作方式选择位。:串行口工作方式选择位。(2 2)SM2 SM2 多机通信控制位多机通信控制位 用于方式用于方式2 2或方式或方式3 3中。中。如果如果SM2=1,只有当接收到的第只有当接收到的第9位数据(位数据(RB8)为)为“1”时,才将接收到的前时,才将接收到的前8位数据送入位数据送入SBUF,并置并置“1”RI,产生,产生中断请求;当接收到的第中断请求;当接收到的第9位数据(位数据(RB8)为)为“0”时,则将接时,则将接收到的前收到的前8位数据丢弃。位数据丢弃。如果如果SM2=0,则不论第,则
3、不论第9位数据是位数据是“1”还是还是“0”,都将,都将前前8位数据送入位数据送入SBUF中,并置中,并置“1”RI,产生中断请求。,产生中断请求。由软件置由软件置“1”时,允许接收。时,允许接收。置置“0”时,禁止接收时,禁止接收发送的第发送的第9 9位数据位数据方式方式2 2和和3 3时,时,TB8TB8是要发送的第是要发送的第9 9位数据,可作为位数据,可作为奇偶奇偶校验位校验位使用,也可作为使用,也可作为地址帧地址帧或或数据帧数据帧的标志。的标志。=1=1为地址帧为地址帧,=0=0为数据帧为数据帧在方式在方式2和方式和方式3中要接收的第中要接收的第9位数据,在方式位数据,在方式1时,时
4、,如如SM2=0,RB8是接收到的停止位。在方式是接收到的停止位。在方式0中,中,不使用不使用RB8发送中断标志发送中断标志。在方式。在方式0串行发送第串行发送第8位结束时由硬件置位结束时由硬件置“1”,或在其他方式中串行发送停止位的开始时置,或在其他方式中串行发送停止位的开始时置“1”,必须由软件清必须由软件清“0”接收中断标志。接收中断标志。在方式在方式0串行接收第串行接收第8位结束时由硬件位结束时由硬件置置“1”,或在其他方式中串行接收停止位的开始时置,或在其他方式中串行接收停止位的开始时置“1”,必须由软件清,必须由软件清“0”上页上页下页下页回目录回目录 同步移位寄存器输入同步移位寄
5、存器输入/输出方式输出方式,常用于外接移位寄存,常用于外接移位寄存器,以扩展并行器,以扩展并行I/OI/O口。口。8 8位数据为一帧,不设起始位和停止位,先发送或接收位数据为一帧,不设起始位和停止位,先发送或接收最低位。最低位。一个数据写入一个数据写入SBUF,串口将数据从,串口将数据从RXD输出(波特率输出(波特率fosc/12),),TXD输出同步移位信号,发送完输出同步移位信号,发送完TI置置1图图5-12 方式方式0扩展扩展I/O口硬件逻辑图口硬件逻辑图 REN置置1,串口将数据从,串口将数据从RXD输入(波特率输入(波特率fosc/12),),TXD输出同步移位信号,发送完输出同步移
6、位信号,发送完RI置置1上页上页下页下页回目录回目录图图5-12 方式方式0扩展扩展I/O口硬件逻辑图口硬件逻辑图波特率可变的波特率可变的8位异步通信接口方式。位异步通信接口方式。CPU 执行一条写执行一条写SBUF指令,就启动了串口发送指令,就启动了串口发送 允许接收位允许接收位REN被置被置“1”后,接收器就开始工作,跳后,接收器就开始工作,跳变检测器以波特率变检测器以波特率16倍的速率采样倍的速率采样RXD端的电平,端的电平,RXD引引脚上发生由脚上发生由“1”到到“0”的跳变,接收器开始接收。的跳变,接收器开始接收。9位异步通信接口方式。传送一帧数据信息为位异步通信接口方式。传送一帧数
7、据信息为11位位波特率波特率=2SMOD/64fosc 数据由数据由TXD端输出,附加的第端输出,附加的第9位数据由位数据由SCON中的中的TB8提供。提供。CPU 执行一条写执行一条写SBUF指令,就启动了串口发指令,就启动了串口发送,发送完送,发送完TI置置1 与方式与方式1相似,相似,REN被置被置“1”后,跳变检测器以波特率后,跳变检测器以波特率16倍的速率采样倍的速率采样RXD端的电平,端的电平,RXD引脚上发生由引脚上发生由“1”到到“0”的跳变,接收器开始接收。的跳变,接收器开始接收。9位异步通信接口方式。传送一帧数据信息为位异步通信接口方式。传送一帧数据信息为11位位波特率波特
8、率=2SMOD/32T1的溢出率的溢出率 数据由数据由TXD端输出,附加的第端输出,附加的第9位数据由位数据由SCON中的中的TB8提供。提供。CPU 执行一条写执行一条写SBUF指令,就启动了串口发指令,就启动了串口发送,发送完送,发送完TI置置1 与方式与方式1相似,相似,REN被置被置“1”后,跳变检测器以波特后,跳变检测器以波特率率16倍的速率采样倍的速率采样RXD端的电平,端的电平,RXD引脚上发生由引脚上发生由“1”到到“0”的跳变,接收器开始接收。的跳变,接收器开始接收。上页上页下页下页回目录回目录T1的溢出率的溢出率=计数速度计数速度/(2K-初值)初值)K为定时器为定时器T1
9、的位数的位数K=13(方式(方式0)K=16(方式(方式1)K=8(方式(方式2、3)T1的溢出率的溢出率=fosc/12(2K-初值)初值)波特率波特率=2SMOD/32T1的溢出率的溢出率=2SMOD fosc/32 12(2K-初值)初值)(1)利用方式0扩展并行I/O口 例:利用51单片机的串行口外接74LS164扩展8位并行输出口。电路图如下图所示,8位并行输出口的各位分别接一个发光二极管,要求发光二极管按从左到右的顺序,以一定的时间间隔依次循环发光,试编程实现。CLR74LS164P1.0TXDRXD51单片机AP3.0P3.1BCLKGND5.4.4 5.4.4 串行口的应用串行
10、口的应用参考程序如下:ORG 0000H LJMP MAINORG 2000HMAIN:CLR P1.0 MOV SCON,#00H SETB P1.0 MOV A,#80HBACK1:MOV SBUF,ABACK2:JNB TI,BACK2 CLR TI LCALL DELAY RR A SJMP BACK1C51参考程序如下:#include“reg51.h”Sbit P1_0=P10;/void delay(void)Void main()Unsigned char led;P1_0=0;SCON=0;P1_0=1;Led=0 x80;While(1)SBUF=led;While(!TI
11、)TI=0;delay();led=led1;If(led=0)Led=0 x80;Return;利用51单片机的串行口外接74ls165扩展8位并行输入口,如图所示要求通过8位输入口读入一个字节数据存入R2中S/LP1.0TXDRXD51单片机P3.0P3.1QCLKGND74LS165D0D7 汇编语言源程序:ORG 0000H;LJMP MAIN;ORG 2000H;MAIN:CLR P1.0;SETB P1.0;BACK:MOV SCON,#10H;BACK1:JNB RI,BACK1;CLR RI;MOV A,SBUF;MOV R2,A;SJMP$;C51参考程序:#include“
12、reg51.h”Sbit P1_0=P10;Void main()Volatile unsigned char led;P1_0=0;P1_0=1;SCON=0 x10;While(!RI)RI=0;led=SBUF;While(1);Return;(2)利用方式1实现点对点的异步通信 例:编程将甲机片内RAM 50H5FH单元中的数据向乙机发送,在发送之前将数据块长度N发送给乙机,当发送完N个字节后,再发送一个累加效验和。乙机接收数据进行累加和校验,如果和发送方的累加和一致,发送数据“00”,表示接收正确,如果不一致,发数据FFH,甲机再重发,乙机接收的数据存入片内70H7FH单元中。设波特
13、率为2400,fosc=6MHz,试编程实现。参考程序如下:甲机发送程序甲机发送程序TRT:MOV TMOD,#20H MOV TH1,#0F3H MOV TL1,#0F3H SETB TR1 MOV SCON,#50HRPT:MOV R0,#50H MOV R2,#10H MOV R3,#00H MOV SBUF,R2BACK1:JNB TI,BACK 1 CLR TIBACK2:MOV A,R0 MOV SBUF,A ADD A,R3 MOV R3,A INC R0BACK3:JNB TI,BACK 3 CLR TI DJNZ R2,BACK 2 MOV SBUF,R3 MOV R3,#0
14、BACK4:JNB TI,BACK4 CLR TIBACK5:JNB RI,BACK5 CLR RI MOV A,SBUF JNZ RPT RET乙机接收程序乙机接收程序RSU:MOV TMOD,#20H MOV TH1,#0F3H MOV TL1,#0F3H SETB TR1 MOV SCON,#50HBACK:MOV R0,#70HBACK1:JNB RI,BACK1 CLR RI MOV A,SBUF MOV R2,A MOV R3,#00HBACK2:JNB RI,BACK2 CLR RI MOV A,SBUF MOV R0,A INC R0 ADD A,R3 MOV R3,A DJN
15、Z R2,BACK 2BACK3:JNB RI,BACK3 CLR RI MOV A,SBUF XRL A,R3 MOV R3,#00H JZ BACK5 MOV SBUF,#0FFHBACK4:JNB TI,BACK4 CLR TI AJMP BACKBACK5:MOV SBUF,#00HBACK6:JNB TI,BACK6 CLR TI RET甲机发送甲机发送C51C51参考程序:参考程序:#include“reg51.h”Void main()Volatile unsigned char rev;Unsigned char*pt,chk,len;TMOD=0 x20;TH1=0 xF3;
16、TL1=0 xF3;TR1=1;SCON=0 x50;DoPt=0 x50;Len=0 x10;Chk=0;SBUF=len;While(!TI)TI=0;DoSBUF=*pt;Chk=chk+*pt;Pt+;While(!TI)TI=0;Len-;while(len0);SBUF=chk;While(!TI)TI=0;While(!RI)RI=0;Rev=SBUF;while(rev!=0);Return;乙机接收乙机接收C51C51参考程序:参考程序:#include“reg51.h”Void main()Volatile unsigned char rev;Unsigned char*p
17、t,chk,len;Bit stat;TMOD=0 x20;TH1=0 xF3;TL1=0 xF3;TR1=1;SCON=0 x50;Do pt=0 x70;while(!RI)RI=0;Rev=SBUF;Len=rev;Chk=0;do While(!RI)RI=0;Rev=SBUF;*pt=rev;Pt+;Chk=chk+rev;Len-;while(len0);While(!RI)RI=0;Rev=SBUF;If(Rev=chk)SBUF=0;ElseSBUF=0 xff;While(!TI)TI=0;while(rev!=chk);Return;(3)利用方式2、方式3与多机通信 串行
18、口控制寄存器SCON中的SM2位为方式2、方式3的多机通讯控制位。在多机通讯中起着非常重要的作用。一个典型的多机通讯系统硬件连接如下图所示。TXDRXD主机RXD TXD1号从机TXD2号从机TXDN号从机RXDRXD 当串行口以方式2、方式3发送时,数据的第9位是可编程位,即可以通过程序改变TB8的状态,以区分当前所发送的是地址还是数据,TB8=1时发送地址,TB8=0时发送数据。发送方发送的第9位TB8,将被接收方的第9位,即RB8所接收。接收时,如果接收方的SM2=1,则只有接收到的RB8=1,即传送的是地址时,才能激活RI,接收数据才有效。如果接收方的SM2=0,则无论接收到的RB8的
19、状态如何,均能激活RI,接收到的数据有效。利用串行口方式2、方式3的这个特点便可以实现多机通讯。上图为一主多从结构的多机通讯系统,主机和从机应设置成相同的方式,使用相同的波特率。其工作通讯过程简单描述如下:主机发出要求与之通讯的从机地址信号,并使TB81。将所有从机的SM2都置为1,将接收到的第9位的状态送入从机的RB8,使RB81。所有满足SM21、RB8=1条件的从机都能激活RI,进入各自的中断服务程序,在从机的中断服务程序中判断主机发出的地址信号是否与本从机号相同,若相同则将其SM2设为0,并将本机地址发回主机作为应答,否则不动作。主机发出需传送的数据。并使TB8=0。所有从机均接收到该数据帧,其第9位进入RB8,即RB8=0。对于地址号与主机发出的地址不相符的那些从机,由于其SM2=1,而接收到的第9位使它们的RB8都为0,因此都不能激活RI,使得接收到的数据自然丢失。地址号与主机发出的地址相同的那台从机SM20,这就使得不管接收到的第9位为何值,都能激活RI,接收到的数据有效。通过以上6步,可完成主机与从机的一对一通讯。当主机需与其他从机联系时,则正与主机通讯的这台从机应恢复SM2=1,主机可再发出地址帧寻址其他从机。