1、7.1 概概 述述1、串行通信数据传送方向 1)单工方式数据只能向一个方向传输。2)半双工方式允许数据分时两个方向传输。3)全双工方式数据可以同时往两个相反的方向传输。2)同步方式:每个数据位占用的时间都相等,发送机每一个基本的时间单位发送一位,接收机与发送机的时钟必须严格同步。其格式如图。2、异步和同步通信方式1)异步方式:用一个起始位表示字符的开始,停止位表示字符的结束。数据位则在起始位之后,停止位之前,这样构成一帧,其格式如图。7.2MCS-51的串行口的串行口1、数据缓冲器SBUF 发送SBUF和接收SBUF共用一个地址99H。2、串行口控制寄存器SCON 寄存器的字节地址为98H,可
2、位寻址。SCON格式如图。SM0 SM1 SM2 REN TB8 RB8 TI RI SM0、SM1:控制串行口的工作方式SM2:多机控制位,用于多机通讯。REN:允许接收控制位,REN=1,允许接收;REN=0,禁止接收。TB8:发送的第9位数据位,可用作校验位和地址/数据标识位RB8:接收的第9位数据位或停止位TI:发送中断标志,发送一帧结束,TI=1,必须软件清零RI:接收中断标志,接收一帧结束,RI=1,必须软件清零3特殊功能寄存器PCON其字节地址为87H,没有位寻址功能,其中与串行接口有关的只有D7位。SMOD(PCON.7):波特率倍增位。当SMOD=1时,波特率加倍;当SMOD
3、=0时,波特率不加倍。3、串行口的工作方式(1)方式0:同步移位寄存器方式。用于扩展并行I/O接口。1.一帧8位,无起始位和停止位。2.RXD:数据输入/输出端。TXD:同步脉冲输出端,每个脉冲对应一个数据位。3.波特率B=fosc/12如:fosc=12MHz,B=1MHz,每位数据占1s。4.发送过程:写入SBUF,启动发送,一帧发送结束,TI=1。接收过程:REN=1且RI=0,启动接收,一帧接收完毕,RI=1。发送时序发送时序写入写入SBUFRXD输出输出TXDTID0D1D2D3D4D5D6D7写写REN=1RI=0RXD输入输入RI 接收时序接收时序(a)(b)(2)方式1:8位数
4、据异步通讯方式。1.一帧10位:8位数据位,1个起始位(0),1个停止位(1)。2.RXD:接收数据端。TXD:发送数据端。3.波特率:用T1作为波特率发生器,B=(2SMOD/32)T1溢出率。4.发送:写入SBUF,同时启动发送,一帧发送结束,TI=1。接收:REN=1,允许接收。接收完一帧,若RI=0且停止位为1(或SM2=0),将接收数据装入SBUF,停止位装入RB8,并使RI=1;否则丢弃接收数据,不置位RI。当REN=1,CPU开始采样RXD引脚负跳变信号,若出现负跳变,才进入数据接收状态,先检测起始位,若第一位为0,继续接收其余位;否则,停止接收,重新采样负跳变。数据采样速率为波
5、特率16倍频,在数据位中间,用第7、8、9个脉冲采样3次数据位,并3中取2保留采样值。方式1串行发送接收时序图写入写入SBUF采样采样(a)发送时序图发送时序图TXD数据输出数据输出TID0D1D2D3D4D5D6D7停止位停止位起始位起始位RXD输入数据输入数据(b)接收时序图接收时序图D0D1D2D3D4D5D6D7停止位停止位起始位起始位RI检测检测负跳变负跳变(3)方式2和方式3 9位数据异步通讯方式。1.一帧为11位:9位数据位,1个起始位(0),1个停止位(1)。第9位数据位在TB8/RB8中,常用作校验位和多机通讯标识位。2.RXD:接收数据端,TXD:发送数据端。3.波特率:方
6、式2:BR=(2SMOD/64)fosc。方式3:BR=(2SMOD/32)T1溢出率。4.发送:先装入TB8,写入SBUF并启动发送,发送结束,TI=1。接收:REN=1,允许接收。接收完一帧,若RI=0且第9位为1(或SM2=0),将接收数据装入接收SBUF,第9位装入RB8,使RI=1;否则丢弃接收数据,不置位RI。发发送送时时序序写入写入SBUFTXD输出输出TIRXD输入输入接接收收时时序序RID0D1D2D3D4D5D6TB8停止位停止位起始位起始位D7D0D1D2D3D4D5D6RB8停止位停止位起始位起始位D7检测检测负跳变负跳变(4)计算波特率方式0为固定波特率:BR=fos
7、c/12方式2可选两种波特率:BR=(2SMOD/64)fosc 方式1、3为可变波特率,用T1作波特率发生器。BR=(2SMOD/32)T1溢出率串行口方式1、3,根据波特率选择T1工作方式,计算时间常数。T1选方式2:TH1=X=28-(2SMOD fosc)/(1232BR)T1选方式1用于低波特率,需考虑T1重装时间常数时间。.3 串行口的控制串行口的控制7-3-1 主从机间的通信主从机间的通信 1 双机串行异步通信(1)单片机与单片机间的串行异步通信接口设计 两台8031直接通信如图:两台8031采用RS232C总线通信如图:例 如图8751-1的工作是检查接在P1口上的 SW开关,
8、当检测到开关的状态有变化时,就将变化后的状态读入,通过串行口将这个开关状态传送给8751-2。当8751-2接收到这个字节后就将它输出到P1口上显示,并且也将它接收到的数据回传给8751-1以通知8751-1已经接收到数据。当8751-1接收到这个响应数据后与刚才传出去的数据比较,若不相同再发送一次,以确保将正确的数据传递给8751-2。通信约定:双方都采用串行通信方式,波特率为9600(晶振为11.059M),采用中断方式进行发送和接收数据。8751-1程序:BUFFEREQU30H;发送数据缓冲区ECHOFLAGBIT00H;当发送与接收到的数据相同时此标志置1ERRFLAGBIT01H;
9、当发送与接收到的数据不同时此标志置1ORG0000HSJMPSTARTORG0023H;串行口中断输入口 SJMP UART1ORG0030HSTART:MOV TMOD,#20H;定时器1设置为方式2,作波特率发生器 ANL PCON,#7FH MOV TH1,#0FDH;波特率为9600 MOV TL1,#0FDH SETB TR1 MOV SCON,#50H;设置为串行方式1允许接收 MOV IE,#90H;允许串行口中断 MOV BUFFER,#00H;缓冲区清零WAIT:MOVA,P1 CJNEA,BUFFER,SWCH SJMPWAITSWCH:MOVBUFER,ATRAGIN:M
10、OVSBUF,A;发送数据CLRECHOFLAGCLRERRFLAGWAITEO:JBERRFLAG,TRAGINJNBECHOFLAG,WAITEOSJMPWAITUART1:PUSHPSWPUSHACCSETBRS0CLRRS1JBCRI,RCV1;判断是否为接收中断CLRTISJMPRETURNRCV1:MOVA,SBUFCJNEA,BUFFER,DATAERSETBECHOFLAGSJMPRETURNDATAER:SETBERRFLAGRETURN:POPACCPOPPSWRETIEND()单片机与PC系列微机间的异步串行通信接口设计 8031单片机与PC系列微机是两种不同类型的机种,
11、它们的硬件结构不同,具有的电气特性也不一样,因此它们之间不能用导线直接连接,而要通过电平转换电路。8031单片机和PC机通过RS232C总线通信接口图如下:7-3-2 多机通信接口多机通信接口1多机通信原理多机通信原理 串行口控制寄存器SCON中的SM2为多机通信接口控制位。串行口以方式2或3接收时,若SM2为1,则仅当接收到的第9位数据RB8为1时,数据才装入SBUF,置位RI,请求CPU对数据进行处理;如果接收到的第9位数据RB8为0,则不产生中断标志RI,信息丢失,CPU不做任何处理。当SM2为0时,则接收到一个数据后,不管第9位数据RB8是0还是1,都将数据装入接收缓冲器SBUF并置位
12、中断标志RI,请求CPU处理。MCS-51的主从多机通信正是利用了这个特性。2多机通信程序设计多机通信程序设计 MCS-51多机通信程序设计 以典型的PC机和MCS-51构成的主从式多机系统(PC机为主机MCS-51单片机为从机或前沿机)为例,如图:设MCS-51晶振为6MHz设置波特率为2400,以方式3进行多机串行通信为例,编程方法如下:MOV TMOD,#20H MOV TH1,#0F9H;设置波特率为2400 MOV TL1,#0F9H MOV SCON,#0F0H;设置串行口为方式3,;SM2=1,允许接收 ANLPCON,#7FHSETB TR1SETB ES;允许串行口中断SETB EAWAIT:SJMPWAIT;听号 当接收到地址帧“呼号”且地址帧与本机地址相符时,要置SM2为0以便准备接收数据帧,同时需要将本机地址发回作为应答,建立与主机的联络。编程如下:SIO:CLRRI PUSH PSW PUSH ACC MOV A,SBUF;接收串行数据 XRL A,#ADDR;判断是否与本机地址 相符 JNZ BACK;不相符则返回 CLR SM2;相符则SM2为0且发回本机地址 MOVSBUF,AWAIT:JNBTI,WAIT CLR TIBACK:POP ACC POP PSW RETI 谢谢你的阅读v知识就是财富v丰富你的人生