您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 第八章 串行口与串行通信
第八章串行口与串行通信8.1串行通信概述8.2单片机的串行口8.3串行通信工作方式8.4串行口通信的应用举例8.1串行通信概述•8.1.1同步通信和异步通信方式•8.1.2波特率•8.1.3通信方向•8.1.1同步通信和异步通信方式•通信方式有两种:并行通信和串行通信。通常根据信息传送的距离决定采用哪种通信方式。如果距离小于30米时,可采用并行通信方式;当距离大于30米时,则要采用串行通信方式。MCS-51系列单片机具有并行和串行两种通信方式。串行通信又有异步通信和同步通信两种。8.1.1同步通信和异步通信方式•1.同步通信•在同步通信中,开始传送数据前用同步字符来指示(常约定1-2个),并由时钟来实现发送端和接收端同步,即检测到规定的同步字符后,下面就连续按顺序传送数据,直到通信告一段落。•插入的同步字符可以是单同步字符方式或双同步字符方式,然后是连续的数据块。同步字符可以由用户约定,也可以采用ASCII码中规定的SYN代码,即16H。•在同步传送时,要求用时钟来实现发送端和接收端之间的同步。为了保证接收正确,发送方除了传送数据外,还要把时钟信号同时传送出去。•同步传送的优点是可以提高传送速率,但硬件比较复杂。同步通信格式如图8-1所示。8.1.1同步通信和异步通信方式图8-1同步通信格式8.1.1同步通信和异步通信方式•2.异步通信•在异步通信中,数据是一帧一帧(包含一个字符代码或一字节数据)传送的,每一帧数据的格式如图8-2所示。•图8-2异步通信格式8.1.1同步通信和异步通信方式•在帧格式中,一个字符由四部分组成:起始位、数据位、奇偶校验位、停止位。首先是一位起始位“0”,然后是5~8位数据(规定低位在前,高位在后)接下来是奇偶校验位,最后一位停止位“1”。起始位“0”用来通知接收设备准备接收数据,其后紧跟数据位,它可以是5位~8位,奇偶校验位可省略,停止位表示字符的结束,它一般是高电平“1”。两个字符间有空闲位的情况,空闲位为“1”。8.1.2波特率•波特率即数据传送的速率,表示每秒传送二进制代码的位数,它的单位是位/秒,又称波特。•假如数据传送速率是120字符/秒,每个字符由一个起始位、8个数据位和一个停止位组成,则数据的波特率为10×120=1200位/秒=1200波特,数位的波特率为8×120=960位/秒=960波特。•异步通信的波特率在50到19200波特间,同步通信的波特率在56千波特或更高。8.1.3通信方向•在串行通信中,若单片机的通信接口只能发送数据或只能接收数据,这种单方向传送的方式称为单工通信。若单片机的通信接口既能发送数据也能接收数据,且发送数据和接收数据可以同时进行,这种传送的方式称为全双工通信。如果接收数据和传送数据不能同时进行,只能分时接收数据和传送数据,称为半双工通信。8.2单片机的串行口•8.2.1串行口结构与工作原理•8.2.2串行口控制寄存器SCON•8.2.3电源控制寄存器PCON8.2.1串行口结构与工作原理•单片机通过引脚P3.0(RXD串行数据接收端)和引脚P3.1(TXD串行数据发送端)与外界进行串行通信,其内部结构如图8-3所示。图8-3串行口内部结构示意图8.2.1串行口结构与工作原理•专用寄存器SBUF是串行口缓冲寄存器,即是发送寄存器也是接收寄存器,占用同一个地址空间99H。发送缓冲器只能写入,不能读出,接收缓冲器只能读出,不能写入。接收器是双缓冲结构,以避免在接收到第二帧数据前,CPU还未取走前一帧数据,而造成两帧数据重叠的错误。对于发送器,因为发送时CPU是主动的,不会产生重叠错误,一般不需要双缓冲器结构,以保持最大传送率。•串行口的发送和接收是通过对SBUF读写来实现的。通常向SBUF发出“写”命令,即指令“MOVSBUF,A”向发送缓冲器SBUF装载并开始由TXD引脚向外界发送一帧数据,发送完成后,中断标志位TI置1。8.2.1串行口结构与工作原理•在满足串行口接收中断标志位RI(SCON.0)=0的条件下,置允许接收位REN(SCON.4)=1,串口就会启动接收一帧数据进入输入移位寄存器,并装载到接收SBUF中,同时使RI=1。发出读SBUF命令,执行命令“MOVA,SBUF”,即是由接收缓冲器SBUF取出信息,通过单片机内部总线送给CPU。8.2.2串行口控制寄存器SCON•单片机串行口开始工作,必须首先设置串口控制寄存器SCON。串行通信的方式选择、接收和发送控制以及串行口的状态标志均由专用寄存器SCON控制。其地址为98H,可以通过位寻址来控制其每一位的状态,其格式如图8-4所示。图8-4串行口控制字SCON8.2.2串行口控制寄存器SCON•各位具体设置如下。•1.RI(SCON.0)•接收中断标志位,RI置位表示一帧信息接收完毕。•(1)在方式0中,当接收完第8位数据时,由硬件将RI位置位;•(2)在其他三种方式中,在接收到停止位时由硬件将RI位置位。RI置位即表示一帧信息接收结束,并已装入接收SBUF中,要求CPU取走数据,同时申请中断。若CPU响应中断,则取走数据,准备接收下一帧数据,中断被响应后,RI不会自动清零,必须由软件清零。也可用软件查询该位状态,判断接收是否结束。8.2.2串行口控制寄存器SCON•2.TI(SCON.1)•发送中断标志位,TI=1表示一帧信息发送结束。•(1)在方式0中,第8位发送结束时,由硬件将TI位置位;•(2)在其他三种方式中,在发送停止位之初,由硬件将TI位置位。TI置位意味着向CPU提供“发送缓冲器SBUF已空”的信息,CPU可以准备发送下一帧数据,同时申请中断,但中断被响应后,TI不会自动清零,必须由软件清零。也可用软件查询该位状态,判断发送是否结束。8.2.2串行口控制寄存器SCON•3.RB8(SCON.2)•(1)方式0中,该位未用。•(2)方式1中,若SM2=0(即不是多机通信情况),RB8中存放的是已接收到的停止位。•(3)用方式2和方式3进行异步通信时,把接收到的第9位数据放在RB8中。它或是约定的奇/偶校验位,或是约定的地址/数据标志位。•在多机通信中,若SM2=1,RB8=1,说明接收到的数据为地址帧。8.2.2串行口控制寄存器SCON•4.TB8(SCON.3)•(1)方式0和方式1中,该位未用。•(2)用方式2和方式3进行异步通信时,发送数据第9位取自特殊功能寄存器SCON的TB8。•在许多通信协议中它可作为奇/偶校验位,也可在多机通信中作为发送地址帧或数据帧的标志位。在多机通信中,若TB8=1说明发送过来的该帧数据为地址;TB8=0说明发送过来的该帧数据为数据字节。8.2.2串行口控制寄存器SCON•5.REN(SCON.4)•允许接收控制位。由软件置1或清零。它相当于串行接收的开关,只有当REN=1时才允许接收数据,若REN=0,则禁止接收数据。•在串行通信接收控制程序中,如果满足RI=0,且置位REN=1(允许接收)的条件,就会启动一次接收过程,一帧数据就装入接收SBUF中。8.2.2串行口控制寄存器SCON•6.SM2(SCON.5)•多机通信控制位,主要用于方式2和方式3。•若SM2=0不属于多机通信,接收一帧数据后,置RI=1,并把接收到的数据装入SBUF中。串口工作在方式0时,SM2必须为零。•若SM2=1,允许多机通信。串口工作在方式1时,若SM2=1,则只有接收到有效停止位时,RI才置1,以便接收下一帧数据。当串口工作在方式2和方式3接收数据时,根据多机通信协议规定,第9位数据为“1”,说明本帧数据为地址,数据装入SBUF并置RI=1;若第9位为“0”,说明本帧为数据帧,则使中断标志位RI=0,信息丢失。8.2.2串行口控制寄存器SCON•7.SM0、SM1(SCON.7和SCON.6)通过这两位选择串口工作方式,如表8-1所示。8.2.2串行口控制寄存器SCON•(1)方式0:8位同步移位寄存器方式。•(2)方式1:10位异步收发,一帧字符包括1位起始位、8位数据位、1位停止位。串行接口电路在发送时能自动插入起始位、停止位。•(3)方式2和方式3:11位异步收发,除了1位起始位、8位数据位、1位停止位外,还可以插入第9位数据位,两种方式波特率不同。8.2.3电源控制寄存器PCON•电源控制寄存器PCON中只有波特率加倍位SMOD与串行口有关,如图8-5所示。在串行口方式1、方式2和和方式3中,波特率加倍位SMOD=1时,波特率提高一倍。8.3串行通信工作方式•8.3.1工作方式0•8.3.2工作方式1•8.3.3工作方式2•8.3.4工作方式3•8.3.5波特率设计••8.3.1工作方式0•方式0以8位数据为一帧字符,不设起始位和停止位,先发送或接收最低位。它为同步移位寄存器输入/输出方式,常用于扩展I/O口。串行口通过RXD(P3.0)输入数据,TXD(P3.1)专用于输出时钟脉冲给外部移位寄存器,作为扩展外围器件的同步信号。通过74LS164芯片可扩展并行输出口,通过74LS165芯片可扩展输入口。方式0的波特率为晶振频率的1/12。若晶振频率为12MHz,则波特率为1Mb/s。8.3.2工作方式1•方式1用于串行发送和接收,为10位通用异步接口。串行口通过RXD(P3.0)输入数据,而通过TXD(P3.1)输出数据。一帧数据的格式为1位起始位、8位数据位(低位在前)、1位停止位,共10位。在接收时,停止位进入SCON的RB8中。此方式的波特率可变化,为.T1的溢出率。其中SMOD可取0或1,定时器的溢出率为定时时间的倒数,决定于定时器的初值。8.3.3工作方式2•方式2为每帧11位异步通信格式,由TXD和RXD发送与接收数据。每帧11位,即1位起始位、8位数据位(低位在前)、1位可编程的第9位和1位停止位。•单机通信时,发送数据的第9位取自TB8,它可以设置为1或0,也可将奇偶位装入TB8中,从而进行奇偶校验,发送完毕,置TI为“1”。•接收数据时,若SCON中的REN=1,表示允许接收数据。当满足RI=0且SM2=0时,前8位数据送入SBUF,附加的第9位数据位进入SCON的RB8中,并置RI为“1”。•方式2的波特率为或。32fosc64fosc8.3.4工作方式3•方式3也为每帧11位异步通信格式,由TXD和RXD发送与接收数据。帧格式、发送和接收数据方式与方式2相同,只是其波特率由定时器溢出率决定。•方式3的波特率可变化,为.T1的溢出率。其中SMOD可取0或1,T1的溢出率决定于定时器T1的初值。8.3.5波特率设计•在串行通信中,收发双方发送或接收数据的速率,称为波特率。MCS-51系列单片机串行口方式0和方式2的波特率是固定的;而方式1和方式3的波特率是可变的,由定时器T1的溢出率决定。•1.方式0的波特率:方式0的波特率为fosc/12。•2.方式2的波特率:方式2的波特率为fosc/32或fosc/64。•3.方式1和方式3的波特率:它们的波特率由定时器T1的溢出率与SMOD值共同决定,为.T1的溢出率。定时器T1作波特率发生器时,通常选用定时器T1工作方式2(自动重装初值方式)。若T1的初值用X表示,则:•T1的溢出率=/(28—X)•方式1、方式3的波特率=×322SMOD12fosc322SMOD)X256(12fosc8.3.5波特率设计•例8.1MCS-51系列单片机时钟频率为11.0529MHz,串口工作方式1时,选用定时器T1工作方式2作为波特率发生器,波特率为2400b/s,求定时器T1的初值。•解:设置波特率控制位(SMOD)=0,定时器T1的初值:•X=256-=244D=0F4H•所以,定时器T1的初值为0F4H•系统晶振频率选为11.0592MHz就是为了使初值为整数,从而产生精确的波特率。•如果串行通信选用很低的波特率,可将定时器T1置于工作方式0或工作方式1,即13位或16位定时方式;但在这种情况下,T1溢出时,需要中断服务程序重装初值。中断响应时间和执行指令时间会使波特率产生一定的误
本文标题:第八章 串行口与串行通信
链接地址:https://www.777doc.com/doc-3227739 .html