您好,欢迎访问三七文档
一、串行与并行通信并行通信——数据各位同时传送串行通信——数据各位一位一位顺序传送第七章89C51串行口及串行通信技术7.1串行通信基本知识二、串行通信的传输方式单工:单方向半双工:发送接收分时进行全双工:发送接收同时进行三、异步和同步通信同步通信特点:发送和接收时钟始终保持严格同步。由发送一方用同步字符指示每一同步数据流的开始。发送方不得间断发送数据,否则插入同步字符。起始位数据位奇偶校验位终止位异步通信特点:数据是一帧一帧的传送。规定了字符数据的传送格式。用“起始位”“终止位”指示每一个传输数据的开始和结束。每个数据都以相同的帧格式传输。110101100001…P同步字符数据第1位同步通信数据格式异步通信数据格式四、通信数据的差错检测(1)奇偶校验在数据位后附加一个奇偶校验位,该位可为“0”或“1”,以保证整个字符(包括校验位)中“1”的个数为偶数(偶校验)或为奇数(奇校验)。接收方按约定检查数据是否正确。(2)校验和发送方对数据块简单求和,产生一个单字节校验字符(校验和)附加到数据块的结尾。接收方对收到的数据求和后与收到的校验和进行比较,不同则有误。(3)返回检验收到数据全部返回。五、波特率数据传送速率,用每秒传送位数表示。例:电传机最快传送速率为10字符/秒,每个字符11位,则波特率为11位/字符×10字符/秒=110位/秒六、串行通信的过程及通信协议串←→并转换与设备同步两个通信设备在串行线路上成功地实现通信必须解决两个问题:一是串←→并转换,即如何把要发送的并行数据串行化,把接收的串行数据并行化;二是设备同步,即同步发送设备与接收设备的工作节拍,以确保发送数据在接收端被正确读出。发送时的并-串转换接收时的串-并转换进行串行通信的两台设备必须同步工作才能有效地检测通信线路上的信号变化,从而采样传送数据脉冲。设备同步对通信双方有两个共同要求:一是通信双方必须采用统一的编码方法;二是通信双方必须能产生相同的传送速率。串行通信协议通信协议是对数据传送方式的规定,包括数据格式定义和数据位定义等。起始位数据位奇偶校验位停止位波特率设置挂钩(握手)信号约定串行通信接口电路功能:CPU并行输出CPU并行输入串行发送串行接收UniversalAsychronousReceiver/Transmitter通用异步接收器/发送器UARTUniversalSynchronousReceiver/Transmitter通用同步接收器/发送器USRT通用同步/异步·接收器/发送器USART7.2串行口及应用典型串行接口芯片:INS82508251MCS-51的串行通信口特点:片内一个全双工串行口四种方式编程选择波特率由软件控制、片内定时器产生接收/发送均可工作在查询或中断方式一、89C51串行口1.结构89C51通过引脚RXD(P3.0,串行数据接收端)和引脚TXD(P3.1,串行数据发送端)与外界进行通信。串行口内部结构示意简图2.串行口控制字及特殊功能寄存器(1)SBUF串行数据缓冲器发送缓冲器接收缓冲器同名同地址99H串行发送与接收的速率与移位时钟同步。89C51用定时器T1作为串行通信的波特率发生器,T1溢出率经2分频(或不分频)后又经16分频作为串行发送或接收的移位脉冲。移位脉冲的速率即是波特率。CPU发送数据SUBFTXD(P3.1)串行输出CPU接收数据SUBFRXD(P3.0)接收数据(2)PCON-电源控制寄存器(87H)SMODD7D6D5D4D3D2D1D0PCON波特率选择其它定义位字节地址87HSMOD=1,串口方式1,2或3,波特率提高一倍。可用MOVPCON,#80H;或MOV87H,#80H;使SMOD置1用于波特率选择(3)串口控制寄存器SCON(98H)位地址9F9E9D9C9B9A9998SM0SM1SM2RENTB8RB8TIRI位D7D6D5D4D3D2D1D0SCON字节地址98H串行口操作方式选择位00方式001方式110方式211方式3允许方式2、3的多机通信使能位允许串行接收位1允许接收;0禁止接收方式2、3中要发送的第9位数据,可编程方式2、3中接收到的第9位数据。发送中断标志接收中断标志3.串行接口工作方式串口工作方式由SM0,SM1决定,见下表:串行口方式选择SM0SM100011011方式0123功能说明移位寄存器方式8位UART9位UART9位UART波特率fosc/12可变fosc/64或fosc/32可变方式1、3的波特率:波特率=(2SMOD/32)×T1溢出率=322mods)2(128Nfosc(1)方式0-同步移位寄存器方式RxD(P3.0)串行发送或接收数据,TxD(P3.1)输出同步移位脉冲,数据传送以8位为一帧,最低有效位LSB居先,波特率为oscf12方式0接收电路及时序说明:方式0发送或接收完8位数据后由硬件置位发送中断标志TI或接收中断标志RI。CPU响应中断请求转入中断服务程序时并不清TI或RI。中断标志TI或RI要用程序来清0。具体做法:CLRTICLRRI或ANLSCON,#0FEHANLSCON,#0FDH来实现。以方式0工作时SM2位(多机通信控制位)必须为0.(2)方式1-8位异步通信方式TxD(P3.1)发送数据,RxD(P3.0)接收数据,一帧信息10位D0D1D2D3D4D5D6D7起始位停止位波特率smod2(1)32定时器溢出率方式1发送和接收时序(3)方式2-9位异步通信接口D0D1D2D3D4D5D6D7D8起始位停止位TxD(P3.1)发送数据,RxD(P3.0)接收数据,一帧信息11位波特率smodosc2f64(4)方式3-9位异步通信接口TxD(P3.1)发送数据,RxD(P3.0)接收数据,一帧信息11位D0D1D2D3D4D5D6D7D8起始位停止位波特率smod2(1)32定时器溢出率方式2、方式3发送和接收时序4.串行口波特率设置方式0:波特率=为时钟频率,由硬件决定方式2:波特率=SMOD为特殊功能寄存器PCON最高位,由软件决定.T1溢出率:T1溢出次数/每秒方式1,3:波特率=T1溢出一次所需时间(28-N)×12/foscT1溢出率=1/溢出一次所需时间=波特率=322mods)2(128Nfosc初始化步骤MOVTMOD,#20HMOVTH1,#XXH;定时器1初始化(如果波特率和定MOVTL1,#XXH;时器1有关)SETBTR1MOVPCON,#80H;串行口初始化,根据工作方式和波MOVSCON,#50H;特率等决定SETBEA;中断开放SETBES二、89C51串行口应用1.串行口方式0的应用例1:用89C51串行口外接164串入——并出移位寄存器扩展8位并行口;8位并行口的每位都接一个发光二极管,要求发光二极管从左到右以一定延迟轮流显示,并不断循环。设发光二极管为共阴极接法。解:设数据串行发送采用中断方式,显示的延迟通过调用延迟程序DELAY来实现。串入并出电路ORG0023H;串行口中断入口AJMPSBR;转入串行口中断服务程序ORG2000H;主程序起始地址MOVSCON,#00H;串行口方式0初始化MOVA,#80H;最左一位发光二极管先亮CLRP1.0;关闭并行输出MOVSBUF,A;开始串行输出LOOP:SJMP$;等待中断SBR:SETBP1.0;启动并行输出ACALLDELAY;显示延迟一段时间CLRTI;清发送中断标志RRA;准备右边一位显示CLRP1.0;关闭并行输出MOVSBUF,A;再一次串行输出RETI;中断返回例2:用89C51串行口外加移位寄存器165或166扩展8位输入口,输入数据由8个开关提供,另有一个开关K提供联络信号。当K=0时,表示要求输入数据,输入的8位为开关量,并入串出电路对RI采用查询方式来编写程序,当然,先要查询开关K是否闭合。程序清单:START:MOVSCON,#10H;串行口方式0初始化JBP1.1,$;开关K未闭合,等待SETBP1.0;P/S=1,并行置入数据CLRP1.0;PS=0,开始串行移位JNBRI,$;查询RICLRRI;查询结束,清RIMOVA,SBUF;读数据到累加器ACALLLOGSIM;进行逻辑模拟SJMPSTART;准备下一次模拟2.串行口方式1的应用例3:在8051片内RAM30~4FH单元中有32个字节的数据,若采用方式1进行串行通信,波特率为1200bit/s,fosc=6MHz(SMOD=0),用查询和中断两种方式编写发送/接收程序对。解:T1为方式2由:波特率=322mods)2(128Nfosc)256(12106322120060NHFN30位地址9F9E9D9C9B9A9998SM0SM1SM2RENTB8RB8TIRISCON允许接收01010000=50H禁止接收01000000=40H查询方式发送:ORG0000HAJMPMAINORG0030HMAIN:MOVTMOD,#20HMOVTL1,#0F3HMOVTH1,#0F3HSETBTR1MOVSCON,#40HHERE:JNBTI,HEREMOVPCON,#00HCLRTIMOVR0,#30HINCR0MOVR7,#20HDJNZR7,LOOPLOOP:MOVA,@R0SJMP$MOVSBUF,AEND查询方式接收:ORG0000HAJMPMAINORG0030HMAIN:MOVTMOD,#20HMOVTL1,#0F3HMOVTH1,#0F3HSETBTR1MOVSCON,#50HMOVA,SBUFMOVPCON,#00HMOV@R0,AMOVR0,#30HINCR0MOVR7,#20HDJNZR7,HEREHERE:JNBRI,HERESJMP$CLRRIEND中断方式ORG0000HMOVA,@R0AJMPMAINMOVSBUF,AORG0023HCLRF0AJMPSERWAIT:JBF0,HEREORG0030HAJMPWAITMAIN:MOVSP,#60HHERE:AJMPHEREMOVTMOD,#20HSER:CLRTIMOVTH1,#0F3HINCR0MOVTL1,#0F3HMOVA,@R0SETBTR1MOVSBUF,AMOVSCON,#40HDJNZR7,HEMOVR0,#30HSETBF0MOVR7,#31;20HCLRESSETBEAHE:RETISETBESEND发送:中断方式ORG0000HAJMPMAINORG0023HCLRF0AJMPSERWAIT:JBF0,HEREORG0030HAJMPWAITMAIN:MOVSP,#60HHERE:AJMPHEREMOVTMOD,#20HSER:CLRRIMOVTH1,#0F3HMOVA,SBUFMOVTL1,#0F3HMOV@R0,ASETBTR1INCR0MOVSCON,#50HDJNZR7,HEMOVR0,#30HSETBF0MOVR7,#20HCLRESSETBEAHE:RETISETBESEND接收:例4:设计一个发送程序,将50H~5FH单元中的数据从串行口输出(方式2),TB8做奇偶校验位。解:波特率=2SMOD×fosc/64=21×fosc/64=fosc/32位地址9F9E9D9C9B9A9998SM0SM1SM2RENTB8RB8TIRISCONSCON=10000000=80HPCON=10000000=80H3.串行口方式2的应用查询方式发送:ORG0000HAJMPMAINORG0030HMAIN:MOVSCON,#80HWAIT:JBCTI,CONTMOVPCON,#80HSJMPWAITMOVR0,#50HCONT:INCR0MOVR7,#10HDJNZR7,LOOPLOOP:MOVA,@R0SJMP$MOVC,PENDMOVTB8,CMOVSBUF,A4.串行口方式3的应用例5:编制一个接收程序,将接收的16B数据送入片内RAM的5OH—5FH单元
本文标题:串行通信7章改
链接地址:https://www.777doc.com/doc-313002 .html