第7章串行通信及其接口•7.1概述•7.2AT89S51的串行口•7.3波特率的制定方法•7.4多机通信•7.5串行口的编程和应用7.1概述串行通信是将数据的各位一位一位地依次传送。适合于计算机之间、计算机与外部设备之间的远距离通信。串行通信从传输方式分为:单工方式、半双工方式、全双工方式。串行通信从接收方式有两种方式:异步通信方式、同步通信方式。返回本章首页接收器图7-1单工方式示意图发送器接收器接收器发送器发送器数据流图7-2半双工方式示意图接收和发送不能同时进行,只能分时发送和接收发送器接收器数据流接收器发送器图7-3全双工方式示意图数据的发送和接收可以同时进行总结:不管哪种形式的串行通信,在两机之间均应有共地线。•异步通信ASYNC在异步通信方式中,接收器和发送器有各自的时钟,它们的工作是非同步的。在异步通信中数据或字符是以帧形式传送的。最常见的帧格式一般是先用一位起始位“0”表示字符的开始;然后是5~8位数据,低位在前,高位在后;其后是校验位,此位用于判别字符传送的正确性;最后是停止位,用以表示字符的结束,停止位可以是1~2个停止位。图7-4异步串行通信数据格式从起始位开始到停止位结束就构成了完整的一帧。异步通信时可能会出现帧格式错、超时错等传输错误。在具有串行口的单片机的开发中,应考虑在通信过程中对数据差错进行校验,因为差错校验是保证准确无误通信的关键。1)奇偶校验2)和校验3)循环冗余码校验同步通信SYNC在同步通信中,发送器和接收器由同一个时钟源控制。数据或字符开始处是用一同步字符来指示,以实现发送端和接收端同步,一旦检测到约定同步字符,就连续按顺序接收数据。图7-5同步通信方式及数据格式思考题:同步通信和异步通信来传送数据块,一般来说哪个速度快,为什么?同步通信数据块传送时去掉了字符开始和结束的标志,所以其速度高于异步传送,但这种方式对硬件结构要求较高。7.2AT89S51单片机的串行口•7.2.1串行口的结构•7.2.2串行口的工作方式返回本章首页7.2.1串行口的结构AT89S51单片机内部的串行口,有两个物理上独立地接收、发送缓冲器SBUF,可同时接收、发送数据,发送缓冲器只能写入不能读出,接收缓冲器只能读出不能写入。结构图这两个缓冲器共用一个字节地址99H.例:判断使用的是发送SBUF还是接收SBUF?MOVA,SBUFMOVSBUF,A接收SBUF发送SBUF1.串行口控制寄存器SCON该寄存器的字节地址为98H,可位寻址。SCON格式如图7-6所示。图7-6SCON格式1)SCON.7和SCON.6SM0和SM1串行方式选择位。2)SCON.5SM2在方式2和方式3中主要用于多机通信控制。方式2和方式3i)若SM2=1,且接收到第9位RB8=“0”时,RI不置“1”,不接收主机发来的数据;ii)SM2=1,RB8=1,RI置“1”。产生中断请求,将接收到的8位数据送入SBUF.iii)SM2=0,不论RB8为“0”还是为“1”,都将接收到的8位数据送入SBUF中,置RI=1并中断。方式0,SM2应置“0”。方式1,接收时,若SM2=1,则只有收到有效的停止位时,RI才置“1”3)SCON.4REN允许串行接收位。由软件置位或清除。REN=1允许接收REN=0禁止接收4)SCON.3TB8发送数据的第9位。双机通信时可作奇偶校验位。多机通信时可作区别地址帧或数据帧的标识位。约定:地址帧时TB8为“1”,数据帧时为“0”5)SCON.2RB8接收数据的第9位。方式2和3,RB8存放接收到第9位数据,方式1,如SM2=0,RB8接收到停止位,方式0,不使用RB8.6)SCON.1TI发送中断标志位方式0,发送完8位数据后,硬件置“1”其它方式,在发送停止位之初由硬件置位TI=1,可申请中断,也可供软件查询用但任何方式都必须由软件清除CLRTI7)SCON.0RI接收中断标志位方式0,接收完8位数据后,硬件置位其它方式,在接收停止位时,由硬件置位。表示一帧数据接收完毕,此时可要求CPU从接收SBUF取走数据。RI=1,可申请中断,也可供软件查询用但任何方式都必须由软件清除CLRRI2.特殊功能寄存器PCON•其字节地址为87H,没有位寻址功能。PCON的格式如图7-7所示,其中与串行接口有关的只有D7位。SMOD是串行口波特率倍增位。其他各位的功能已在第2章的节电工作方式一节中作过介绍。图7-7PCON格式返回本节方式1波特率=定时器T1的溢出率SMOD2327.2.2串行口的工作方式表7-1串行口工作方式返回1.方式0该方式并不用于两个AT89S51单片机之间的异步串行通信,而是用于串行口外接移位寄存器,扩展并行I/O口。此方式下,串行口作同步移位寄存器用,以8位数据为一帧,先发送或接收最低位,每个机器周期发送或接收一位,故其波特率是固定的。这种方式常用于扩展I/O口.举例proteus程序串行数据由RXD(P3.0)输入或输出同步移位脉冲由TXD(P3.1)输出方式0发送时序.机器周期写SBUFRXD(数据)D6D0D2D5D4D3D7D1TXD(移位脉冲)TI方式0发送时序.机器周期写SBUFRXD(数据)D0D1D2D3D4D5D6D7TXD(移位脉冲)TI方式0接收时序.机器周期写SCONRXD(数据)D6D0D2D5D4D3D7D1TXD(移位脉冲)RI方式0接收时序.机器周期写SCONRXD(数据)D0D1D2D3D4D5D6D7TXD(移位脉冲)RI2.方式1方式1为双机串行通信方式,如图7-9所示。串行口为8位通用异步接口。发送或接收一帧数据,包括一位起始位“0”、8位数据位和1位停止位“1”,其传送波特率可调。方式1的帧格式:D1D2D3D4D5D6D7TXDD0起始停止方式1波特率=定时器T1的溢出率SMOD232发送时,数据从TXD端输出,当数据写入发送缓冲器SBUF时,就启动发送器发送。发送完一帧数据后,TI置“1”,申请中断,通知CPU可以发送下一个数据。方式1发送时序(TX时钟的频率就是发送的波特率).写SBUFTXDTITX时钟D1D2D3D4D5D6D7D0起始停止SEND有效方式1发送时序.写SBUFD1D2D3D4D5D6D7TXDTITX时钟D0SEND起始停止接收时,数据从RXD(P3.1)引脚输入。使REN置“1”允许接收,串行口采样引脚RXD.当采样到1至0的跳变时,确认是起始位“0”,就开始接收一帧数据。当停止位到来之后把停止位送入RB8位,则置位中断标志RI,并申请中断,通知CPU从SBUF取走接收到的一个数据。•接收时,定时控制信号有两种,一种是接收移位时钟(RX时钟),它的频率和传送的波特率相同,另一种是位检测器采样脉冲,频率是RX时钟的16倍。以波特率的16倍速率采样RXD脚状态。当采样到RXD端从1到0的负跳变时就启动检测器,接收的值是3次连续采样(第7、8、9个脉冲时采样)取两次相同的值,以确认起始位(负跳变)的开始,较好地消除干扰引起的影响。当一帧数据接收完毕后,同时满足以下两条件,最后一次移位脉冲才能将前8位数据装入SBUF和RB8,并置位RI=1。(1)RI=0,即上一帧数据接收完成时,RI=1发出的中断请求已被响应,SBUF中的数据已被取走,说明“接收SBUF”已空。(2)SM2=0或接收到的第9位数据为1若两条不同时满足,则接收到的数据全部丢失,且不置位RI。方式1接收时序.RIRX时钟D1D2D3D4D5D6D7TXDD0起始停止位检测采样3.方式2串行口为9位异步通信接口。发送或接收一帧信息包括1位起始位“0”、8位数据位、1位可编程位和1位停止位“1”。其信息传送波特率与SMOD有关。发送前,先根据通信协议由软件设置TB8,然后将要发送的数据写入SBUF即能启动发送器。方式2,方式3的帧格式TXDD4D5D6D7D0D1D2D3起始停止D8方式2波特率=(2SMOD/64)fosc方式2,方式3发送时序.写SBUFSENDTXDD4D5D6D7D0D1D2D3起始停止D8TX时钟TI下面为发送中断服务程序,在双机通信中,以TB8为奇偶校验位,处理方法为数据写入SBUF之前,先将数据的奇偶校验位写入TB8(设工作寄存器区2的R0作为发送数据区地址指针).偶检验例7.1方式2发送在双机通信中的应用PIPT1:PUSHPSWPUSHAccSETBRS1CLRRS0CLRTIMOVA,@R0MOVC,PMOVTB8,CMOVSBUF,AINCR0POPAccPOPPSWRETI方式2和方式3的接收:数据由RXD端输入,REN=1时接收器开始采样RXD的电平,检测到RXD由高到低的负跳变时,启动接收器接收。若满足以下两条件,最后一次移位脉冲才能将前8位数据装入SBUF和RB8,并置位RI=1。(1)RI=0(2)SM2=0或接收到的第9位数据为1若两条不同时满足,则接收到的数据全部丢失,且不置位RI。方式2,方式3接收时序.RXDD4D5D6D7D0D1D2D3起始停止RB8TX时钟RI位检测采样例7.2方式2接收在双机通信中的应用若附加的第9位数据为校验位,在接收程序中作偶校验处理,可采用如下程序(设3组寄存器区的R0为数据缓冲器指针).PITI:PUSHPSWPUSHAccSETBRS0SETBRS1CLRRIMOVA,SBUFMOVC,PJNCL1JNBRB8,ERPAJMPL2L1:JBRB8,ERPL2:MOV@R0,A;数据→数据缓冲器INCR0POPAccPOPPSWERP:…;出错处理程序段入口RETI…4.方式3当SM0SM1=11时,串行口工作在方式3。方式3为波特率可变的9位异步通信方式,除了波特率外,方式3和方式2相同。方式3的波特率由下式确定:方式3波特率=(2SMOD/32)×定时器T1的溢出率返回本节7.3波特率的制定方法波特率的定义:串行口每秒钟发送(或接收)的位数。SYNC数据传送速率的单位返回本章首页例:数据传送速率120个字符每秒,每个字符由1个起始位、8个数据位和1个停止位组成,问波特率为多少?120×(1+8+1)=1200b/s=1200波特每一位的传送时间为波特率的倒数:t=1/1200=0.833ms异步通信的传送速度一般为50~9600波特。1)方式0,每个机器周期发送或接收一位数据,因此波特率固定为时钟频率的1/12。2)方式2,波特率取决于SMOD.方式2的波特率=×fosc1.方式0和方式2的波特率2SMOD642.方式1和方式3的波特率串行口方式1和方式3的波特率由定时器T1的溢出率与SMOD的值决定。方式1和方式3的波特率=×T1溢出率2SMOD32T1溢出率取决于计数速率和定时器的预置值计数速率与C/T(TMOD)的状态有关C/T=0,计数速率=fosc/12C/T=1,计数速度取决于外部输入时钟频率2SMOD32当定时器T1作波特率发生器使用时,通常是选用自动重装载方式。在方式2中,TL1作计数用,而自动重装载的值放在TH1内。设计数初值为X,那么每过“256–X”个机器周期,T1产生一次溢出。溢出周期=×(256-X)溢出率为溢出周期的倒数foscfosc12fosc波特率=×则定时器T1方式2的初始值为:X=256-2SMOD32fosc12×(256-X)384×波特率fosc×(SMOD+1)例:已知AT89S51单片机时钟振荡频率为11.0592MHZ,选用T1工作方式2作波特率发生器,波特率为2400b/s,求初值。解:设SMOD=0X=256-=244=F4HTH1=TL1=F4H384×240011.0592×106(0+1)表7-2波特率计算公式表7-3常用的波特率及计算器初值返回本节波特率foscSMOD位方式初值X62.5kbit/s12MHz12FFH19.2kbit/s11.0592MHz12FDH9.6kbit/s11.0592MHz02FDH4.8kbit/s11.0592MHz02FAH2.4kbit/s