您好,欢迎访问三七文档
本章介绍的主要内容★串行通信的基本概念★串行通信接口结构和工作原理★串行通信的控制寄存器★串行通信的应用编程★串行通信的分类:同步串行通信和异步串行通信一、异步通信:通信的双方应该有一个约定,什么时候开始发送,什么时候发送完毕;接收方收到的信息是否正确等,这就是通信协议。异步串行通信一帧数据格式:一个起始位“0”,表示字符的开始,然后是5~8位数据即该字符的代码,规定低位在前,高位在后,接下来是奇偶校验位(可省略),最后以停止位“1”表示字符的结束。优点:硬件结构简单。缺点:传输速度慢。…P1D0D1D2D3D4D5D6D7P10第n个字符(一帧)n-1n+10D0…起始位数据位(5~8位)校验位停止位二、同步通信在同步通信中,发送方在数据或字符开始处就用同步字符(常约定1~2个字节)指示一帧的开始,由时钟来实现发送端和接收端同步,接收方一旦检测到与规定的同步字符符合,下面就连续按顺序传送若干个数据,最后发校验字节。见下图:SYN字符1SYN字符2数据1数据2….数据n连续传送n个数据校验51系列单片机内有一个全双工的异步通信接口,通过对串行接口写控制字可以选择其数据格式,同时内部有波特率发四、波特率单位时间内传送的信息量。在计算机中,以每秒传送的二进制位数为单位。例如:100字符/秒,1个字符11位,波特率为:100×11=1100(波特)平均每位传送占用时间Td=1/1100=0.909msMCS-51的串行口结构51单片机有一个可编程的全双工异串行通信接口,它可作UART用,也可作同步移位寄存器,其帧格式可有8位、10位或ll位,并能设置各种波特率,给使用者带来很大的灵活性。一、串行口的内部结构发送SBUF(99H)门88串行口结构框图RXD(P3.0)TXD(P3.1)中断接收SBUF(99H)定时器T1fosc2分频器发送控制器接收控制器串寄行存控器制SCON(98H)输入移位寄存器TIRI内部总线5l单片机通过引脚RXD(P3.0)串行数据接收端)和引脚TXD(P3.l)串行数据发送端)与外界进行通信。图中有两个物理上独立的接收、发送缓冲器SBUF,它们占用同一地址99H,可同时发送、接收数据。●发送缓冲器只能写入,不能读出,CPU写SBUF,一方面修改发送寄存器,同时启动数据串行发送;●接收缓冲器只能读出、不能写入。读SBUF,就是读接收寄存器。●串行控制寄存器SCON用以存放串行口的控制和状态信息。8XX51串行口正是通过对上述专用寄存器的设置、检测与读取来管理串行通信的。●特殊功能寄存器PCON的最高位SMOD为串行口波特率的倍增控制位。●波特率发生器可以有两种选择:1.定时器T1作波特率发生器,改变计数初值就可以改变串行通信的速率,称为可变波特率。2.以内部时钟的分频器作波特率发生器,因内部时钟频率一定,称为固定波特率shiftMOVA,SBUF串行数据CPUCPUSBUFSBUFshiftMOVSBUF,A并行数据并行数据甲方(发送)乙方(接收)甲方发送时,CPU执行指令MOVSBUF,A启动了发送过程,数据并行送入SBUF,在发送时钟shift的控制下由低位到高位一位一位发送,乙方在接收时钟shift的控制下由低位到高位顺序进入移位寄存器SBUF,甲方一帧数据发送完毕,置位发送中断标志二、串行通信的传送过程用下面简图说明TIRITI,该位可作为查询标志(或引起中断),CPU可再发送下一帧数据。乙方一帧数据到齐即接收缓冲器满,置位接收中断标志RI,该位可作为查询标志(或引起接收中断),通过MOVA,SBUFCPU将这帧数据并行读入。由上述可知:1.甲、乙方的移位时钟频率应相同,即应具有相同的波特率,否则会造成数据丢失。2.发送方是先发数据再查标志,接收方是先查标志再收数据。51单片机串行口是一个可编程接口,对它的编程只用两个控制字分别写入特殊功能寄存器:串行口控制寄存器SCON(98H)电源控制寄存器PCON(97H)三、串行口的控制寄存器3.CPU通过指令和SBUF并行交换数据,并不能控制数据的串行移位,它只能查询标志位来确定数据的移位是否完成。串行口的控制寄存器串行口的控制寄存器SCON8XX51串行通信的方式选择,接受和发送控制及串行口的标志均由专用寄存器SCON控制和指示,其格式如下:SM0SM1SM2RENTB8RB8TIRI方式选择多机控制串行接收允许/禁止欲发的第九位收到的第九位发送中断有/无接收中断有/无SM0.SM1:串行口工作方式控制位。00---方式0,01---方式110---方式2,11---方式3REN:串行接收允许位。0---禁止接收,1---允许接收TB8:在方式2,3中,TB8是发送机要发送的第9位数据。RB8:在方式2,3中,RB8是接受机收到的第9位数据,该数据来自发送机的TB8。TI:发送中断标志位。发送前必须用软件清零,发送过程中TI保持零电平,发送完一帧数据后,由硬件置“1”,如果再发送,必须用软件再清零。RI:接收中断标志位。接收前,必须用软件清零,接收过程中RI保持零电平,接收完一帧数据后由片内硬件自动置“1”。如果再接收必须用软件清零。SM2:多机通信控制位,仅用于方式2和方式3。当选择方式2或方式3时,发送机设置SM2=1,以发送第九位TB8为1作为地址帧寻找从机,以TB8为0作为数据帧进行通信,从机初始化时设置SM2=1,若接收到的第九位数据RB8=0,不置位RI,即不引起接收中断,亦既不接收数据帧,继续监听,如接收到的RB8=1,置位RI,引起接收中断,中断程序中判断所接收的地址帧和本机的地址是否符合,若不符合,维持SM2=1,继续监听,若符合,则清SM2,接收对放发来的后续信息.综上所述,SM2的作用为:在方式2,3中,发送机SM2=1(程序设置).接收机SM2=1,若RB8=1,激活RI,引起接收中断.RB8=0,不激活RI,不引起接断.SM2=0,无论RB8=1还是RB8=0均激活RI引起接收中断。在方式1中,当接收时SM2=1,则只有收到有效停止位才激活RI,在方式0中,SM2应置为0。PCON的字节地址为87H,无位地址,只能字节寻址.,初始化时SMOD=0.SMODXXXXXXXPCON87H电源控制寄存器PCONPCON的格式如下图所示,串行通信只用其中的最高位SMODSMOD:波特率加倍位。在计算串行方式1、2、3的波特率时,SMOD=0—不加倍;SMOD=1—加倍串行口的工作方式根据串行通信数据格式和波特率的不同,51系列单片机的串行通信有四种工作方式,通过编程进行选择,各工作方式的特点如下:1.方式0RXD为串行数据的发送端或接收端,TXD输出频率为fosc/12的时钟脉冲。波特率固定为fosc/12(fosc为单片机晶振频率)方式0的数据格式为8位,低位在前,高位在后移位寄位器方式多用于接口的扩展,当用单片机构成系统时,往往感到并行口不够用,此时可通过外接串入并出移位寄存器扩展输出接口;通过外接并入串出移位寄存器扩展输入接口,方式0也可应用于短距离的单片机之间的通信。2.方式1为10位异步通信方式,几每帧数据由1个起始位“0”.八个数据位和1个停止位“1”共10位构成.其中起始位和停止位在发送时是自动插入的.以TXD为串行数据的发送端,T1提供位时钟,RXD为数据的接收端,由T1提供移位时钟,是波特率可变方式波特率=(2SMOD/32)×(TI的溢出率)=(2SMOD/32)×(fosc/12(256-x))根据给定的波特率,可以计算T1的计数初值X。11位异步发送/接收方式,即每帧数据由有一个起始位“0”,9个数据位和1个停止位“1”组成.发送时九个数据位,由SCON寄存器的TB8位提供,接收到的第九位数据存放在SCON寄存器的RB8位.第九位数据可作为检验位,也可用于多机通信中识别传送的是地址还是数据的特征位。波特率固定为(2SMOD/64)×fosc.3.方式24.方式3数据格式同方式2,所不同的是波特率可变,计算方式同方式1。串行口的应用编程串行口的波特率有两种方式:固定波特率可变波特率注意:使用可变波特率时,先确定TI的计数初值,并对TI进行初始化。串行通信的编程方式:查询方式:查TI或RI是否为“1”。中断方式:如果预先开了中断,当TI、RI为“1”,会自动产生中断。注意:两种方式中当发送或接受数据后都要注意清TI或RI。查询方式发送程序:(先发后查)发送一个数据→查询TI→发送下一个数据查询方式接收程序:(先查后收)查询RI→读入一个数据→查询RI→读下一个数据中断方式发送程序:发送一个数据→等待中断,在中断中再发送下一个数据。中断方式接收程序:等待中断,在中断中再接收一个数据。1查询方式查询方式发送流程图和接收流程图见下页T1初始化、启动T1工作设定串行通信方式置发送数据块首址数据块长度计数器清TI发送数据TI=1?修改地址指针和块长度计数器全部数据发送完?开始结束查询方式发送流程图YNYNT1初始化、启动T1工作设定串行通信方式,允许接收置接收缓冲区首址接收数据块长度清RIRI=1?修改地址指针和块长度计数器全部数据接收完?开始结束接收数据Y查询方式接收流程图YNYN2中断方式中断方式的初始化编程同查询方式,不同的是要开中断,即置位EA和ES,编写中断服务程序。中断方式串行通信的程序流程见下图:T1初始化、启动T1工作设定串行通信方式置发送数据块首址数据块长度计数器发送数据全部数据发送完?YN中断方式发送流程图等待中断1EA,1ES发送数据中断返回0EA,0ES中断服务程序主程序修改地址指针和块长度计数器清TIYNT1初始化、启动T1工作设定串行通信方式置接收数据块首址数据块长度计数器全部数据接收完?YN中断方式接收流程图等待中断1EA,1ES中断返回0EA,0ES中断服务程序主程序修改地址指针和块长度计数器清RI接收数据YN例1.在内部数据存贮器20H~3FH单元中共有32个数据,要求采用方式1串行发送出去,传送速率为1200波特,设fosc=12MHZ方法:T1工作于方式2作波特率发生器,取SMOD=0,T1的时间常数计算如下:波特率=1200=(1/32)×12×10/12(256-x)x=230=E6H2SMODfosc12(256-x)×326发送程序:ORG0000HMOVTMOD,#20H;T1方式2MOVTH1,#0E6HMOVTL1,#0E6H;T1SETBTR1;启动T1MOVSCON,#40H;串行口工作于方式1MOVR0,#20H;R0MOVR7,#32;R7作发送数据计数LO:MOVSBUF,@R0JNBTI,$CLRTI;一帧发完清TIINCR0DJNZR7,LOSJMP$接收程序:ORG0000HMOVTMOD,#20HMOVTH1,#0E6HMOVTL1,#0E6HSETBTR1;初始化T1,并启动T1MOVSCON,#50H;设定串行方式1MOVR0,#20HMOVR7,#32LOOP:JNBRI,$;一帧收完?CLRRI;收完清RIMOV@R0,SBUFINCR0DJNZR7,LOOPSJMP$RXD89C51TXDP1.0例2接线如图,编一个自发自收程序,检查单片机的串行口是否完好,f=12MHz,波特率=600,取SMOD=0。解:依据公式波特率=求得)256(12321xoscfCCHx204汇编语言编程MOVTMOD,#20HMOVTH1,#0CCHMOVTL1,#0CCH;设定波特率SETBTR1MOVSCON,#50HABC:CLRTIMOVP1,#0FEH;LED灭ACALLDAY;延时MOVA,#OFFHMOVSBUF,A;发送数据FFHJNBRI,$;RI=0等待CLRRIMOVA,SBUF;接收数据,A=FFHMOVP1,A;灯亮JNBTI,$;TI=0等待ACALLDAY;延时SJMPABCDAY:MOVR0,#0DAL:MOVR1,#0DJNZR1,$DJNZR0,DALRET如果
本文标题:3-5串行口.
链接地址:https://www.777doc.com/doc-2917199 .html