《串口分析学习.pptx》由会员分享,可在线阅读,更多相关《串口分析学习.pptx(64页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、异步:接收方何时采样?通讯双方实现约定波特率(发送方每秒发多少位,即接收方隔多长时间采样1次),为了避免累计误差,每次通讯传输1个字节。发送方控制数据线,在空闲时保持高电平。开始一次通讯时发送方将数据线拉低,低电平保持时间1位,用该下降沿使双方保持同步。在起始位后传输8位数据,最后传输1位的停止位,停止位为高电平,使数据线回归空闲时的高电平。什么是全双工异步串行通讯第1页/共64页第一页,编辑于星期日:八点 五十八分。为了增加传输距离,提高抗干扰能提,加快传输速率,引入电平转换。常用电平转换RS232,RS422,RS485(电平转换无智能)什么是全双工异步串行通讯第2页/共64页第二页,编辑
2、于星期日:八点 五十八分。串口0 是一个具有帧错误检测、地址识别硬件并支持多处理器通信的增强型串口。串口0支持半双工同步通讯和全双工异步通讯。串口0有4种工作方式:方式0、1、2、3方式0是半双工同步方式,我们不介绍。方式1、2、3是全双工异步方式,我们介绍。串口0第3页/共64页第三页,编辑于星期日:八点 五十八分。C8051F120要通过串口0发送一个字节时,需将待发送的数据写入“发送SBUF0寄存器”(是一个SFR),串口0硬件自动按下图时序将“发送SBUF0寄存器”中的数据通过串口发出,发送完成后硬件将TI0(是一个中断源,表示串口发送完一个字节)置1。发送数据第4页/共64页第四页,
3、编辑于星期日:八点 五十八分。当其他设备按串口时序发来一个字节时,数据是1个位1个位传来的(如下图),每来1个位,该位进入移位寄存器(用来缓存不完整的数据)最高位,当所有的8位到齐后C8051F120串口0的硬件检查该数据,如无误则将该字节写入“接收SBUF0寄存器”(是一个SFR),然后将RI0置1(是一个中断源,表示串口接收到一个字节),等待C8051F120的CPU读走该字节。接收数据第5页/共64页第五页,编辑于星期日:八点 五十八分。接收数据由于具有二级接收缓存(移位寄存器&接收SBUF0),这就允许UART0 在软件尚未从“接收SBUF0”读取第k个字节数据的情况下,开始接收第(k
4、+1)个字节数据。由于只有二级缓存,如果第k个字节没从“接收SBUF0”读走,第k+1个字节的数据已经接收完了,此时第k+1个字节的数据从移位寄存器写入“接收SBUF0”(丢了1个字节数据)该情况发生后,一个“接收覆盖位”(SFR)被置1,用于指示新的接收数据已被锁存到接收缓冲器而前一个接收数据尚未被读取。解决办法:收到RI0,尽快去读“接收SBUF0”第6页/共64页第六页,编辑于星期日:八点 五十八分。“发送SBUF0寄存器”、“接收SBUF0寄存器”在物理上是2个独立的特殊功能寄存器。其中:“发送SBUF0寄存器”C8051F120的CPU只能写不能读;“接收SBUF0寄存器”C8051
5、F120的CPU只能读不能写。因此“发送SBUF0寄存器”、“接收SBUF0寄存器”的字节地址相同,合称SBUF0。读SBUF0时访问“接收SBUF0寄存器”,写SBUF0时访问“接收SBUF0寄存器”第7页/共64页第七页,编辑于星期日:八点 五十八分。第8页/共64页第八页,编辑于星期日:八点 五十八分。对UART0 的控制是通过串行控制寄存器SCON0(SFR)实现的。UART0 有两个中断源:TI0(SCON0.1),1个字节发送完成后置1RI0(SCON0.0),接收完1个字节后置1。中断方式:当CPU 转向中断服务程序时硬件不清除TI0、RI0,进入串口中断服务子程序后,先分析时什
6、么原因计入串口中断,然后用软件清除这些标志位,最后再作出不同的处理。UART0 也可以工作在查询方式,此时占用CPU。第9页/共64页第九页,编辑于星期日:八点 五十八分。比较复杂,不看图识字了第10页/共64页第十页,编辑于星期日:八点 五十八分。UART0 工作方式UART0 提供4种工作方式,通过设置SCON0 选择。这4种方式提供不同的波特率和通信协议见下表。第11页/共64页第十一页,编辑于星期日:八点 五十八分。方式3和方式1的区别9位数据方式2、3的唯一区别:波特率不同,因此只学方式1即可第12页/共64页第十二页,编辑于星期日:八点 五十八分。SCON0:UART0 控制寄存器
7、第13页/共64页第十三页,编辑于星期日:八点 五十八分。SCON0:UART0 控制寄存器位5:SM20:多处理器通信使能位位4:REN0:接收允许 0:UART0 接收禁止 1:UART0 接收允许位3:TB80:第九发送位位2:RB80:第九接收位位1:TI0:发送中断标志位0:RI0:接收中断标志第14页/共64页第十四页,编辑于星期日:八点 五十八分。方式1:8 位UART,可变波特率方式1是全双工异步方式,每传输1个字节共收发10 位数据:一个起始位、8 个数据位(LSB在先)和一个停止位。数据从TX0 引脚发送,在RX0 引脚接收。在接收时,8 个数据位存入SBUF0,停止位进入
8、RB80(见上页)。第15页/共64页第十五页,编辑于星期日:八点 五十八分。方式1发送数据如何启动方式1发送数据?向SBUF0写入一个字节,硬件就将该字节按时序发出。在发送结束时,TI0置1第16页/共64页第十六页,编辑于星期日:八点 五十八分。方式1接收数据REN0=0时,串口0不接收任何数据。在REN0=1后任何时间串口0都可以开始数据接收。收到的数据先进入到移位寄存器中缓存,收到停止位后如果满足下述2个条件则数据字节将被装入接收寄存器SBUF0,否则丢弃该数据(数据不写入SBUF0,如果再有新数据来到,则被覆盖)。RI0 为逻辑0;如果SM20=1 则停止位必须为1 (如果SM20=
9、0,停止位随意)。如果这3个条件都满足(REN,RI,SM2),则8 位数据存入SBUF0,停止位存入RB80,RI0 标志置1。如果这3个条件不都满足,则不装入SBU0F 和RB80,RI0 不置1。第17页/共64页第十七页,编辑于星期日:八点 五十八分。SM20=1 时,串口硬件检查跟在8位数据后的那一位数据,这位如果是1且满足REN0=1,RI0=1则接收;这位如果是0则一定会丢弃该字节。SM20=0时,串口硬件不检查跟在8位数据后的那一位数据,只要满足满足REN0=1,RI0=1则接收SM20处理逻辑第18页/共64页第十八页,编辑于星期日:八点 五十八分。方式1 的波特率方式1的波
10、特率可以由定时器1,2,3,4产生。发送波特率和接收波特率可以独立设置。寄存器SSTA0(SFR)选择波特率由哪一个定时器产生。实际上定时器溢出事件=输入脉冲的若干分频。波特率=定时器溢出事件的若干分频。产生波特率时:定时器1 工作在8 位自动重装载方式。定时器2、3、4 工作在自动重装载方式。第19页/共64页第十九页,编辑于星期日:八点 五十八分。SSTA0:UART0 状态和时钟选择寄存器位4:SMOD0见下页第20页/共64页第二十页,编辑于星期日:八点 五十八分。方式1 的波特率使用定时器1 自动重载方式方式1 波特率=(2SMOD0/32)定时器1 溢出率当SMOD0=0 时:方式
11、1 波特率=1/32 定时器1 溢出率当SMOD0=1 时:方式1 波特率=1/16 定时器1 溢出率定时器1 溢出率=定时器1每秒溢出次数定时器1 溢出率由定时器1 的输入脉冲频率f和重载值(TH1)确定。定时器的溢出率用下式计算。定时器1 溢出率=f/(256-TH1)第21页/共64页第二十一页,编辑于星期日:八点 五十八分。方式1 的波特率使用定时器2,3,4 自动重载方式方式1 波特率=(1/16)定时器2、3 或4 溢出率假设定时器2、3 或4 输入脉冲频率位f,则定时器2、3 或4 溢出率=f/(65536-RCAPn)第22页/共64页第二十二页,编辑于星期日:八点 五十八分。
12、方式2:9 位UART,固定波特率每个数据字节共使用11 位:一个起始位、8 个数据位(LSB 在先)、一个可编程的第九位和一个停止位。在发送时,第9数据位就是TB80(SCON0.3)。第9位用来干什么?它可以被赋值为PSW 中的奇偶标志P,或用于多处理器通信(后面讲)。在接收时,第9数据位进入RB80(SCON0.2),停止位被忽略。第23页/共64页第二十三页,编辑于星期日:八点 五十八分。方式2发送先写TB80,在写SBUF0,其他同方式1。第24页/共64页第二十四页,编辑于星期日:八点 五十八分。方式2接收接收过程除了以下一点外,其它同方式1。方式2、3中,紧跟着D7后面的不是停止
13、位,是TB80。当SM20=0时,满足REN0=1&RI0=0时接收数据当SM20=1时,收到的D8(对方发来的TB8)是1,且REN0=1&RI0=0时接收数据,数据仅SBUF0,D8进RB8。第25页/共64页第二十五页,编辑于星期日:八点 五十八分。方式2波特率第26页/共64页第二十六页,编辑于星期日:八点 五十八分。方式2波特率同方式1,其它同方式2。第27页/共64页第二十七页,编辑于星期日:八点 五十八分。SSTA0:UART0 状态和时钟选择寄存器串口0 是一个具有帧错误检测、地址识别硬件并支持多处理器通信的增强型串口。这3位只作标志位使用,不用于产生中断。第28页/共64页第
14、二十八页,编辑于星期日:八点 五十八分。串口多机通信串口通讯采用点对点拓扑结构,如图。通讯时只有2个设备参与,没有第三方存在。如果能让多个设备(大于2个)用串口通讯,就是所谓的串口多机通讯。多机通讯仅适用与串口方式2、方式3!第29页/共64页第二十九页,编辑于星期日:八点 五十八分。串口多机通信多机通讯时,只有一个主机,可以有多个从机。主机的TX和所有从机的RX连接;主机的RX和从机的所有TX连接,因此主机和任一从机可以通讯,从机只能和主机通讯。第30页/共64页第三十页,编辑于星期日:八点 五十八分。串口多机通信主机发送数据时,所有从机可以接收到,从机之间互不影响。第31页/共64页第三十
15、一页,编辑于星期日:八点 五十八分。串口多机通信主机的RX和所有从机的TX连接,该线电平取决于从机的TX。为了防止冲突,此时所有从机的TX被配置位开漏输出(开漏时,输出0为低电平,输出1为高阻),外接上拉电阻。第32页/共64页第三十二页,编辑于星期日:八点 五十八分。串口多机通信当所有从机输出0时,该线位低电平。当有的从机输出0,有的从机输出1时,由于输出1的从机为高阻状态,相当于和该线断开,不影响该线。此时该线为低电平。当所有从机输出0时,该线为低电平。为什么要开漏,外接上拉?第33页/共64页第三十三页,编辑于星期日:八点 五十八分。串口多机通信由此可以看出,多机通讯主机接收数据时,从机
16、之间相互影响。必须保证在任意时刻,最多有1个从机控制主机的RX线。这就意味着,在任一时刻,主机最多只能和1个从机通讯。第34页/共64页第三十四页,编辑于星期日:八点 五十八分。串口多机通信多机通讯过程如下:A.系统启动后,所有从机处于不激活状态:不发送数据(软件控制),仅能接收数据。B.主机想和某个主机通讯,必须先激活它。此后该从机和主机通讯。当主机和该从机通讯完成后(例如激活后从机发送100个字节),从机自动转入不激活状态(从机软件控制)C.转入B第35页/共64页第三十五页,编辑于星期日:八点 五十八分。地址识别硬件串口0 是一个具有帧错误检测、地址识别硬件并支持多处理器通信的增强型串口
17、。地址识别硬件完成如下功能:设置本机串口的地址;对收到的数据进行识别,和本机地址匹配才接收数据。与地址识别硬件相关的SFR有两个:UART0从地址设置寄存器SADDR0UART0从地址掩码寄存器SADEN0第36页/共64页第三十六页,编辑于星期日:八点 五十八分。地址识别硬件第37页/共64页第三十七页,编辑于星期日:八点 五十八分。第38页/共64页第三十八页,编辑于星期日:八点 五十八分。A.如果SM2=0,则必须保证 REN=1&RI=0才接收数据,否则丢弃该数据;B.如果SM2=1,则必须保证 REN=1&RI=0&接收到的D8=1&接收到的D0-D7必须和自己的地址匹配,才接收数据
18、,否则丢弃数据;串口接收数据的条件第39页/共64页第三十九页,编辑于星期日:八点 五十八分。地址设置举例地址由SADDR0和SADEN0设置。SADEN0中某位为1,则在SADDR0中对应位作为串口地址;SADEN0中某位为0,则在SADDR0中对应位无关。如何理解x主机1有16个不同的地址(多个地址分配给1个从机)第40页/共64页第四十页,编辑于星期日:八点 五十八分。也可以将一个地址分配给多个主机,这样就允许同时向多个从机进行“广播”式发送。广播地址是寄存器SADDR0和SADEN0 的逻辑或,结果为0的那些位被视为“无关”位。广播寻址第41页/共64页第四十一页,编辑于星期日:八点
19、五十八分。从机1接收时,如果收到的D0-D7=xxxx0101 或xx111111都认为地址匹配成功。广播寻址第42页/共64页第四十二页,编辑于星期日:八点 五十八分。广播寻址注意观察:或结果为1时广播地址位1,或结果位0时广播地址位x,既然位x,那x=1也是广播地址。所以无论个从机如何设置,0 xFF必时所有从机的广播地址。第43页/共64页第四十三页,编辑于星期日:八点 五十八分。多机通讯流程A.所有从机初始化为SM2=1,REN=1。B.当主机想要向一个或多个从机发送数据数据时,它先发送一个用于选择目标从机的地址字节,且TB8=1。所有从机能满足REN=1,RI=0,收到的第9个位为1
20、,只有本机地址=D0-D7的才满足条件,才会接收这个字节。C.收到这个字节后,该从机将SM2改为0。D.主机和该从机通讯,收发数据,TB8=0。其他从机不满足条件,不会接收数据。E.当主机和该从机通讯结束后,该从机将SM2改为1F.回到B第44页/共64页第四十四页,编辑于星期日:八点 五十八分。表12.2.产生标准波特率的振荡器频率第45页/共64页第四十五页,编辑于星期日:八点 五十八分。*假定SMOD=1 且TIM=1。*括号里的数是实际波特率。第46页/共64页第四十六页,编辑于星期日:八点 五十八分。12.4 UART1串口1和串口0类似,有空可自学。第47页/共64页第四十七页,编
21、辑于星期日:八点 五十八分。在C8051F120的片内数据存储器20H3FH单元中共有32个字节的数据,要求使用串口0方式1发送出去,传输的波特率为9600,SYSCLK=11.0592MHz。分别用查询和中断方式实现发送和接收程序。例1:第48页/共64页第四十八页,编辑于星期日:八点 五十八分。(2SMOD)/32*定时器T1的溢出率=9600定时器T1的溢出率=9600*32=307200定时器T1的溢出时间=1/307200(1/(11.0592M/12)*(256-x)=1/307200X=253T1工作在方式2,作为波特率发生器,T1M=0(主频/12),SMOD=0.第49页/共
22、64页第四十九页,编辑于星期日:八点 五十八分。查询方式发送程序:注意:没写端口初始化,时钟初始化TMOD第50页/共64页第五十页,编辑于星期日:八点 五十八分。TCONCKCONT1M=0,使用预分频时钟(见前框图)SCA1,SCA0多少预分频第51页/共64页第五十一页,编辑于星期日:八点 五十八分。SCON0SSTA0第52页/共64页第五十二页,编辑于星期日:八点 五十八分。查询方式接收程序:中断方式发送方的程序:中断方式接收方的程序:第53页/共64页第五十三页,编辑于星期日:八点 五十八分。编写一个串口0方式1发送ASC码的程序,要求该字节最高位为其余7位的奇偶校验。已知主频:1
23、1.0592M,要求波特率9600,用T2作波特率发生器,T2使用主频的12分频作为输入时钟。(1/16)T2溢出率=9600T2溢出率=153600(65536-x)*(1/11.0592M)=1/153600 x=65464=ffB8h程序如下:例2:第54页/共64页第五十四页,编辑于星期日:八点 五十八分。方式1 波特率=(1/16)定时器2、3 或4 溢出率位3:EXENn:定时器2、3 和4 外部使能第55页/共64页第五十五页,编辑于星期日:八点 五十八分。00:SYSCLK/1201:SYSCLK10:外部时钟/811:SYSCLK/2第56页/共64页第五十六页,编辑于星期日
24、:八点 五十八分。PSW:程序状态字第57页/共64页第五十七页,编辑于星期日:八点 五十八分。A机和B机进行点对点串行通讯,双方使用如下协议:A机开始发送时,先发送AA联络信号,B机收到后回答一个BB,表示同意接收。A机受到BB后,开始发送数据,每发完一个字节后便求一次累加校验和。假定数据块长度为16字节,数据缓冲区首地址为BUF,数据发送完后,A马上向B发送校验和。B机接收数据并将其存入到以BUF为首地址的数据缓冲区中,每收一个字节也计算一次校验和,当收齐一个数据块后,再接受从A发过来的校验和,并将其与自己计算的校验和相比较。若二者相等,则说明接收正确,B回答00h;若二者不等,则说明接收
25、不正确,B机回答ffh,请求重发。A机如果收到B应答00,则结束发送,若受到的应答为非0,则将数据重发一次。例3:第58页/共64页第五十八页,编辑于星期日:八点 五十八分。双方约定波特率=2400,两机主频为11.0592M,用T1做波特率发生器,T1M=0(不12分频),SMOD=0(2SMOD0)/32)T1溢出率=1200定时器初值=0 x70因为通讯双方基本等同,只是人为的规定一个为发送方,一个为接收方。可以编制含有初始化函数、发送函数、接收函数的程序,在主程序中根据程序的发送方和接收方,设置选择变量TR,根据TR的值选择要调用的函数。这样点对点通讯双方都运行此程序,只需在程序运行之
26、前,进行人工设置选择变量(TR=0发送,TR=1接收),然后分别编译,在两台机器上分别装入并运行即可。第59页/共64页第五十九页,编辑于星期日:八点 五十八分。要求:定时器3溢出启动AD0转换(T3不中断),AD0转换完成进入中断,测量AIN00到AIN07的电压和温度传感器,转换结果经过计算所得电压从UART0传输。假设在XTAL1和XTAL2之间接22.1184MHz晶体,要求系统主频为99.5328MHz系统时钟频率存储在全局常量SYSCLK中,目标UART波特率存储在全局常量BAUDRATE中,ADC0采样频率存储在全局常量SAMPLERATE0中,电压参考值存储在VREF0中。例4:ADC0&串口的应用例程第60页/共64页第六十页,编辑于星期日:八点 五十八分。程序代码第61页/共64页第六十一页,编辑于星期日:八点 五十八分。第1010章 串口0 内容结束内容结束第62页/共64页第六十二页,编辑于星期日:八点 五十八分。谢 谢!第63页/共64页第六十三页,编辑于星期日:八点 五十八分。感谢您的观看!第64页/共64页第六十四页,编辑于星期日:八点 五十八分。