2019/8/141第7章串行口UART《单片机原理与应用系统设计》电子工业出版社,2009.7欧伟明何静凌云刘剑等编著2019/8/142本章主要内容串行口UART串行口的工作方式串行口应用举例2019/8/143通信:信息交换计算机计算机计算机外设应用:多机系统、计算机网络方式:并行通信串行通信2019/8/144并行通信:数据多位同时传送接收设备发送设备询问应答101011008位同时传送控制简单,传输速度快,传输线较多2019/8/145串行通信:数据字节一位一位在一条传输线上逐个传送。传输线少,可利用电话网,但传送控制复杂。接收设备发送设备8位顺次传送D0D72019/8/146串行通信的基本概念111001100101001001发送设备接收设备10100100011110011001间隙任意异步通信与同步通信异步通信收、发设备使用各自时钟。2019/8/147以字符(构成的帧)为单位字符间是异步的字符内各位是同步的数据格式:停止位数据位校验位起始位LSBMSB空闲下一字符起始位空闲一个字符帧2019/8/148同步通信发送方时钟与接收方时钟同步。既保持位同步,也保持字符同步。同步方法:计算机乙计算机甲01101数据时钟计算机乙计算机甲01101数据时钟数据+时钟外同步自同步2019/8/149面向字符的同步格式:同步字符SYN(16H)序始字符SOH(01H),表示标题的开始标题:源地址、目标地址和路由指示等信息文始字符STX(02H)数据块是传送的正文内容,由多个字符组成组终字符ETB(17H)或文终字符ETX(03H)校验码SYNSYNSOHSTXETB/ETX块校验标题数据块例:IBM的二进制同步规程BSC。2019/8/1410面向位的同步格式:用序列01111110作为开始和结束标志。发送方在其发送的数据流中每出现5个连续的1就插入一个附加的0;接收方则每检测到5个连续的1且其后有一个0时,就删除该0。8位8位8位8位16位≥0位0111111001111110校验场信息场控制场地址场例:ISO的高级数据链路控制规程HDLC和IBM的同步数据链路控制规程SDLC。传输效率较高,但硬件设备复杂。2019/8/1411串行通信的传输方向单工半双工全双工接收发送时间1时间2发送接收发送接收发送接收发送接收单工半双工全双工2019/8/1412信号的调制与解调调制器把数字信号转换成模拟信号,然后送到通信线路上去解调器把从通信线路上收到的模拟信号转换成数字信号。DCEDTE电话网DCEDTERS-232CRS-232C2019/8/1413串行通信的错误校验奇偶校验代码和校验循环冗余校验传输速率与传输距离传输速率比特率:每秒钟传输二进制代码的位数波特率:每秒钟调制信号变化的次数,单位是:波特(Baud)。2019/8/1414波特率和比特率不总是相同的,但对于基带传输,比特率和波特率是相同的。传输距离与传输速率的关系传输距离随传输速率的增加而减小。2019/8/14157.1串行口UART串行口的结构串行口的控制2019/8/14167.1.1串行口的结构2个物理上独立的接收、发送缓冲器SBUF,占用同一地址99H;接收器是双缓冲结构。SBUF发送(99H)逻辑门电路移位寄存器接收控制器发送控制器1SBUF接收(99H)≥波特率发生器串行口中断TXD(P3.1)RXD(P3.0)串行口控制寄存器SCON内部总线TIRI2019/8/14177.1.2串行口的控制1、串行口控制寄存器SCON(98H)设定工作方式、接收/发送控制以及设置状态标志SM0SM1SM2RENTB8RB8TIRISCON(98H)SM0、SM1:工作方式设置位2019/8/1418SM2,多机通信控制位。主要用于方式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,则禁止串口接收2019/8/1419TB8,在方式2、3中,是发送数据的第9位数据的奇偶校验位地址帧/数据帧的标志位RB8,在方式2、3中,是接收到数据的第9位奇偶校验位地址帧/数据帧的标志位。方式1时,若SM2=0,则RB8是接收到的停止位。2019/8/1420TI,发送中断标志位。方式0时,串行发送第8位数据结束时其它方式,串行发送停止位的开始时硬件使TI置1,发中断申请。必须在中断服务程序中用软件将其清0。RI,接收中断标志位。方式0时,串行接收第8位数据结束时其它方式,串行接收停止位的中间时硬件使RI置1,发中断申请。必须在中断服务程序中用软件将其清0。2019/8/1421SMOD,波特率倍增位。在方式1、2、3时,波特率与SMOD有关:SMOD=1时,波特率提高一倍。复位时,SMOD=0。SMODPCON(87H)2、电源功能寄存器PCON(87H)2019/8/14227.2串行口的工作方式工作方式0工作方式1工作方式2工作方式32019/8/1423串行口工作方式SM0、SM1工作方式功能描述波特率00方式08位同步移位寄存器Fosc/1201方式110位UART可变,由定时器控制10方式211位UARTFosc/64或fosc/3211方式311位UART可变,由定时器控制其中fosc为晶振频率。2019/8/14247.2.1工作方式0方式0同步移位寄存器的输入输出方式。用于扩展并行输入或输出口。数据由RXD引脚输入或输出,移位脉冲由TXD引脚输出。8位数据。波特率为fosc/12。方式0发送123456ABCD654321DCBATitleNumberRevisionSizeBDate:5-Mar-2009SheetofFile:C:\PROGRAMFILES\DESIGNEXPLORER99SE\EXAMPLES\ch7gzsx.ddbDrawnBy:写入SBUFS6P2SENDRXD(DATAOUT)SHIFTD0D1D2D3TID4D5D6D7TXD(SHIFTCLOCK)S3P1S6P1方式0发送时序2019/8/1425方式0接收方式0接收和发送电路74HC164RXDTXDP1.089S51CLRCLKABGND74HC165RXDTXDP1.089S51S/LCLKQGND123456ABCD654321DCBATitleNumberRevisionSizeBDate:15-Mar-2009SheetofFile:E:\教材参编\第七章图\ch7gzsx.ddbDrawnBy:清除SCON中的RI位RECEIVERXD(DATAIN)SHIFTD0D1D2D3方式0接收时序RID4D5TXD(SHIFTCLOCK)D6D7S5P22019/8/14267.2.2工作方式1方式110位数据的异步通信。帧格式如图所示。停止位数据位8位起始位LSBMSB空闲空闲D0D71帧共10位方式1发送123456ABCD654321DCBATitleNumberRevisionSizeBDate:5-Mar-2009SheetofFile:C:\PROGRAMFILES\DESIGNEXPLORER99SE\EXAMPLES\ch7gzsx.ddbDrawnBy:写入SBUFS1P1SENDTXDSHIFTD0D1D2D3TID4D5D6D7TXCLOCK方式1发送时序DATA起始位停止位2019/8/1427方式1接收置REN为1时,接收器检测到RXD引脚输入电平发生负跳变时,则说明起始位有效,将其移入输入移位寄存器,并开始接收这一帧信息的其余位。当RI=0,且SM2=0(或接收到的停止位为1)时,将收到的9位数据的前8位装入SBUF,第9位(停止位)进入RB8,并置RI=1,向CPU请求中断。123456ABCD654321DCBATitleNumberRevisionSizeBDate:16-Mar-2009SheetofFile:E:\教材参编\第七章图\ch7gzsx.ddbDrawnBy:RXDSHIFTD0D1D2D3RID4D5D6D7RXCLOCK方式1接收时序起始位停止位位检测器采样时间2019/8/14287.2.3工作方式2、3方式2和方式311位数据的异步通信。停止位数据位9位起始位LSBMSB空闲空闲D0D71帧共11位RB8/TB8起始位1位,数据9位,停止位1位方式2的波特率固定为晶振频率的1/64或1/32方式3的波特率由定时器T1的溢出率决定2019/8/1429方式2和方式3发送先把起始位0输出到TXD,然后发送移位寄存器的输出位(D0)。每一移位脉冲都使输出移位寄存器的各位移动一位,并由TXD引脚输出。最后一次移位后,置TI=1,请求中断。12345678ABCD87654321DCBATitleNumberRevisionSizeA2Date:16-Mar-2009SheetofFile:E:\教材参编\第七章图\ch7gzsx.ddbDrawnBy:写入SBUFS1P1SENDTXDSHIFTD0D1D2D3TID4D5D6D7TXCLOCK方式2发送时序DATA起始位停止位TB8STOPBITGEN2019/8/1430方式2和方式3接收数据从右边移入输入移位寄存器,最后一次移位后,若RI=0,且SM2=0(或接收到的第9位数据为1)时,接收到的数据装入接收缓冲器SBUF和RB8(接收数据的第9位),置RI=1,向CPU请求中断。如果条件不满足,则数据丢失,且不置位RI12345678ABCD87654321DCBATitleNumberRevisionSizeA2Date:16-Mar-2009SheetofFile:E:\教材参编\第七章图\ch7gzsx.ddbDrawnBy:RXDSHIFTD0D1D2D3RID4D5D6D7RXCLOCK方式2接收时序起始位停止位位检测器采样时间RB82019/8/1431波特率的计算方式0、2的波特率是固定的,而方式1、3的波特率是可变的,由定时器T1的溢出率来决定。方式0波特率=fosc/12方式2波特率=(2SMOD/64)·fosc方式1波特率=(2SMOD/32)·(T1溢出率)方式3波特率=(2SMOD/32)·(T1溢出率)T1溢出率=fosc/{12×[256-(TH1)]}T1方式2,TR1=1(以启动定时器)2019/8/14322019/8/1433串行口初始化具体步骤:确定T1的工作方式(编程TMOD寄存器);计算T1的初值,装载TH1、TL1;启动T1(编程TCON中的TR1位);确定串行口控制(编程SCON寄存器);串行口在中断方式工作时,还要进行中断设置(编程IE、IP寄存器)。2019/8/14347.3串行口应用举例用串行口扩展I/O口用串行口进行双机异步通信用串行口进行多机异步通信2019/8/14357.3.1用串行口扩展I/O口例1用并行输入8位移位寄存器74HC165扩展16位并行输入口。编程实现从16位扩展口读入20个字节数据,并把它们转存到内部RAM的50H~63H中。QHVCCGNDSINCKD711D6D5D4D3D2D1D01213143456916874HC165(1)QHVCCGNDSINCKD711D6D5D4D3D2D1D012131434569874HC165(2)89S51P3.0P3.1P1.0数据输入移位脉冲1212S/LS/L+5V16+5V2019/8/1436MOVR7,#20;设置读入字节数MOVR0,#50H;设片内RAM指针SETBF0;设置读入字节奇偶数标志RCV0:CLRP1.0;允许并行置入