教学材料《AVR单片机》-第九章_第1页
教学材料《AVR单片机》-第九章_第2页
教学材料《AVR单片机》-第九章_第3页
教学材料《AVR单片机》-第九章_第4页
教学材料《AVR单片机》-第九章_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第九章

异步通信与USART接口基础第五节实例13USART自发自收测试第六节AVR与PC机的串口通信第七节采用通信缓冲区的USART底层驱动编写第八节利用标准I/O流调试程序第一节异步通信的基本概念一、引言上一章介绍了同步串行通信的SPI接口,这个通信接口通过使用从机选择SS和SCK时钟信号线来实现收发双方的同步,这使得SPI成了板级芯片间通信的常用串行协议。可如果将通信距离延长至几米、几十米甚至几百米时,就会产生一些新的问题:同步时钟信号随着距离增加带来的不可编码的延迟,另一方面,多一根线缆在距离增加时使得成本的增加不可忽略,这些新的问题使得人们不得不去研究:可以减少一条线而只用一条吗?下一页返回第一节异步通信的基本概念二、异步传输的字符数据帧格式下面看看通用异步串行传输接口是如何解决这个问题的,它的原理与上面的描述基本相同。异步传输是一种面向字符的传输技术,它利用字符的再同步方式实现数据的发送和接帧。这个字符帧的组成方式称为该字符的数据帧格式。基本的字符数据帧是由7一13位组成,其格式如图9一1所示,其中方括号表示的位是可选位。上一页下一页返回第一节异步通信的基本概念三、异步通信中的注意事项经过前面的介绍后,可以归纳出异步传输方式的主要特点:(1)异步通信的发送端和接收端由双方各自的时钟来控制数据的发送(发送端)及数据的检测和接收(接收端),发送、接收双方的时钟彼此独立,通信时,通过起始位、结束位进行同步;(2)发送端发送数据时,必须严格按照所规定的异步传输数据帧格式,一帧一帧地发送,接收端也必须按照相同的数据帧格式逐帧地接收。上一页下一页返回第一节异步通信的基本概念需要注意的是,如果发送方以9600b/s的波特率连续不断地发送10位数据帧,那么接收方就必须在1.0417ms内完成对该数据帧的处理工作,否则将影响到下一个数据帧的接收过程,造成丢帧。所以在选择波特率时,一定要考虑接收端的数据处理能力。另外,前面对异步传输的讨论中,一直没有提到串口上的电平大小。这是因为串口所规定的只是一种数据的传输格式,而用哪种电平(5V,3.3V)来实现这种接口并不在帧结构的范围内。事实上,还有很多串口电平的传输范:RS232总线标准本章第六节介绍、RS485总线标准等上一页返回第二节AVR的异步传输接口USART、USART硬件接口方框图

图9-2所示为ATmega48的全双工通用同步/异步串行收发模块USART收发器的接口硬件结构方框图。从图中可以看出,USART收发器由三大部分组成:时钟发生器、数据发送器和数据接收器。控制寄存器为所有模块共享。时钟发生器由同步逻辑电路和波特率发生器组成,用来作为异步模式时的波特率发生器,及为从机同步操作输入外部的同步时钟信号

下一页返回第二节AVR的异步传输接口USART发送器包括一个写缓冲器,串行移位寄存器,奇偶发生器以及处理不同的帧格式所需的控制逻辑。写缓冲器可以保持连续发送数据而不会在数据帧之间引入延迟。数据有TXDO引脚串行输出。接收器具有时钟和数据恢复单元用于异步数据的接收。除了恢复单元,接收器还包括奇偶校验,控制逻辑,移位寄存器和一个两级接收缓冲器UDRn。接收器支持与发送器相同的数据帧结构,同时由硬件实现并完成数据帧错误、接收数据溢出和校验错误的检测。上一页下一页返回第二节AVR的异步传输接口USART二、USART的时钟发生器时钟发生器为发送器和接收器产生基础时钟。USART支持4种时钟工作模式:正常的异步模式,倍速的异步模式,主机同步模式,以及从机同步模式。其中同步模式是在异步串口的基础上再添加一根时钟线,由于用得不多,这里不再详细介绍,需要了解这部分情况可自行参考数据手册图9-3为时钟发生器的逻辑框图上一页下一页返回第二节AVR的异步传输接口USART

