




免费预览已结束,剩余15页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实例:异步接收模式下的单向通信协议设计第10章 USART串行通信通用同步/异步收发器(Universal Synchronous Asynchronous Receiver Transmitter),简称USART,是一种工业标准的串行通信接口。在单片机中USART经常被用来与计算机(采用RS232硬件平台)或远程单片机通信(采用RS485硬件平台)。由于实际工作中异步串行通信方式的最多,所以本章主要讲解采用USART进行异步串行通信的原理及使用方法。本章讲解PIC16F877单片机的内置USART的用途特点、系统结构、硬件连接方法和软件设计,并通过多个例子讲解了每种具体功能的编程方法。10.1 通信基础知识计算机与外界所进行的信息交换经常被人们称为数据通信(有时也简称通信)。通信的基本方式可以分为并行通信和串行通信两种。1. 并行通信并行通信是指一次就可以同一时刻传送多个二进制数据的传输方式(可以是4位、8位、16位等等)。其优点是传输速度快;缺点是需要同时连接的信号线数目多,尤其是在通信距离较长时,传输线的成本会急剧增加。对于单片机而言,并行通信还需要占用多条宝贵的硬件引脚资源。例如PIC16F877内部就有并行通信模块PSP,它可以利用PORTD和PORTE端口的11只引脚(8条数据线加3条控制线),来实现与其它计算机或单片机之间的被动并行通信。2. 串行通信串行通信是指把一个二进制数据串逐位顺序分时进行传输的方式。在串行通信中同一时刻只能传输一位二进制信号,例如要传输8位二进制数字,设用8位的并行通信方式需要的时间是T,则用串行通信的传输时间至少为8T,实际传输时还需要加入额外的同步或控制信号,所以用串行通信的传输数据总是大于8T的。虽然串行通信传输速度在相同条件下比并行通信而言要慢,但其优点也非常突出:所用传输线条数很少,往往都是用2根或3根线即可完成,特别适合远距离通信。由于串行通信所用传输线少,用单片机实现串行通信时其引脚资源占用的也很少,所以串行通信更加适合用于资源受限的单片机系统中。无论是串行通信还是并行通信,都要涉及到通信协议、速度、误码率和校验等概念,下面依次简要介绍一下这几个概念。10.1.1 通信协议在通信中为了准确的实现数据传输,人们规定了通信协议。通信协议是对数据传送方式的规定,它包括数据格式定义、数据位定义、同步方式约定、传送速率定义、检纠错方式约定、传输步骤约定和控制字符定义等。只有收发双方在遵从同一协议的情况下才能进行正确通信。串行通信协议包括异步协议和同步协议两种。同步协议是指收发双方在同一时钟下进行数据通信,实现起来简单。但应用场合不多,这里略过。下面主要介绍一下实际应用中最常用的异步串行通信协议。由于在串行通信中每个方向的数据都是通过一根数据线传输的。为了正确识别数据线上的电平何时表示有数据,有什么数据,何时无数据等问题,人们规定了一种串行数据的通信格式,术语称为帧格式。异步串行通信都是以帧为单位的,每个帧按顺序包含:起始位、数据位(低位在前高位在后)、奇偶校验位、停止位等内容,一个典型的帧格式见表 10.1。表 10.1 异步串行通信帧格式空闲起始位LSB 八位数据位 MSB校验位停止位空闲101/01/01/01/01/01/01/01/01/011格式说明: 空闲:表示数据线上无数据,一般由弱上拉电阻使其保持高电平状态。 起始位:0为串行异步通信的起始位,当接收设备检测到这个逻辑低电平后,就开始准备接收数据位信号。起始位的作用就是实现通信双方的同步。 数据位:当接收设备收到起始位后接着就会收到数据位。数据位的个数可以为4位、7位、8位或更多,由通信双方约定。单片机中经常来用7位或8位数据传输。数据发送时,低位(LSB)在前,高位(MSB)在后。 奇偶校验位:数据发送完以后,可以发送奇偶校验位。奇偶校验用于有限差错检测,通信双方约定一致的奇偶校验方式。如果选择偶校验,数据位与校验位中1的个数和必须是偶数;如果选择奇校验,数据位与校验位中1的个数和必须是奇数。 停止位:在奇偶校验位或数据位(无奇偶校验位时)之后发送的是停止位。停止位是一个字符数据的结束标志,可以是1位、1.5位或2位的高电平。接收设备接收到停止位后,通信线便恢复到逻辑1的空闲状态。10.1.2 数据传送方式根据收发双方的数据流向,串行通信又可以分为三种数据传送方式:单工方式、半双工方式和全双工方式。 1. 单工方式单工方式采用一根数据传输线,只允许数据按照固定的方向传送。如图 10.1a,A只能作为发送器,B只能作为接收器,数据只能从A传送到B,不能从B传送到A。2. 半双工方式半双工方式采用一根数据传输线,允许数据分时的在两个方向传送,但不能同时双向传送。如图 10.1b,在某一时刻,A为发送器,B为接收器,数据从A传送到B;而在另一个时刻,A可以作为接收器,B作为发送器,数据从B传送到A。3. 全双工方式全双工方式采用两根数据传输线,允许数据同时进行双向传送。如图 10.1c,A和B具有独立的发送器和接收器,在同一时刻,既允许A向B发送数据,又允许B向A发送数据。图需要画的更好看些。图 10.1 串行通信的数据传送方式a) 单工方式 b) 半双工方式 c) 全双工方式10.1.3 波特率波特率是指每秒内传送的波特数,以Bps(波特每秒)为单位。它是衡量串行数据传送速度快慢的重要指标和参数。串行通信设备间常用的波特率有:110,300,600,1200,2400,4800,9600,19200,38400,115200等。需要注意的是波特率不等于传输速度,因为在串行数据传输中除了传输真正需要的数据位之外,还需要传输起始位、停止位等额外的信息位,所以实际数据传输速度都要小于波特率。10.1.4 串行通信的检错和纠错在串行通信过程中存在不同程度的噪声干扰,这些干扰有时会导致在传输过程中出现差错。为了减少差错,就需要采取一定措施,这包括检错和纠错。1. 检错要想减少差错,先要检测到差错的存在,这就是检错。检错的主要手段是对收到的数据进行校验,常用的校验方法有奇偶校验和CRC校验。这里简介一下奇偶校验。奇偶校验是常用的一种检错方式。奇偶校验就是在发送数据位最后一位添加一位奇偶校验位(0或1),以保证数据位和奇偶校验位中1的总和为奇数或偶数。若采用偶校验,则应保证1的总数为偶数;若采用奇校验,则应保证1的总和为奇数。在接受数据时,CPU应检测数据位和奇偶校验位中1的总数是否符合奇偶校验规则,如果出现误码,则应转去执行相应的错误处理服务程序,进行后续纠错。得知传输过程中的差错数目后,进而可计算得到本系统的误码率。误码率是指数据经传输后发生错误的位数与总传输位数之比。这是衡量通信系统质量的重要指标。在计算机通信中,一般要求误码率达到10-6数量级。误码率与通信过程中的线路质量、干扰、波特率等因素有关。2. 纠错在基本通信规程中一般采用奇偶校验或方阵码检错,以重发方式进行纠错。在高级通信中一般采用循环冗余码(CRC)检错,以自动纠错方式来纠错。一般说来,附加的冗余位越多,检测、纠错能力就越强,但通信效率也就越低。10.2 USART的系统结构PIC16F877单片机内部集成了两类不同的串行通信模块,即通用同步/异步收发器(USART)和主控同步串行端口(MSSP)模块。前者主要用于两个计算机系统之间的远距离传输,而后者的主要应用目标是一个电路板内近距离的元件之间的串行通信。本章主要讲解USART模块,而MSSP模块将在后面的章节专门介绍。USART分为发送器和接收器两部分。为了清晰的介绍各自的原理和编程用的相关寄存器,本章把两部分分开讲解。先讲解USART的发送器。10.2.1 USART发送器系统结构USART的发送器采用双缓冲结构,其结构示意图如图 10.2所示。图 10.2 USART发送器结构示意图发送器的工作过程如下。(1) USART工作模式选择位SYNC为0时USART工作于异步模式。(2) 当要通过USART发送一个数据时,用户把要发送的数据放到发送寄存器(TXREG)中,TXIF被自动清零。(3) 系统会自动用一个指令周期(TCY)的时间把TXREG内容传送到发送移位寄存器TSR(TSR是内部寄存器,用户无法访问)中,传输完成会使TXIF置位。当USART发送中断使能位TXIE为1时,系统会向中断控制电路提出中断申请。若此时GIE和PEIE均为1便会产生中断响应。(4) 当串行口使能位SPEN为1时,RC6会被系统用做串行输出引脚TX,TSR中的内容会在波特率时钟(由SPBRG和BRGH决定)的驱动下依次通过TX引脚逐位输出。(5) 当TX9信号为1时,TX9D会作为数据的第9位通过TX输出。(6) 输出完毕后,发送移位寄存器空标志位TRMT会被置位。系统每发送一组数据的速度由发送器的波特率时钟来决定,用bps(位每秒)表示。USART的波特率时钟由一个8位的波特率发生器寄存器SPBRG和高波特率选择位BRGH决定。BRGH也位于TXSTA寄存器中。波特率发生器的时钟来源于单片机主频,由SPBRG的内容和BRGH配合来产生某种频率的波特率时钟用来驱动USART发送器(或USART接收器)工作。给出所需的波特率数值和单片机主频FOSC,就可以用表 10.2中的公式计算出SPBRG中应该写入的数值X。表 10.2 USART的波特率计算公式SYNCBRGH=0(低速)BRGH=1(高速)0(异步模式)波特率FOSC / (64(X+1)波特率FOSC / (16(X+1)1(同步模式)波特率FOSC / (4(X+1)无然而实际应用中总是已知传输的波特率和单片机主频,需要求的是SPBRG应该写入的数值X。由表 10.2可以得到求X的公式,见表 10.3。表 10.3 USART的SPBRG写入值计算公式SYNCBRGH=0(低速)BRGH=1(高速)0(异步模式)X(FOSC /(波特率64) )1X(FOSC /(波特率16) )11(同步模式)X(FOSC /(波特率4) )1无下面举例说明SPBRG写入值与波特率误差的计算方法。【例10-1】 已知单片机主频是4MHz,希望USART异步模式下波特率为9600bps,试计算SPBRG的写入值和波特率误差。解 题意分析 SPBRG的写入值通过表 10.3的计算公式即可算出。表中异步模式下有两种计算公式,分别计算一下写入值及其波特率误差。 计算过程中要用到除法,但计算结果只能取整数,导致单片机运行时实际波特率跟目标波特率之间存在误差,此误差被称做波特率误差,在实际应用中希望此误差5%。 计算过程(1) 根据表中异步模式下的公式先计算BRGH=0时的写入值X。X (FOSC /(波特率64) )1 (4000000 / (9600 64) ) 1 5.51042 6(2) 当X为6、BRGH=0时,实际波特率可以通过表 10.2得出。波特率 FOSC / (64(X+1) 8928.57(3) 此时的波特率误差为:波特率误差 (实际波特率目标波特率)/目标波特率 |(8928.579600)/9600| 6.99%(4) 根据表中异步模式下的公式再计算BRGH=1时的写入值X。X (FOSC /(波特率16) )1 (4000000 / (9600 16) ) 1 25.0417 25(5) 当X为25、BRGH=1时,实际波特率可以通过表 10.2得出。波特率 FOSC / (16(X+1) 9615.38(6) 此时的波特率误差为:波特率误差 (实际波特率目标波特率)/目标波特率 |(9615.389600)/9600| 0.16%由计算可知当BRGH=1时误差小很多,符合USART通信的误差要求,可以用此计算值X进行USART通信。而当BRGH=0时波特率误差较大,不符合USART通信的误差要求,不建议使用这样的配置(X=6,BRGH=0)进行USART通信。在实际应用中波特率单位是bps或kbps(千位每秒),波特率数值往往都是300的倍数,例如1200bps,9600bps,19200bps,38400bps等。为了方便读者使用,表 10.4给出了常见主频下常用波特率对应的SPBRG写入值,表 10.5给出了常见主频下常用波特率的相对误差。表 10.4 各种主频和波特率要求下SPBRG写入值BRGH=1/BRGH=03.6864MHz4MHz10MHz20MHz1200bps191 / 47207 / 51- / 129- / 2559600bps23 / 525 / 664 / 15129 / 3119200bps11 / 212 / 231 / 764 / 1557600 bps3 / 03 / 010 / 220 / 4表 10.5 各种主频和波特率要求下误差表BRGH=1/BRGH=03.6864MHz4MHz10MHz20MHz1200bps0 / 00.17 / 0.17- / 0.17- / 1.759600bps0 / 00.16 / 6.990.16 / 1.730.16 / 1.7319200bps0 / 00.16 / 8.511.72 / 1.720.16 / 1.7257600bps0 / 08.51 / 8.511.36 / 9.583.34 / 8.51由表 10.5可以看出在主频为3.6864MHz时,各种常见波特率的误差都为零,当读者的单片机系统要求精确的USART通信时推荐使用3.6864MHz的晶振作为主频。& 波特率单位bps是表示每秒钟能够传输的数据位数,不是纯数据的传输速度。传输的数据中除内容信息外,还包括其它额外的控制位信息。以上就是USART异步发送器的工作流程及相关数据的计算方法。下面总结一下USART工作于异步发送模式时需要用到的特殊寄存器。10.2.2 USART发送器相关寄存器USART用做发送器时涉及到的寄存器有RCSTA、TXSTA、SPBRG、TXREG、INTCON、PIE1和PIR1。以下列出这些寄存器相关位的功能介绍。1. 接收状态寄存器RCSTA地址寄存器名Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit00x18RCSTASPENBit7 SPEN:USART模块使能位。0:关闭USART模块,RC6、RC7用做普通I/O引脚1:启用USART模块,RC6、RC7用做串行通信专用引脚2. 发送状态寄存器TXSTA地址寄存器名Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit00x98TXSTATX9TXENSYNCBRGHTRMTTX9D(1) Bit6 TX9:是否发送第9位数据标志位。0:不发送第9位数据1:发送第9位数据(2) Bit5 TXEN:USART发送器使能位。0:禁用USART发送器1:启用USART发送器(3) Bit4 SYNC:USART工作模式选择位。0:异步工作模式1:同步工作模式(4) Bit2 BRGH:高波特率选择位,也称传输速度选择位,此位仅用于异步模式下。0:低速模式1:高速模式(5) Bit1 TRMT:发送移位寄存器状态位。0:发送移位寄存器有数据1:发送移位寄存器空(6) Bit0 TX9D:发送数据的第9位。可用做软件奇偶校验位或多机通信中从机地址最高位3. 波特率发生寄存器SPBRG地址寄存器名Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit00x99SPBRG波特率发生器寄存器Bit7Bit0 :波特率发生器寄存器。具体设置方法参考表 10.34. 发送数据寄存器TXREG地址寄存器名Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit00x19TXREGUSART数据发送寄存器Bit7Bit0 :USART数据发送寄存器。要发送的字节写入此寄存器即可自动发送(当然前提是其它位设置正确)5. 外围中断标志寄存器PIR1地址寄存器名Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit00x0CPIR1TXIFBit4 TXIF:USART发送状态位。由硬件自动置位或清零。0表示发送进行中,不可以向TXREG写入数据,否则会引起数据覆盖1表示发送完成,可以向TXREG写入数据6. 外围中断使能存器PIE1地址寄存器名Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit00x8CPIE1TXIEBit4 TXIE:USART发送中断使能位。0禁止USART发送中断1允许USART发送中断7. 中断控制寄存器INTCON地址寄存器名Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit00x8B/0x0B0x10B/0x18BINTCONGIEPEIE(1) Bit7 GIE:总中断使能位。1:使能中断系统,但各中断还有独立的使能控制位0:禁止任何中断产生(2) Bit6 PEIE:外围中断使能位。1:允许外围模块产生中断,但各外围模块中断还有独立的使能控制位0:禁止所有外围模块产生中断10.2.3 USART接收器系统结构USART接收器系统结构如图 10.3所示。图 10.3 USART接收器原理框图USART接收器的正常工作过程如下所示。(1) 当SPEN信号为1时,通过SYNC选择异步模式后,将CREN 位置位使能异步接收器。(2) 在RX/DT引脚上接收数据,RX的数据才能在SPBRG指定的波特率下输入到接收器中进入数据恢复模块。(3) 数据经由数据恢复模块输入到内部的移位接收寄存器RSR(用户无法访问)中。(4) 当RSR接收完一帧数据后把实际数据字节打入到RCREG寄存器,同时会根据接收协议约定自动设置相关OERR、FERR等错误标志位。(5) RCREG收到数据后RCIF标志位自动置1,它在 RCREG寄存器被读之后或 RCREG寄存器为空时被硬件清零。(6) 当RCIF为1时,用户即可从RCREG读取接收到的数据了。若此时中断使能位RCIE、GIE、PEIE为1,则会产生中断。(7) 重复步骤6)即可连续接收多个数据。以上过程是没有错误发生的情况,然而实际在通信过程中会发生数据溢出错误、帧格式错误等问题。下面分析一下错误产生的原因及避免方法。RCREG寄存器是一个双缓冲寄存器结构(FIFO),因此最多可以暂存两个字节,若此时有第三个字节开始移位到 RSR 寄存器。在检测到第三个字节的停止位后,如果RCREG缓冲区仍然是满的(没有读取过RCREG),则溢出错误标志位 OERR会被自动置位,RSR 寄存器中的数据会丢失。可以对RCREG寄存器读两次重新获得缓冲区中的两个字节。为了避免溢出错误,建议当RCIF为1时要立刻读取RCREG。OERR 位必须由软件清零,还可以通过复位接收逻辑(将 CREN 位清零后再置位)实现。如果OERR 位被置1,则系统会禁止将 RSR 中的数据传送到 RCREG 寄存器,因此如果 OERR 位被置 1,必须将它清零。如果停止位检测为0(正常情况下停止位应该是高电平1),当读取RCREG时,RCSTA的帧出错标志位 FERR将被置位。FERR 位和接收到的第9位数据也会被双缓冲器缓冲。每次读 RCREG寄存器将会给 RX9D 和FERR 位装入新值,用户应该在此时判断FERR是否为1,若为1则编程处理此错误:或者通知主机重传,或者产生警告信号通知用户。10.2.4 USART接收器相关寄存器USART用做发送器时涉及到的寄存器有RCSTA、TXSTA、SPBRG、RCREG、INTCON、PIE1和PIR1。以下列出这些寄存器相关位的功能介绍。1. 接收状态寄存器RCSTA地址寄存器名Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit00x18RCSTASPENRX9SRENCREN-FERROERRRX9D(1) Bit7 SPEN:USART模块使能位。0:关闭USART模块,RC6、RC7用做普通I/O引脚1:启用USART模块,RC6、RC7用做串行通信专用引脚(2) Bit6 RX9:9位接收使能位。0:选择8位接收1:选择9位接收(3) Bit5 SREN:单字节接收使能位。此位在异步模式下未使用(4) Bit4 CREN:连续接收使能位。 在异步模式下。0:禁用连续接收1:允许连续接收(5) Bit2 FERR:帧出错标志位。0:无帧错误1:帧出错(读 RCREG 寄存器可更新该位,并接收下一个有效字节) (6) Bit1 OERR:溢出错误位。0:无溢出错误1:有溢出错误(可软件清零或清空CREN 位也可将此位清零) (7) Bit1 RX9D:接收数据的第9位。此位可作为软件奇偶校验位或9位地址最高位2. 发送状态寄存器TXSTA地址寄存器名Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit00x98TXSTASYNCBRGH(1) Bit4 SYNC:USART工作模式选择位。0:异步工作模式1:同步工作模式 (2) Bit2 BRGH:高波特率选择位,也称传输速度选择位,此位仅用于异步模式下。0:低速模式1:高速模式3. 波特率发生寄存器SPBRG地址寄存器名Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit00x99SPBRG波特率发生器寄存器Bit7Bit0 :波特率发生器寄存器。具体设置方法参考表 10.3 4. 接收数据寄存器RCREG地址寄存器名Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit00x1ARCREGUSART数据接收寄存器Bit7Bit0 :USART数据接收寄存器。此字节保存从USART收到的字节数据。5. 外围中断标志寄存器1 PIR1地址寄存器名Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit00x0CPIR1RCIFBit5 RCIF:USART接收中断标志位。由硬件自动置位或清零。0表示RCREG空,不可以从RCREG读取数据,否则会读到假数据1表示RCREG满,可以从RCREG读取数据 6. 外围中断使能寄存器1 PIE1地址寄存器名Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit00x8CPIE1RCIEBit5 RCIE:USART接收中断使能位。0禁止USART接收中断1允许USART接收中断7. 中断控制寄存器INTCON地址寄存器名Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit00x8B/0x0B0x10B/0x18BINTCONGIEPEIE(1) Bit7 GIE:总中断使能位。1:使能中断系统,但各中断还有独立的使能控制位0:禁止任何中断产生(2) Bit6 PEIE:外围中断使能位。1:允许外围模块产生中断,但各外围模块中断还有独立的使能控制位0:禁止所有外围模块产生中断10.3 单片机与RS-232接口电路设计在实际应用中,USART通常用于单片机与PC机之间的串行通信。但传统PC机上的串行接口使用的是RS-232协议,其逻辑电平与单片机的逻辑电平不匹配,无法直接相连。所以需要加入一个硬件的电平转换电路来实现两者的接口。这里简单介绍一下RS-232协议再介绍单片机如何通过USART与PC通信。RS-232是个人计算机上的标准通讯接口之一,是由美国电子工业协会(Electronic Industries Association,EIA) 所制定的异步传输标准接口。RS是英文Recommended Standard推荐标准)的缩写,232为标准号,最新版本是RS-232-C。该标准定义了数据终端设备(DTE)和数据通信设备(DCE)之间的接口信号特性,其中DTE可以是计算机,DCE一般指调制解调器(MODEM)或单片机。通常 RS-232 接口以9个引脚 (DB-9) 或是25个引脚 (DB-25) 的型态出现,一般个人计算机上会有两组DB-9的 RS-232 接口,在Windows操作系统中分别称为 COM1 和 COM2。虽然在RS-232标准中定义了9种信号,但对于一般双工通信,仅需几条信号线就可实现,如一条发送线(TXD)、一条接收线(RXD)及一条地线(GND)。 RS-232-C标准规定的数据传输速率为每秒50、75、100、150、300、600、1200、2400、4800、9600、19200波特。 RS-232-C标准规定,驱动器允许有2500pF的电容负载,通信距离将受此电容限制,例如,采用150pF/m的通信电缆时,最大通信距离为15m;若每米电缆的电容量减小,通信距离可以增加。传输距离短的另一原因是RS-232属单端信号传送,存在共地噪声和不能抑制共模干扰等问题,因此一般用于20m以内的通信。 RS-232-C标准定义了两种逻辑关系。对数据传输线采用了负逻辑关系:对控制信号线,采用正逻辑关系。对于PC与单片机通信,一般仅使用数据传输线即可。数据传输线TxD和RxD上的逻辑l用-3V-15V 表示,逻辑0用+3V+15V表示。PIC单片机输入输出的逻辑电平是TTL电平(5V代表1,0V代表0),与RS-232-C的逻辑电平不匹配,所以PIC单片机的串行接口不能与PC的串行口直接相连,必须通过专用的硬件电路来实现逻辑电平转换。在实际应用中通常用专用的集成电路芯片来完成硬件电路设计,例如MAX232。图 10.4是单片机与PC通过MAX232连接的典型电路图。图 10.4 PIC单片机与PC通过串口的硬件电路图图 10.4中的U2是电平转换芯片MAX232,P1是DB-9的插座,用来与PC端的DB-9接口相连。图中隐藏了U2的VCC引脚和GND引脚、P1的GND引脚。按以上硬件电路使PC和PIC单片机相连后,就可以编程实现双方通信了。10.4 实例:异步发送模式下的程序设计设置异步发送模式建议遵循以下操作步骤。(1) 选择合适的波特率和BRGH,对SPBRG 寄存器进行初始化。(3) 将 SYNC位清零、 SPEN位置 1,使能异步串行端口。(4) 若需要中断,将 TXIE、GIE 和 PEIE位置1 。(5) 若需要发送9位数据, TX9 位置 1。(6) 将 TXEN 位置1 ,使能发送,这也将自动置位 TXIF位。(7) 若选择发送9位数据,第9位数据应该放在 TX9D 中。(8) 把数据送入 TXREG 寄存器(自动启动发送)。(9) 当程序判断TXIF或TRMT为1时说明发送完毕。(10) 重复执行前两步即可发送多个字节数据。下面通过一个简单的例子来演示一下如何使用USART发送一个字节数据。【例10-2】 一个基于Proteus ISIS软件的串口通信实验电路图如图 10.5所示,单片机主频是4MHz,编程实现控制单片机在USART异步通信模式下以9600bps的波特率循环发送字符A。图 10.5 USART异步通信实验电路图解 题意分析 图 10.5中,VT1是“Proteus ISIS”软件提供的虚拟仪器虚拟终端,它与Windows操作系统中的超级终端功能类似,能够与ISIS中的模拟单片机系统进行异步串行通信,会以字符形式(用PC的显示器)接收或(用PC的键盘)发送符合RS-232协议的异步串行数据,便于观察程序运行结果,在没有显示设备的系统中通常用做调试信息的输出通道。 图 10.5仅仅是用来在单片机和ISIS中的虚拟终端通信的电路图。实际应用中单片机跟不同系统使用USART通信,其连接方式也有所不同。 请读者注意单片机与虚拟终端的连接方式。单片机的TX引脚应该与虚拟终端的RXD引脚相连。 结合前文对于发送过程的描述,可得出本例流程图如图所示。图 10.6 例10-2主程序流程图 汇编语言参考代码 ;这里加入汇编语言参考代码 C语言参考代码/ 通过USART无限的发送字符A/ PIC单片机主频:4MHz,波特率9600bps/ 数据格式:8位数据位,无奇偶校验位,一位停止位#include pic.h _CONFIG(XT & WDTDIS & LVPDIS);/ ICD2 调试配置字main() SPBRG=25; SYNC=0; / 选择异步模式 BRGH=1; / 高波特率方式 TXEN=1; / 发送使能 TX9=0; / 不发送第9位 SPEN=1; / USART使能 / 以上几条语句是分别对每位赋值,目的使初学者看清楚每位功能 / 实际项目中建议用以下两条语句替代,效率更高 /RCSTA=0b10000000; /TXSTA=0b00100100; TXREG=A; / 把要发送的数据放到TXREG中,USART模块开始自动发送 while(1) if(TRMT=1)/ 如果发送缓冲器TSR空说明发送完毕,可以发下一数据 TXREG=A; / 再次填充TXREG,USART模块会继续自动发送 把项目保存后成功编译出目标文件。而后在“Proteus ISIS”中运行程序。程序运行后会弹出一个虚拟终端窗口并会显示迅速的输出多个字符A,如图 10.7所示。这是因为的程序是死循环不停的通过USART向外发送字符A,虚拟终端VT1收到后就直接显示在其窗口中了。图 10.7 虚拟终端运行时截图10.5 实例:异步接收模式下的单向通信协议设计对于USART的异步接收模式而言,其编程方法与异步发送模式类似,这里就不单独举例赘述了。这里以一个实际串口接收程序设计中常见问题的解决方法为例向读者介绍串口接收程序的设计方法。很多系统中采用串口通信用来一次传输多个数据,那么如何能够区分当前收到的字节属于第一个数据还是第二个数据呢?为了解决这个问题,可以采用具有验证机制的简单通讯协议来实现。例如:一个简单的发送一组数据的通信协议如表 10.6所示。表 10.6 简单数据通信协议帧格式第一字节第二字节第三字节数据长度个字节0x550xAA数据长度具体数据 第一字节:0x55,固定值。 第二字节:0xAA,固定值。前两个字节表示一个数据包开始标志,接收方只要依次接收到0x55和0xAA之后才表明这是一个有效的数据包,其后的接收数据才需要保存;否则接收后直接抛弃。& 之所以用两个字节表示数据包开始标志,是为了防止错把具体数据中的内容当做数据包开始标志。不用一个字节是为了减小误判的几率。因为当用一个字节表示数据包开始标志,每收到一个字节是数据包开始标志的几率是1/256。若用两个字节则此几率就降为1/65536。 第三字节:表示要传输的数据长度(以字节为单位),设为N,假设每次数据长度小于252。 具体数据:第三字节其后跟的N个字节就是具体数据了。对于以上协议收发双方的编程思路如下。发送方的编程很简单,只需要把要发送的数据放在一个足够长的字符数组中。设此数组为Array。则Array0=0x55,Array1=0xAA,Ar
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 泰山医学院护理复试题库及答案
- 业务外包委托协议书要求
- 大专药师考试题及答案
- 人力资源管理中员工培训体系构建工具
- 美丽的自然我们的责任写景作文8篇
- 企业文件分类与管理标准
- 医疗设备采购申请与审批流程管理工具
- 医疗安全教育培训课件
- 公司会议策划及活动执行手册
- 家乡的秋天写景散文(11篇)
- GB/T 18690.2-2017农业灌溉设备微灌用过滤器第2部分:网式过滤器和叠片式过滤器
- 粤教花城版小学音乐歌曲《哈哩噜》课件
- 河北省特种设备检验收费标准
- 集成电路技术导论课件
- 交管12123学法减分试题库带答案
- 培育和践行社会主义核心价值观的课件
- 交通标志牌工程施工组织设计(标准版)
- 第二章药物转运及转运体
- 全区建设工程质量检测人员岗位考试考核实施细则
- 【课件】《红烛》课件24张统编版高中语文必修上册
- 交通事故认定书复核申请书模板
评论
0/150
提交评论