您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > 第七章单片机电子教程
第7章串行接口与应用7.1串行通信的基本知识7.2MCS-51单片机串行口的结构与工作方式7.3具体应用7.1串行通信的基本知识计算机与其他设备之间的数据通信可分成:并行通信和串行通信。并行通信:数据的各位同时传送,优点是速度快,缺点是占用资源比较多。串行通信:数据的各位按一定的顺序逐位分时传送,优点是只需要一对数据线。目前,串行通信得到了长足的发展7.1.1串行通信方式串行通信有三种方式:单工通信、半双工通信和全双工通信。单工通信:数据只能单方向地从一端向另一端传送。半双工通信:数据可以双向传送,但任何一个时刻只能向一个方向传送。全双工通信:数据可同时向两个方向传送。7.1.2数据同步技术在串行通信中,发送和接收数据涉及到发送和接收两种设备。因此,在数据的收发过程当中就出现了一个问题:何时发送,何时接收?为解决这个问题,在串行通信中,我们引入了两种收发数据的方式:同步通信和异步通信。一、同步通信1、概念:发送设备和接收设备使用同一个时钟信号,发送数据的同时也在接收数据(收发同步)。2、特点:(1)连续串行传送数据解释:一次通信只传送一帧数据,但是这一帧数据里面包含着若干个数据字符(几个信息连在一起的,中间不允许有空隙)。(2)每个信息的开始要加同步字符解释:接收端接收到同步字符以后,就能判断下面来的是数据了,然后就开始接收数据。如果发送端是发送单个同步字符,则称为单同步,如果发送端是发送两个同步字符,则称为双同步。在使用同步通信的时候,首先要做的是收发设备都应该先约定好发送方式,包括是单还是双,结束标志是怎么样的等等这些问题。3、字符帧构成形式这种方式难度比较高,因此很少使用。二、异步通信1、概念:发送设备和接收设备可以由各自独立的时钟信号来控制,不需要做到同步,有数据来就接收,没有数据来就闲置。2、特点:(1)数据以一个字符为单位组成字符帧进行传送。每一次只发送一个字符帧。(2)数据由低到高排列(3)字符帧由起始位、数据位、校验位和停止位四部分组成。3、字符帧构成形式4、几个概念起始位:位于字符帧开头,为低电平,只占一位,用于向接收端表示发送端开始发送一帧信息。数据位:紧跟起始位,是真正要传送的信息,从低到高排列。一般根据通信双方协商可以是5、6、7、8位。如果是5位,则数据从D0排到D4,后面三位就闲置(闲置状态认为是1),6位和7位同理。奇偶校验位(可编程第9位):用于检验接收数据的正确性。停止位:一个字符数据的结束标志,可以是1位,1.5位和2位,由通信双方约定。这里有一种情况需要大家思考:发送端口在串行发送数据的时候是以一定速度发送的,接收端口也是以一定的速度接收数据的。而当后面的数据送上来的时候如果前面的数据没有被接收掉的话就会被覆盖掉,那么在通信系统中如何来解决这个问题呢?三、波特率表征数据传输速度的参数。波特率越高,数据传送速度越快。要求收发双方波特率相同。定义:每秒钟传送的数据位数,单位是b/s(1b就是一位数据)。比如:采用8位数据的异步串行通信(加上起始位和停止位共10b),且每秒发送120个字符,这个时候波特率为:10b/字符X120字符/s=1200b/s总括:在异步通信中,CPU与外设之间必须有两项规定,即字符格式和波特率。字符格式的规定是双方能够在对同一种0和1的理解成同一意义。原则上字符合适可以由通信双方自己定义,但从通用、方便角度上来考虑,一般使用国际或者国内统一标准。7.2MCS-51单片机串行口的结构与工作方式一、串行接口的结构MCS-51单片机内部设置一个全双工的串行口,可作为同步移位寄存器,也可作为通用异步接收器和发送器(UART)使用。MCS-51单片机通过引脚RXD(P3.0)和引脚TXD(P3.1)与外界进行通信。这两个引脚分别连接着单片机内部两个物理上独立的数据缓冲器SBUF,一个用于发送数据,一个用于接收数据。公用一个地址99H。发送数据:执行写SBUF指令“MOVSBUF,A”,这样要发送的数据就按事先设置好的方式和波特率从引脚TXD串行输出。一个数据发完以后,串行口产生中断标志位,向CPU申请中断,请求发送下一个数据。接收数据:当检测RXD引脚上出现一帧数据的起始位后,便一位一位地将接下来的数据接收保存到SBUF中,然后产生中断标志位,向CPU申请中断,请求CPU接收这一数据,CPU响应中断后,执行读SBUF指令“MOVA,SBUF”,就可以将接收的数据送入指定的寄存器或存储单元中。二、相关串行口特殊功能寄存器与串行口有关的特殊功能寄存器有串行口缓冲器SBUF、串行口控制寄存器SCON和波特率控制寄存器PCON。1、串行口缓冲器SBUF对应两个物理单元,但地址统一为99H。用于存放要发送的数据和接收进来的数据。2、串行口控制器位于特殊功能寄存器的第98H单元,用于选择选择串行口的工作方式和指示串行口的工作状态。SM0SM1SM2RENTB8RB8TIRI工作方式选择多机通信控制位允许串行接收位接收数据的第9位发送数据的第9位接收中断标志发送中断标志9FH9EH9DH9CH9BH9AH99H98H结构如下:SM0、SM1:串行口工作方式选择位,功能如下该表格具体指出了每种工作方式的波特率计算方式,其中的fosc为晶振频率结构如下:SM2:多机通信选择位。(1)当工作在方式0的时候,SM2必须等于0(2)当工作在方式1的时候,当SM2=1,只有接收到有效停止位后才使得RI置位(接收中断标志)。(3)在方式2和方式3,存在以下特点:SM2=1,则当接收到第9位为1时,将前面的8位数据装入SBUF中并置位RI,向CPU申请中断;当第9位为0时,数据全部丢失。SM2=0,则接收到的第9位不管是1还是0,都产生中断标志,且接收前8位数据。利用(3)可以实现多机通信,接下去简单讲解多机通信原则:(一台主机,多台从机,从机都有各自规定的地址)多机通信协议:(1)第9位为1,则发送的数据为地址,第9位是0,则发送的数据为真正的数据(2)主机先发送地址,再等待应答信号,应答以后发送数据(3)开始,所有从机都置SM2=1。主机发送地址(第9位置1),所有从机都接收地址,并且中断。然后从机开始判断接受到的地址是否为本机地址,若是,则置SM2=0(等待接收数据),若不是,则保持SM2=1(此时,数据发送过来的时候就不能被接收),这样就防止了数据通信的冲突。REN:串行口允许接收位。“1”允许接收,“0”禁止接收。由软件来决定。TB8:发送数据的第9位。在方式2和方式3,该位连同8位数据一起发送:(1)作为地址和数据的判断为,在数据发送之间,即“MOVSBUF,A”指令之前,用”SETBTB8”或”CLRTB8”来预先设定。(2)作为奇偶校验位,在发送之前将PSW中的奇偶校验位P的内容先发送给TB8就可以了。RB8:接收数据的第9位,在方式2和方式3,将接收到的数据的第9位自动装入RB8,对应发送端的TB8.用于奇偶校验或地址数据判断。TI:串行口发送中断标志。方式0,发送完第8位数据,由硬件自动置位;在方式1、2和3,于发送停止位之初,由硬件自动置位,TI=1,申请中断。该位必须由软件清0。RI:串行口接收中断标志。方式0,接收完第8位数据,由硬件自动置位;在方式1、2和3,于接收到停止位的中间由硬件自动置位,申请中断。由软件清0。3、波特率控制寄存器PCONSMOD:波特率选择位。当SMOD=1,波特率提高一倍。三、串行口工作方式1、工作方式0(移位寄存器输入输出方式)输出:RXD端输出数据,TXD端输出移位脉冲,发送数据开始于向SBUF写入数据的时刻,8位数据低位在前,逐个发送完后,置位TI.输入:RXD为数据输入端,TXD为移位脉冲输出端口。接收数据的时候满足:REN=1和RI=0.数据接收完毕后,置位RI.注意:方式0工作时候需要外部有串入并出(74LS164)或者并入串出(74LS165)的芯片配合使用。波特率计算:方式0波特率计算公式固定为fosc/122、工作方式1工作方式1为10位异步串行通信工作方式。包括1位起始位,8个数据位(低位在先)和一个停止位。发送数据:数据从TXD发出,执行“MOVSBUF,A”时便启动发送过程,先发出一个起始位0,该位通知接收端开始接收,也使发送和接收过程同步,接下来发送8位数据(从低位开始发送),最后发送的是停止位1。接收数据:数据从RXD接收,先软件执行SETBREN,使得REN位置1,允许接收数据,然后开始检测RXD上的信号,出现由1到0的跳变,先接收起始位,然后依次采样RXD,并将采样得到的数据移入移位寄存器,如果满足RI=0,且SM2=0或SM2=1且接收到停止位,则将数据装入SBUF并且置位RI。如果条件不满足,则数据丢失。工作方式1的波特率由定时器T1的溢出率决定,即的溢出率波特率方式13221TSMOD定时器的溢出率指的是计满溢出的频率,其值为定时时间值的倒数。表达式:计数个数机器周期的溢出率11T这里要注意,一般情况下面,不需要计算波特率,而是给定波特率让你去设置定时器T1的初值。例题:单片机的系统时钟频率为fosc=11.0592MHz,需设定串行口的波特率为2400bit/s,设定SMOD=0,若采用T1的工作方式2,根据串行口方式1的波特率公式,T1溢出率为:的溢出率波特率方式13221TSMOD计数个数机器周期次数波特率的溢出率1/76800321sT1211溢出率机器周期计数个数THFn424412228计数个数计数初值3、工作方式2(11位异步串行通信方式)包括一位启动位、8个数据位(低位在前)、一位可编程位(TB8或RB8)、一个停止位。D0D1D2D3D4D5D6D70/1D0D110/1……100第n+1字符帧第n字符帧8位数据起始位停止位奇偶校验发送过程:首先软件设定TB8,然后执行写SBUF指令,就会发送数据,发送的第9位数据为TB8中的内容。发送完毕以后将TI置位。接收过程:检测RXD端口电平由1到0跳变,就开始接收数据和可编程位,检测到停止位停止接收,将8位数据装入SBUF,并将可编程位装入RB8,RI置位。满足的条件为:RI=0SM2=0或者如果SM2=1且接收到的可编程位为1oscSMODf6422波特率方式波特率计算公式例题1:设计一个串行方式2发送子程序(SMOD=1),将片内RAM50H~5FH中的数据串行发送,第9数据位作为奇偶校验位。接到接收方核对正确的回复信号(用FFH表示)后,再发送下一字节数据,否则再重发一遍。分析:这个题目里面涉及到接收和发送根据题目首先要设置SCON:选择工作方式,接收允许与禁止设置,SM2的设置,还要决定TB8的任务(是作为奇偶校验还是作为地址数据标志)然后要设置SMOD,波特率加倍还是不加倍。解:程序如下TRS2:MOVSCON,#80H;置串行方式2,禁止接收MOVPCON,#80H;置SMOD=1MOVR0,#50H;置发送数据区首址TRLP:MOVA,@R0;读数据MOVC,PSW.0;奇偶标志送TB8MOVTB8,C;MOVSBUF,A;启动发送JNBTI,$;等待一帧数据发送完毕CLRTI;清发送中断标志SETBREN;允许接收CLRRI;清接收中断标志JNBRI,$;等待接收回复信号MOVA,SBUF;读回复信号CPLA;回复信号取反JNZTRLP;非全0(回复信号≠FFH,错误),转重发INCR0;全0(回复信号=FFH,正确),指向下一数据存储单元CJNER0,#60H,TRLP;判16个数据发送完否?未完继续RET;例2:编制一个串行方式2接收子程序,接收上例发送的16个数据,存首址为40H的内RAM中,并核对奇偶校验位,接收核对正确,发出回复信号FFH;发现错误,发出回复信号00H,并等待重新接收。RXD2:MOVSCON,#80H;置串行方式2,禁止接收MOVPCON,#80H;置SMOD=1MOVR0,#40H;置接收数据区首址SETBREN;启动接收RWAP:JNBRI,$;
本文标题:第七章单片机电子教程
链接地址:https://www.777doc.com/doc-2208967 .html