1.波特率发生器图9-3的左上角部分是串口的波特率发生器部分,可以看出该部分核心是波特率寄存器UBRRn和预分频减1计数器,它们一起构成了一个可编程的预分频器,通过对系统时钟信号预分频来得到波特率发生器的输出时钟。其分频的原理是:减1计数器对系统时钟信号计数,一旦计数到。时,产生一个脉冲信号,同时自动重新装入UBRR寄存器的数值,重新开始下一轮的计数。上一页下一页返回第二节AVR的异步传输接口USART所以该部分的输出时钟频率为fosc(UBRR+1)。而发送器真正得到的时钟信号txclk是对波特率发生器输出时钟的2,8,16分频,具体情况取决于工作模式波特率发生器的输出被直接用作接收器和数据接收单元的时钟(因为接收器的数据恢复电路需要以16倍或8被于波特率的速度采样RXD引脚信号,以达到接收数据的日的)。表9一1给出了计算波特率和根据波特率计算UBRR值的计算公式上一页下一页返回第二节AVR的异步传输接口USART2.倍速工作模式通过设定UCSROA寄存器的U2XO位可以使传输速率加倍。该位只对异步工作模式有效。工作在同步模式时将该位设置为“0"U2X0置位会把波特率分频器的分频值从16降到8,使异步通信的传输速率加倍。此时接收器只使用一半的采样数对数据进行采样及时钟恢复,因此在该模式下需要更精确的系统时钟与波特率设置。发送器则没有这个要求上一页下一页返回第二节AVR的异步传输接口USART三、USART相关寄存器1.USARTI/O数据寄存器一UDRn寄存器UDR,各位的定义如下:USART发送数据缓冲寄存器和USART接收数据缓冲寄存器共享相同的I/O地址,称为USART数据寄存器或UDRn。将数据写入UDRn时实际操作的是发送数据缓冲器存器(PXB),读UDRn时实际返回的是接收数据缓冲寄存器RXB)的内容。在5,6,7B字长模式下,未使用的高位被发送器忽略,而接收器则将它们设置为0。只有UCSRnA寄存器的UDREn标志置位后才可以对发送缓冲器进行写操作。上一页下一页返回第二节AVR的异步传输接口USART如果UDREn没有置位,那么写入UDRn的数据会被USART发送器忽略。当数据写入发送缓冲器后,若发送器使能,且移位寄存器为空,发送器将把数据加载到发送移位寄存器。然后数据串行地从TxDn引脚输出。接收缓冲器包括一个两级FIFO(先入先出队列),一旦接收缓冲器被寻址FIFO就会改变它的状态。因此不要对这一存储单元使用读一修改一写指令(SBI和CBI)。使用位查询指令(SBI)和SBI时也要小心,因为这也有可能改变FIFO的状态上一页下一页返回第二节AVR的异步传输接口USART2.USART控制和状态寄存器A-UCSRnA(1)位7一RXCn;USART接收结束(2)位6一TXCn;USART发送结束(3)位5一UDREn:USART数据寄存器空(4)位4一FEn:帧错误

