您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 其它相关文档 > 第7章STC89C52单片机串行通信
TankertankerDesign7.1串行通信概述7.2串行口的结构7.3串行口的四种工作方式7.4波特率的设定与计算7.5STC89C52单片机之间的通信7.6PC与单片机间的通信TankertankerDesign7.1串行通信概述7.1.1数据通信1、并行通信和串行通信(数据通信的两种常用形式)(1)并行方式——数据的各位同时发送或同时接收。并行通信并行传送特点:逻辑清晰,控制简单,传送速度快,但因需要多根传输线,故一般只在近距离通信中使用。TankertankerDesign(2)串行方式——数据的各位依次逐位传送。串行通信串行传送特点:控制较并行传送复杂,传输速度慢,但因只需较少传输线,故适合于远距离通信。TankertankerDesign有时为了节省线缆数量,即使在计算机内部,CPU和某些外设之间也可以采用非并行的传输方式,如IIC、SPI、USB等标准传输方式,但它们与这里所述的串行通信有明显不同。总之,串行通信是以微处理器为核心的系统之间的数据交换方式,而IIC、SPI、USB等标准接口是微处理器系统与非微处理器型外设之间的数据交换方式。前者可以是对等通信,而后者只能采用主从方式。TankertankerDesign2、单工、半双工、全双工按照传输数据流向,串行通信具有3种传输形式:单工、半双工和全双工。在单工制式下,通信线的一端为发送器(TXD),一端为接收器(RXD),数据只能按照一个固定的方向传送。在半双工制式下,系统由一个TXD和一个RXD组成,但不能同时在两个方向上传送,收发开关由软件方式切换。TankertankerDesign在全双工制式下,通信系统每端都有TXD和RXD,可以同时发送和接收,即数据可以在两个方向上同时传送。实际应用中,尽管多数串行通信接口电路具有全双工功能,但仍以半双工为主(简单实用)。TankertankerDesign7.1.2异步通信和同步通信在串行数据通信中,有同步和异步两种基本方式。同步和异步的最本质区别在于通信双方是否采用使用相同的时钟源。1.异步通信——以字符为单位组成字符帧进行的数据传送。数据以帧为单位进行传送。一帧数据由起始位、数据位、可编程校验位(可选)和停止位构成。帧和帧之间可以有任意停顿TankertankerDesign•起始位:占1位,用于实现发送方和接收方之间的同步。当不进行数据通信时,通信线路保持高电平,当发送端准备向接收端传输数据时,首先发送起始位,即逻辑上的0电平,使得串行通信线路的电平由高变低,接收端在检测到这一电平变化后,可以准备接收数据。•数据位:可以是字符或数据,一般为5~8位,由低位到高位依次传送。•可编程校验位:占1位,是用户自定义的特征位,用于通信过程中数据差错的校验,或传送多机串行通信的联络信息。常用的差错校验方法有奇偶校验、和校验及循环冗余码校验。•停止位:占1位,位于数据位末尾,用于告知一帧结束,始终为高电平。数据传输结束后,发送端发送逻辑1,将通信线路再次置为高电平,表示一帧数据发送结束。TankertankerDesign异步通信特点:灵活,对收发双方的时钟精度要求较低(收发双方不同步时,能依靠在每帧开始时的不断对齐,自行纠正偏差),适用于数据的发送和接收;传送速度较低(每个字节都要建立一次同步)。STC89C52单片机只支持异步通信。TankertankerDesign2.同步通信——数据以块为单位进行的数据传送发送方先发送1-2个字节的同步字符,接收方检测到同步字符(一般由硬件实现)后,即准备接收后续的数据流。由于同步通信省去了字符开始和结束标志,而且字节和字节之间没有停顿,其速度高于异步通信。同步通信特点:数据成批传送;传输效率高(以数据块为单位连续传送,数据结构紧凑);对通信硬件要求高(要求双方有准确的时钟)。TankertankerDesign•7.1.3波特率波特率是表征串行通信数据传输快慢的物理量。波特率:每秒发送二进制数码的位数,即bps(位/秒)常用波特率:50、110、300、600、1200、2400、4800、9600、19200、38400波特等。串行通信的收发双方必须采用相同的波特率。TankertankerDesign发送/接收时钟频率与波特率有关,即fT/R=n×BRT/R式中,fT/R为收发时钟频率,单位为Hz;BRT/R为收发波特率;n为波特率因子。同步通信n=1。异步通信n可取1、16或64。也就是说,同步通信中数据传输的波特率即为同步时钟频率,而异步通信中,时钟频率可为波特率的整数倍。TankertankerDesign【例7-1】设单片机以1200bps的波特率发送120字节的数据,每帧10位,问至少需要多长时间?解:所谓“至少”,是指串行通信不被打断,且数据帧与帧之间无等待间隔的情况。需传送的二进制位数为10×120=1200位所需时间T=1200(位)/1200(bps)=1秒TankertankerDesign•7.2串行口的结构STC89C52RC单片机内部集成有一个可编程的全双工的异步通信串行口,可以作为通用异步接收/发送器(UART),也可作为同步移位寄存器使用。TankertankerDesign2个数据缓冲器SBUF在物理上是相互独立的,一个用于发送数据、另一个用于接收数据。2个SBUF共用一个地址(99H),通过读写指令区别是对哪个SUBF的操作。C51:ucharcounter;待发送存放变量…SBUF=counter;完成一次数据发送…counter=SBUF;完成一次数据接收汇编:MOVSBUF,#DATA;完成一次数据发送…MOVA,SBUF;完成一次数据接收…TankertankerDesign发送控制器的作用是在门电路和定时器T1的配合下,将发送缓冲器SBUF中的并行数据转为串行数据,并自动添加起始位、可编程位、停止位。这一过程结束后自动使发送中断请求标志位TI置1,用以通知CPU已将发送缓存器SBUF发中的数据输出到了TXD引脚。TankertankerDesign接收控制器的作用是在输入移位寄存器和定时器T1或T2的配合下,使来自RXD引脚的串行数据转为并行数据,并自动过滤掉起始位、可编程位、停止位。这一过程结束后自动使接收中断请求标志位RI置1,用以通知CPU接收的数据已存入接收缓冲器SBUF。TankertankerDesignSTC89C52串行通信以定时器T1或定时器T2作为波特率信号发生器,其溢出脉冲经过分频单元后送到收、发控制器中。RXD(P3.0)和TXD(P3.1)用于串行信号或时钟信号的传入或传出。TankertankerDesign锁存器QDP3.nQP3.n读锁存器内部总线写锁存器读引脚第二输出功能VCC内部上拉电阻锁存器QDP3.nQP3.n读锁存器内部总线写锁存器读引脚第二输出功能VCC内部上拉电阻3412第二输入功能V80C51单片机P3口TankertankerDesign7.2.2串行口特殊功能寄存器与STC89C52单片机串行口控制有关的特殊功能寄存器有4个,分别是串行口控制寄存器SCON、电源控制寄存器PCON、从机地址控制寄存器SADEN和SADDR。1.串口控制寄存器SCON(98H)TankertankerDesign(1)SM0/FE:当PCON寄存器的SMOD0/PCON.6为1时,该位用于帧错误检测。当检测到一个无效停止位时,通过UART接收器设置该位。FE必须由软件清“0”。当PCON寄存器的SMOD0/PCON.6为0时,SM0与SM1一起用来选择串行口的工作。SM0SM1方式功能说明000同步移位寄存器方式(用于扩展I/O口)01110位异步收发,波特率可变(由定时器控制)10211位异步收发,波特率为fosc/64或fosc/3211311位异步收发,波特率可变(由定时器控制)TankertankerDesign(2)SM2:多机通信控制位多机通信在方式2和方式3下进行。当串口以方式2或方式3接收时,如果SM2=1,则只有当接收到的第9位数据(RB8)为1时,才使RI置1,产生中断请求,并将接收到的前8位数据送入SBUF。当接收到的第9位数据(RB8)为0时,则将接收到的前8位数据丢弃。当SM2=0时,则不论第9位数据是1还是0,都将前8位数据送入SBUF中,并使RI置1,产生中断请求。在方式1时,如果SM2=1,则只有收到有效的停止位时才会激活RI。在方式0时,SM2必须为0。TankertankerDesign(3)REN:允许串行接收位。由软件置1或清0。REN=1允许串行口接收数据。REN=0禁止串行口接收数据。(4)TB8:发送的第9位数据。方式2和方式3,TB8是要发送的第9位数据,其值由软件置1或清0。在双机串行通信时,一般作为奇偶校验位使用;在多机串行通信中用来表示主机发送的是地址帧还是数据帧,TB8=1为地址帧,TB8=0为数据帧。在方式0和1中,不使用TB8。(5)RB8:接收的第9位数据。方式2和方式3,RB8存放接收到的第9位数据。在方式1,如SM2=0,RB8是接收到的停止位;在方式0,不使用RB8。TankertankerDesign(6)TI:发送中断标志位方式0,串行发送的第8位数据结束时TI由硬件置1,在其他方式中,串行口发送停止位的开始时置TI为1。TI=1,表示一帧数据发送结束。TI的状态可供软件查询,也可申请中断。CPU响应中断后,在中断服务程序中向SBUF写入要发送的下一帧数据。TI必须由软件清“0”。(7)RI:接收中断标志位方式0时,接收完第8位数据时,RI由硬件置1。在其他工作方式中,串行接收到停止位时,该位置1。RI=1,表示一帧数据接收完毕,并申请中断,要求CPU从接收SBUF取走数据。该位的状态也可供软件查询。RI必须由软件清“0”。TankertankerDesign对TI、RI有以下三点需要特别注意:(1)可通过查询TI、RI判断数据是否发送、接收结束,当然也可以采用中断方式。(2)串行口是否向CPU提出中断请求取决于TI与RI进行相“或”运算的结果,即当TI=1,或RI=1,或TI、RI同时为1时,串行口向CPU提出中断申请。因此,当CPU响应串行口中断请求后,首先需要使用指令判断是RI=1还是TI=1,然后再进入相应的发送或接收处理程序。(3)如果TI、RI同时为1,一般而言,需优先处理接收子程序。这是因为接收数据时CPU处于被动状态,虽然串口输入有双重输入缓冲,但是,如果处理不及时,仍然会造成数据重叠覆盖而丢失一帧数据,所以应当尽快处理接收的数据。而发送数据时CPU处于主动状态,完全可以稍后处理,不会发生差错。TankertankerDesign2.电源控制寄存器PCON(第四章4.6节省电工作模式)D7D6D5D4D3D2D1D0PCONSMODSMOD0-POFGF1GF0PDIDL仅SMOD、SMOD0与串口有关。SMOD:波特率选择位。SMOD0:帧错误检测有效控制位。当SMOD0=1,SCON寄存器中的SM0/FE位用于FE(帧错误检测)功能;当SMOD0=0,SCON寄存器中的SM0/FE位用于SM0功能,与SM1一起指定串行口工作方式。复位时SMOD0=0。TankertankerDesign3.从机地址控制寄存器SADEN和SADDR为了方便多机通信,STC89C52单片机设置了从机地址控制寄存器SADEN和SADDR。其中SADEN是从机地址掩膜寄存器(地址为B9H,复位值为00H),SADDR是从机地址寄存器(地址为A9H,复位值为00H)。TankertankerDesign7.3串行口的4种工作方式7.3.1方式0——8位同步移位寄存器方式当单片机工作在6T模式时,其波特率固定为fCLK/6。当单片机工作在12T模式时,其波特率固定为fCLK/12。由RXD引脚输入或输出数据。TXD引脚输出fCLK/12时钟信号(12T模式)。以8位数据为一帧,不设起始位和停止位,先发送或
本文标题:第7章STC89C52单片机串行通信
链接地址:https://www.777doc.com/doc-2111567 .html