《串行数据通信》PPT课件.ppt
7-1 串行通信基础知识,7-2 8051串行口,第7章 串行数据通信,7-3 8051串行口应用举例,7.1 计算机串行通信基础,计算机与外界进行信息交换称为通信。通信的基本方式:并行通信 串行通信(单片机中主要采用),一、异步通信与同步通信1、异步通信 异步通信是指通信双方使用各自的时钟控制数据的发送和接收过程。为使双方的收发协调,要求收、发双方的时钟尽可能一致,以起始位、停止位保持通信同步。其数据传送以帧为单位传送。每1帧数据由1个字符代码组成,每1个字符代码由起始位、数据位、奇偶校验位和停止位组成。,2、同步通信 以一串字符为一个传送单位,字符间不加标识位,字符串开始用同步字符标识(一般约定为12个字符),以触发同步时钟开始发送或接收数据;多字节数据之间不允许有空隙,每位占用的时间相等;空闲位需发送同步字符。硬件要求高,通讯双方须严格同步,适用于成批数据传送。单片机不用该方式。,异步通信对硬件要求较低,实现起来比较简单、灵活,适用于数据的随机发送/接收,但因每个字节都要建立一次同步,即每个字符都要额外附加两位,所以工作速度较低,在单片机中主要采用异步通信方式。,二、串行通信的制式 串行通信按照数据传送方向可分为三种制式:单 工:数据传输仅能沿一个方向传输。半双工:数据传输可以沿两个方向,但分时进行。全双工:数据可以同时进行双向传输。,三、串行通信波特率,波特率bps(bit per second)定义:每秒传输数据的位数。波特率的倒数即为每位传输所需的时间。相互通信的甲乙双方必须具有相同的波特率,否则无法成功地完成串行数据通信。,如每秒钟传送240个字符,而每个字符格式包含10位(1个起始位、1个停止位、8个数据位),这时的波特率为:10位240个/秒=2400 bps,7.2 80C51的串行口,两个物理上独立的接收、发送数据缓冲器SBUF,占用同一地址99H;接收器是双缓冲结构,即在接收一个数据字节后,能接收第二个数据字节,但它完成接收第二个数据字节之后,第一个字节仍未取走,则该字节数据丢失;发送缓冲器,因为发送时CPU是主动的,不会产生重叠错误。,7.2.1 80C51串行口的结构,8051系列单片机有一个全双工的串行口,可以实现异步串行通信。也可用做同步移位寄存器。,SCON 是一个特殊功能寄存器,用以设定串行口的工作方式、接收/发送控制以及设置状态标志:,7.2.2 80C51串行口的控制寄存器,SM0和SM1为工作方式选择位,可选择四种工作方式:,TB8,在方式2或方式3中,是发送数据的第九位,可以用软件规定其作用。可以用作数据的奇偶校验位,或在多机通信中,作为地址帧/数据帧的标志位。在方式0和方式1中,该位未用。RB8,在方式2或方式3中,是接收到数据的第9位,可作为奇偶校验位或地址帧/数据帧的标志位。在方式1时,接收到的是停止位。REN,允许串行接收位。由软件置REN=1,则启动串行口接收数据;若软件置REN=0,则禁止接收。,SM2,方式2和方式3中多机通信允许控制位 方式0时,SM2=0;方式1时,SM2=1,只有接收到有效停止位时,RI才置1,SM2=0,停止位为0或1,RI都置1;方式2和方式3时,当SM2=1,如果接收到的第9位数据RB80,则RI清0,如果接收到的第9位数据RB81,则RI置1,即由RB8控制是否激活RI。当SM2=0时,不论收到的RB8为0和1,均可以使收到的数据进入SBUF,并激活RI(即此时RB8不具有控制RI激活的功能)。通过控制SM2,可以实现多机通信。,TI,发送中断标志位。在方式0时,当串行发送第8位数据结束时,或在其它方式,串行发送停止位的开始时,由内部硬件使TI置1,向CPU发中断申请。在中断服务程序中,必须用软件将其清0,取消此中断申请。RI,接收中断标志位。在方式0时,当串行接收第8位数据结束时,或在其它方式,串行接收停止位的中间时,由内部硬件使RI置1,向CPU发中断申请。也必须在中断服务程序中,用软件将其清0,取消此中断申请。,PCON中只有一位SMOD与串行口工作有关:,SMOD(PCON.7)波特率倍增位。在串行口方式1、方式2、方式3时,波特率与SMOD有关,当SMOD=1时,波特率提高一倍。复位时,SMOD=0。,7.2.3 80C51串行口的工作方式,一、方式0 方式0时,串行口为同步移位寄存器的输入输出方式。主要用于扩展I/O口。串行数据由RXD(P3.0)引脚输入或输出,同步移位脉冲由TXD(P3.1)引脚输出,作为外接部件的同步信号。发送和接收均为8位数据,低位在先,高位在后。波特率固定为fosc/12。用的少。,二、方式1 方式1是10位通用异步串行接口。TXD为数据发送引脚,RXD为数据接收引脚,传送一帧数据的格式如图所示。其中1位起始位,8位数据位,1位停止位。此方式的传送波特率可调。,1、方式1发送,当执行数据写入发送缓冲器SBUF的命令时,将1写入发送移位寄存器的第9位,并通知发送控制器有发送请求,就启动发送器开始发送。发送移位时钟由定时器T1送来的溢出信号经16分频或32分频而取得。该移位时钟就是发送波特率。T1的溢出率可设置,所以波特率是可变的。发送开始时将起始位向TXD输出,此后每过一个移位时钟周期送出一位数据位,8位数据全部发送完后,置TI位,申请中断,并置TXD为1作为停止位。,2、方式1接收,用软件置SCON寄存器的REN为1的前提下,接收端在每个采样周期对RXD引脚采样,若引脚为高电平,即发送端未发送数据,接收端什么也不干。若采样到RXD引脚输入电平发生负跳变时,立即启动一次接收,同时复位16分频计数器,使输入位的边沿与时钟对齐,并将1FF写入接收移位寄存器,使波特率发生器从当前采样脉冲开始每隔16个采样脉冲产生一个移位脉冲,每个移位脉冲到来,接收端将接收移位寄存器左移一位,原来写入的1从左边移出,且将引脚RXD上的状态移入移位寄存器。当起始位移到最左边时,接收控制器将控制进行最后一次移位,若该位为1,把接收到第9位数据送到接收SBUF和RB8,且置位RI,若为0,则S M2=0时,把接收到第9位数据送到接收SBUF和RB8,且置位RI,若SM2=1,接收到的第9位为0,不申请中断(RI=0),表明传送产生误差,可采取纠错方法进行重发,第9位为1,则表明一个数据的接收过程结束,接收端为接收下一个数据做准备。这个过程包括:将移位寄存器中的数据送入输入缓冲器,向CPU申请中断,输入端又在采样脉冲的控制下不断采样引脚RXD。,为接收准确无误,在正式接收数据之前,还必须判断起始位是否由干扰引起的。在这位中间,即移位数据采样16次,对第7、8及9次连续值中,取其中两次相等的值作为该位值。这样能较好的消除干扰的影响,当确认是真正的起始位后,就开始接收一帧数据。当一帧数据接收完毕后,必须满足两个条件,这次接收才真正有效。即:RI=0(即上一帧数据接收完成时,RI发出的中断请求已被响应,SBUF中的数据已被取走。由软件使RI=0,以便提供“接收SBUF已空的信息);SM2=0(或接收到的停止位为1)时,将接收到的前8位数据装入接收SBUF,第9位(停止位)进入RB8,并置RI=1,向CPU请求中断。如果上述条件不满足,则该帧丢失。,三、方式2和方式3 方式2或方式3时为11位数据的异步通信口。TXD为数据发送引脚,RXD为数据接收引脚。,方式2和方式3每帧均为11位,1位起始位,8位数据位,一位可编程的第9位(发送时软件设置为SCON中的TB8位,接收时进入SCON中的RB8位),1位停止位。方式2的波特率固定为晶振频率的1/64或1/32,方式3的波特率由定时器T1的溢出率决定。,1、方式2和方式3发送,发送前,先根据用户约定的通信协议由软件设置TB8的值,然后把要发送的数据写入SBUF启动发送过程,先把起始位0输出到TXD引脚,然后发送移位寄存器的输出位(D0)到TXD引脚。每一个移位脉冲都使输出移位寄存器的各位右移一位,并由TXD引脚输出。第一次移位时,停止位“1”移入输出移位寄存器的第9位上,以后每次移位,左边都移入0。当停止位移至输出位时,左边其余位全为0,检测电路检测到这一条件时,使控制电路进行最后一次移位,并置TI=1,向CPU请求中断。,2、方式2和方式3接收,接收时,先置位SCON的REN位,允许串口接收。当检测到RXD端有负跳变时,使数据从右边移入移位寄存器,在起始位0移到最左边时,控制电路进行最后一次移位。当RI=0,且SM2=0(或接收到的第9位数据为1)时,接收到的数据装入接收缓冲器SBUF和RB8(接收数据的第9位),置RI=1,向CPU请求中断。如果条件不满足,则数据丢失,且不置位RI,继续搜索RXD引脚的负跳变。,四、波特率的计算 在串行通信中,收发双方对发送或接收数据的速率要有约定。其中方式0和方式2的波特率是固定的,方式1和方式3的波特率是可变的,由定时器T1的溢出率来决定。方式0中移位脉冲由CPU时钟(机器周期)给出,每个机器周期产生一个移位脉冲,发送或接收一位数据。波特率=fosc/12 方式2的波特率=(2SMOD/64)fosc,方式1和方式3的波特率由定时器T1的溢出率与SMOD值确定。方式1的波特率=(2SMOD/32)(T1溢出率)方式3的波特率=(2SMOD/32)(T1溢出率)T1溢出率取决于T1的工作方式、时钟频率和TI预置值,定时器T1作波特率发生器使用时,通常选用定时器(对内部机器周期计数)模式2,即自动重装在方式,另外要禁止TI中断,以免T1溢出时产生不必要的中断。方式1和方式3的波特率=(2SMOD fosc/32 12(2n-初值),在单片机的应用中,常用的晶振频率为:12MHz和11.0592MHz。所以,选用的波特率也相对固定。常用的串行口波特率以及各参数的关系如表所示。,串行口工作之前,应对其进行初始化,主要是设置产生波特率的定时器1、串行口控制和中断控制。具体步骤如下:确定T1的工作方式(编程TMOD寄存器);计算T1的初值,装载TH1、TL1;启动T1(编程TCON中的TR1位);确定串行口控制(编程SCON寄存器);串行口在中断方式工作时,要进行中断设置(编程IE、IP寄存器)。,7.3 单片机串行口应用举例,在计算机分布式测控系统中,经常要利用串行通信方式进行数据传输。80C51单片机的串行口为计算机间的通信提供了极为便利的条件。例:单片机1内部RAM20H-23H中有4个数据要发给单片机2,单片机2接收到后存入其内部RAM的33H-36H中。晶振都为6M,要求用4800bps通信,收发双方都采用串口方式1.,单片机间的通信,1、硬件连接,两个单片机的接收端都接一个上拉电阻,以保证单片机上电后串口检测机构在该接收端上检测到的信号为空闲状态。由于两个系统上电后各自都需要初始化,事先无法预料哪个系统先初始化好,所以发送端在发送数据之前应先发送一个联络信号询问接收端是否准备好。假如发送01010101为询问信号。接收端在接收到这个信号后也回应一个01010101表示接收端准备好,然后发送端开始发送数据,接收端开始接收数据。单片机1中用程序状态字PSW中的用户标志位F0指示单片机2是否处于准备好状态,单片机2中用F0指示单片机1送来的数据是查询信息还是有效数据。,系统1,系统2,2、程序ORG 0000HLJMP MAINORG 0023H LJMP SUB1MAIN:MOV SCON,#50H;设置串口工作方式1,不允许多机通信,允许接收,TB,RB方式1;中未用;串口发送无中断,接收无请求 MOV TMOD,#20H;定时器1工作在方式2;MOV TL1,#0FDH MOV TH1,#0FDH MOV IE,#90H;打开全局和串口中断 SETB TR1;启动定时器1,使波特率发生器产生移位和采样脉冲INI:MOV SBUF,#55H;发送到缓冲器 MOV R1,#0FFH:为下面循环设置循环次数;延时应大于单片机1,2串口LOOP:NOP;中断服务程序处理时间之和 DJNZ R1,LOOP JNB F0,INI;为0接收端为准备好,否则再发送询问信号 MOV R0,#21H;设下次发送的地址指针 MOV SBUF,20H;发第一个数据 LJMP$,中断服务程序:SUB1:JNB RI,LAB0;如果是接收中断,则SBUF中是2的;应答信号,处理应答,如果是发送中;断,跳转执行发送数据程序。MOV A,SBUF CJNZ A,#55H,LAB1,相等,2准备好 SETB F0;告诉主程序单片机2准备好 CLR RI;清接收中断,为下次作准备LAB1:RETILAB0:MOV SBUF,R0 INC R0 CJNE R0,#24H,LAB2 CLR ES;发送完,禁止串口中断LAB2:CLR TI RETI END,单片机2程序:ORG 0000HLJMP MAINORG 0023H LJMP SUB1MAIN:MOV SCON,#50H;设置串口工作方式1,不允许多机通信,允许接收TB,RB方式1;中未用;串口发送无中断,接收无请求 MOV TMOD,#20H;定时器1工作在方式2;MOV TL1,#0FDH MOV TL2,#0FDH MOV IE,#90H;大开全局和串口中断SETB TR1;启动定时器1,使波特率发生器产生移位和采样脉冲 LJMP$SUB1:JB F0,LAB2;为0,表明当前数据为单片机1送的查询信号,为1为有效数据 MOV A,SBUF CJNE A,#55H,LAB1 SETB,F0;表明下一次接收的数据为有效数据 CLR,RI;清除接收中断申请标志 MOV SBUF,#55H;发送应答信号LAB1:RETILAB2:MOV R,SBUF;存储接收数据 INC R0 CJNE R0,#37,LAB3 CLR ES;关闭串口中断LAB3:CLR RI;清除串口接收中断申请标志 RETI END,