(s)位3一DORn:数据溢(6)位2一UPEn;USART奇偶校验错误(7)位1一U2Xn;倍速发送(8)位0一MPCMn;多处理器通信模式上一页下一页返回第二节AVR的异步传输接口USART3.USART控制和状态寄存器B-UCSRnB(I)位7一RX(:IEn:接收结束中断使能

(2)位6一TX(:IEn:发送结束中断使能

(3)位5一UDRIEn;USART数据寄存器空中断使准

(4)位4一RXENn:接收使能

(5)位3一TXENn:发送使能

(6)位2一UCSZn2:字符长度

(7)位1一RXBBn:接收数据位8(8)位n一TxBSn:发送数据位s上一页下一页返回第二节AVR的异步传输接口USART4.USART控制和状态寄存器C-UCSRnC(1)位7:6一UMSELnl:0USART模式选择通过这两位可以选择USARTn的工作模式,请见表9-2UMSELn位设置(2)位5;4一UPMnl:0:奇偶校验模式如表9一3所示(3)位3一USBSn:停止位选择如表9一4所示(4)位2:-UCSZnl0:字符长度如表9-5所示(5)位。一UCPOLn:时钟极性如表9一6所示上一页下一页返回第二节AVR的异步传输接口USART5.USART波特率寄存器一UBRRL和UBRRH(1)位1s;12一保留位这些位是为以后的使用而保留的。为了与以后的器件兼容,写UBRRnH时将这些位清零。

(2)位11:0一UBRR11:0;USART波特率寄存器这个12位的寄存器包含了USART的波特率信息。其中UBRRnH包含了USART波特率高4位,UBRRnL包含了低8位。波特率的改变将造成正在进行的数据传输受到破坏。写UBRRnL将立即更新波特率分频器上一页返回第三节USART的基本操作一、USART的初始化进行通信之前首先要对USART进行初始化构的设定,以及根据需要使能接收器或发送器。首先要清零全局中断标志位(屏蔽全局中断)。初始化过程通常包括波特率的设定,帧结对于中断驱动的USART操作,在初始化时下一页返回第三节USART的基本操作二、数据发送1.发送5一8位数据位的帧将需要发送的数据加载到发送缓存器将启动数据发送。加载过程即为CPU对UDRn寄存器的写操作。当移位寄存器可以发送新一帧数据时,缓冲的数据将转移到移位寄存器。当移位寄存器处于空闲状态(没有正在进行的数据传输),或前一帧数据的最后一个停止位传送结束,它将加载新的数据。一旦移位寄存器加载了新的数据,就会按照设定的波特率、U2Xn位或工作模式所决定的XCKn来完成数据的发送上一页下一页返回第三节USART的基本操作2.发送9位数据位的帧如果发送9位数据的数据帧(UCSZn=7),应先将数据的第9位写入寄存器UCSRnB的TXB8,然后再将低8位数据写入发送数据寄存器UDRn。以下程序给出发送9位数据的数据帧例子3.传送标志位和中断USART发送器有两个标志位:USART数据寄存器空标志UDREn及传输结束标志TXCn,两个标志价都可以引先一巾断一上一页下一页返回第三节USART的基本操作

4.奇偶校验产生电路奇偶校验产生电路为串行数据帧生成相应的校验位。校验位使能(UPMnl=1)时,发送控制逻辑电路会在数据的最后一位与第一个停止位之间插入奇偶校验位。

5.禁止发送器

TXEN清零后,只有等到所有的数据发送完成后发送器才能够真正禁用,即发送移位寄存器与发送缓冲寄存器中没有要传送的数据。发送器禁用后,TxDn引脚恢复其通用I/0功能。上一页下一页返回第三节USART的基本操作三、数据接收1.接收5一8位的数据帧一旦接收器检测到一个有效的起始位,便开始接收数据。起始位后的每一位数据都以设定的波特率或XCKn时钟进行接收,直到收到一帧数据的第一个停止位。接收到的数据被送入接收移位寄存器。第二个停止位会被接收器忽略。接收到第一个停止位后,接收移位寄存器就包含了一个完整的数据帧。这时移位寄存器中的内容将被转移到接收缓冲器中。通过读取UDR就可以获得接收缓冲器的内容上一页下一页返回第三节USART的基本操作

2.接收9个数据位的帧如果接收的是9位数据的数据帧(UCSZ-7),在从UDR读取低8位之前必须首先读取寄存器UCSRnB的RXBBn以获得第9位数据。这个规则同样适用于状态标志位FEn,DORn及UPEn。状态通过读取UCSRnA获得,数据通过UDRn获得。读取UDRn存储单元会改变接收缓冲器FIFO的状态,进而改变同样存储在FIFO中的TXBBn,FEn,DORn与UPEn位。上一页下一页返回第三节USART的基本操作3.接收完成标志和中断USART接收器用接收结束标志(RXCn)来说明接收缓冲器中是否有未读出的数据。当接收缓冲器中有未读出的数据时,此位为1,当接收缓冲器空时为。(即不包含未读出的数据)。如果接收器被禁止(RXENn=0),接收缓冲器会被刷新,从而使RXCn清零置位UCSRB的接收结束中断使能位(RXCIEn)后,只要RXCn标志置位而且全局中断使能,就会产生USART接收结束中断。使用中断方式进行数据接收时,数据接收结束中断服务程序程序必须从UDRn读取数据以清除RXCn标志,否则只要中断处理程序一结束,新的中断就会产生上一页下一页返回第三节USART的基本操作

4.接收错误标志

USART接收器有三个错误标志:帧错误(EEn)、数据溢出(DORn)及奇偶校验错(UPEn)。它们都位于寄存器UCSRnA;错误标志与数据帧一起保存在接收缓冲器中。由于读取UDRn会改变缓冲器,UCSRnA的内容必须在读接收缓冲器(UDRn)之前读入。错误标志的另一个同一性是它们都不能通过软件写操作来修改。但是为了保证与将来产品的兼容性,当重新改变USART的设置时,应对这些错误标志所在的位置写“0“。所有的错误标志都不能产生中断上一页下一页返回第三节USART的基本操作

5.奇偶校验器奇偶校验模式位UPMnl置位将启动奇偶校验器。校验的模式(偶校验还是奇校验)由UPMnO确定。奇偶校验使能后,校验器将计算输入数据的奇偶并把结果与数据帧的奇偶位进行比较。校验结果将与数据和停止位一起存储在接收缓冲器中。这样就可以通过读取奇偶校验错误标志位(UPEn)来检查接收的帧中是否有校验错误。如果下一个从接收缓冲器中读出的数据有校验错误,并且奇偶校验使(UPMnl=1),则UPEn置位。直到接收缓冲器(UDRn)被读取,这一位一直有效

上一页下一页返回第三节USART的基本操作6.禁止接收器与发送器对比,禁用接收器即刻起作用。正在接收的数据将丢失。禁用接收器(RXENn清零)后,接收器将不再占用RxDn引脚;接收缓冲器FIFO也会被清空,缓冲器中的数据将丢失。一般情况下,应先检测标志RXCn标志,待RXCn置位后将UDRn中最后的数据读出,然后禁止接收功能上一页返回第四节基于USART

接口基本通信的实现与测试AVR的USART是一个增强型的全双工通用异步串行收发器。在使用USRAT时,首先是根据实际应用的要求和规定,对它进行正确的初始化设置。然后在使用轮询或中断的方式来进行数据的发送和接收。期中采用轮询的方式,程序的编写非常简单,采用中断可以大大提高CPU的工作效率,所以这两种方式都得到了广泛应用。下面通过一个简单的程序来测试基于USART的串口通信下一页返回第五节实例13

USART自发自收测试

1.硬件电路

图9-4给出了简单的USART测试电路(该图只画出了与本实例有关的部分)。该电路中,直接将TXDn和RXDn引脚短接,那么通过TXDn串出的数据就再由RXDn串入,实现了数据的自发自收。在单片机的PB端口接了一个7段LED数码管,用于显示接收到得数字。上一页下一页返回第五节实例13

USART自发自收测试2.软件设计这里软件仅完成一个简单的功能,发送部分每隔1s利用USART串出0一9循环变化的十进制数,接收部分将接收到的数字在LED数码管上显示出来。由于电路是一个自发自收的测试电路,所以如果我们看到数码管上显示的数字每隔1s从0一9循环变化,这就表明串口通信成功了上一页返回第六节AVR与PC机的串口通信一、RS一232总线标准介绍RS-2320有两种标准连接接口:DB25和DB9如图9-5所示。在日前的PC机上DB25接口的串口已经见不到了,取而代之的是DB9接口(其实现在新买的PC机也基本找不到DB9接口了)。RS-2320接口在与单片机通信的简单应用中,只需要使用3个脚:TXD(数据发送)、RXD(数据接收)和(ND(信号地),其余引脚是留给调制解调器之类的设备做数据流控制等用途的,在简单应用中可以不予理睬下一页返回第六节AVR与PC机的串口通信二、典型RS-232C接口电路由于RS-2320规定逻辑“0”电平为+5一+15V,逻辑“1”电平规定为一15V一5V,因此不能直接与TTL/MOS电路连接,必须经过电平转换。电平转换可以使用三极管分立器件实现,也可采用专用的电平转换芯片。现在广泛使用的标准方式为,采用一个只需SV或3V的单电源的RS一2320电平转换芯片。图9一6MAX232的结构原理图上一页下一页返回第六节AVR与PC机的串口通信典型的USART接口转换成RS-2320的接口电路如图9-7所示在本电路中,我们只使用了MAX232芯片两路发送和接收的其中一路,剩下的一路,可以用于扩展其他的RS-232接口信号线,或用于另外一个RS-232的接口转换电路中的C1,C2,C3,C4和MAX232A的V+和V一引脚构成了电平转换部分,4个电容的大小为0.1F(注意该电容的大小要遵循芯片数据手册给出的参考值,部分型号需要使用1.0F的电容),“为芯片电源的去藕电容,用于减小芯片工作时对系统电源的干扰上一页下一页返回第六节AVR与PC机的串口通信三、AVR与PC机通过RS一232C接口通信实验1.串口调试软件为了在PC机上观察到接收的数据,和将数据通过串口发送给单片机,需要一个运行于PC机上串口通信软件。在通信调试阶段,不需要编写专门的串口通信软件,可直接使用PC机上的一些串口调试软件来实现。在PC机中,串口被称为COM口,根据所对应的物理接口不同而称为(COMl,COM2等。下面介绍一下在实验中要用到的串口调试软件:SSCOM32,这是一个绿色软件,直接双击PXP文件就可运行,具备如下特点:上一页下一页返回第六节AVR与PC机的串口通信

(l)支持常用的110256000波特率,能设置端口参数

(2)能以字符(AS(CII码)或十六进制收发数据,同时支持中文字符的收发(3)支持文件数据的发送(4)允许设置发送周期,自动发送数据(5)绿色软件,无须安装,直接运行COM32.EXE即可其运行界面如图9一8所示2.软件编写为了简化软件的编写,本实验采用与一个自收自发的程序相同的波特率和数据帧格式,这样串口的初始化和发送函数就可以保持不变只需要修改下中断接收数据的部分上一页下一页返回第六节AVR与PC机的串口通信3.通信调试(1)硬件连接,为了测试AVR单片机与PC机之间的通信,首先需要将PC机和AVR通过RS一2320通信电缆连接起来。然后将实验板上的JB2RS232Jumpe:用短路块连接起来。(2)AVR发送数据测试,在PC机上启动串口调试软件,设置端口参数为(COM7(我使用的电脑已经不带COM口了,为了进行串口调试我使用了一条usb转串口的转接线,系统为该串口分配的端口号为COM7,这可在计算机管理中查看到),9600波特率,8位数据位,1位停止位,无奇偶校验。下载AVR程序,复位运行。上一页下一页返回第六节AVR与PC机的串口通信这时候,在scom32上方的窗口中我们就可以看到PC机接收的串口数据,如图9-9所示。(注意因为发送的数字。一9,勾上软件的HEX显示选项,否则将什么也不到)。图中显示的数据正好是发送的数字,这说明PC机接收AVR串口发送的数据成功了。(3)AVR接收数据测试。在软件下方的输入框中输入“3",并单击发送,这时观察数码管的显示,发现上面也显示“3",如果输入‘0’一‘9’以外的字符,再单击发送,将发现数码管的显示被关闭了。这说明AVR接收PC机发送数据成功到此,完成了PC机与AVR串口通信的实验上一页返回第七节采用通信缓冲区的USART底层驱动编写前面使用了轮询的方式编写了USART的发送函数,这种数据发送方式编程简单,因此在很多场合都得到了广泛运用,但采用这样的方法将大大降低CPU的运行效率,试考虑采用9600波特率时,发送1B需要1ms的时间,那么CPU就需要忙等待1ms的时间,这个时间对于单片机来说有点太长了。而且,采用忙等待的方式也不太适合与实际应用系统软件的融合,不便于实现结构化和模块化的编程。因为AVR有较大容量的高速数据存储器RAM,这里介绍一种采用通信缓冲区的方式编写USART的底层驱动,使得USART数据发送、接收可以相对独立出来,便于上层用户软件的编写返回第八节利用标准I/O流调试程序一、三个核心函数1.fdevopen()应用程序通过fdevopen函数为流指定实际的输入输出设备。前两个参数均为指向函数的指针,它们指向的函数分别负责向设备输出一字节和从设备输入一字节的函数。第三个参数保留,通常指定。put函数用于输出一个字节,成功时返回n,失败时返

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论