马伟力AVR笔记:五、异步串行通信(USART)实验

更新时间:2023-10-21 00:31:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

AVR学习笔记五、异步串行通信(USART)实验 -------基于LT_Mini_M16

5.1 USART的单字节发送实验

5.1.1 实例功能

现今单片机嵌入式系统接口技术发展的一个重要变化趋势是由并行外围总线接口向串行外围总线接口的转变。目前采用标准串行通信协议的器件非常多,通信协议也各有不同,主要有USART、SPI、TWI(IIC)、1-Wire等。

采用串行接口与总线方式为主的外围扩展技术具有方便、灵活,电路系统简单,占用I/O口资源少等特点。但是其串行接口系统的实现增加了软件设计的复杂性,对程序设计提出了更高的要求。

在串行接口和串行通信这类接口的设计和实现中,首先要熟悉、了解和掌握各种串行接口和串行通信的协议,同时还要了解所使用期间对协议的支持和兼容情况,最后还要具有良好的软件设计能力。

本实例共有3个功能模块,分别描述如下:

● 单片机系统:使用ATmega16单片机的异步通信串行接口USART实现向计算机发送一个字节。

● 外围电路:RS232电平转换电路,DB9串行接口插座。

● 软件程序:熟悉掌握ATmega16单片机的串行通信协议(USART)的编写。 通过本实例的学习,掌握相关电路设计,并掌握以下知识点: ● 了解单片机串口的功能

● 了解单片机的串口通信和RS-232通信的接口 ● 掌握单片机串口电平转换电路的设计方法 ● 掌握单片机串口的简单编程

5.1.2、器件和原理

单片机的通信方式主要有两种:并行通信和串行通信。并行通信是指数据的各位同时发送或接收。串行通信是指数据一位一位顺序发送或接收。单片机的串口通信是如何形成和使用的呢?

本实例首先介绍单片机的串口,然后介绍单片机的串口转换电路。最后介绍如何配置ATmega16单片机的串口寄存器从而实现一个串口发送一个字节的简单程序。 1、 单片机的串口介绍 (1)什么是单片机的串口

单片机的串行接口是一个可编程的全双工串行通信接口。可以用作异步通信方式(UART)与采用串行接口的外围设备相连接。

ATmga16单片机通过串行数据发送引脚TXD(PD1)和串行数据接收引脚RXD(PD0)与外界通信。UDR是串行口数据寄存器。UDR寄存器实际上是由两个物理上分离的寄存器RXB和TXB构成,他们使用相同的I/O地址。写UDR的操作,是将发送的数据写入到寄存器TXB中;读UDR的操作,读取的是接收寄存器RXB中的内容。所以虽然他们使用相同的地址,但是并不会出现冲突,因为他们两个有一个只能读出数据,而另一个只能写入数据。

(2)如何使用单片机的串口 在前面的实例中,我们已经了解和掌握了单片机定时器和中断的使用方法。和它们的使用方法一样,单片机的串口也是通过对串行口的控制与状态寄存器的操作完成串行通信的设置。在稍后我们会对这些寄存器的作用和如何设置进行详细的说明。

2、单片机的串口电平转换电路 (1)为什么需要电平转换电路 我们知道,单片机系统一般使用的是TTL电平,单片机中的串口输出信号当然也是如此。但是在串行通信中,一般使用的是RS-232通信协议,二者的电平并不相同,所以需要外接电平转换电路。

串行通信接口标准以RS-232C为主,RS-232C通信协议标准对电气特性、逻辑电平和各种信号线功能都做了规定。

其中对逻辑电平的规定是:高电平(逻辑1)为-3V---15V,低电平(逻辑0)为+3V--+15V,对于RS232信号来讲,当传输电平的绝对值大于3V时,电路可以有效的检查出来,介于-3V--+3V之间以及低于-15V或高于+15V的电平都被认为是无意义的。

所以,RS-232C是用正负电压来表示逻辑电平状态,而TTL则是以高低电平表示逻辑状态。这两者有着很大的不同。为了能够同计算机接口或终端的TTL器件连接,必须在RS-232C与TTL电路之间进行电平和逻辑关系的变换。

(2)电平转换电路需要设计吗

作为单片机的标准外围电路,串口的电平转换有专用的芯片,所以我们可以不必花费力气去设计电平转换电路。当然,如果我们对电路十分熟悉,那么也可以使用四个的、三极管就可以设计出一个电平匹配电路。在本实例中,我们主要介绍采用专用芯片进行电平转换的方法。目前较为广泛的是使用集成电路转换器件,有很多器件厂商都生产这类芯片。其中MAXIM公司更是有多款RS232C电平转换芯片。

选择RS232C电平转换芯片时候应当根据需要选择,例如:如果我们只需要通过单片机向RS232器件发送数据,那我们可以选择只有TTL电平到RS232电平转换的芯片就可以了。

在本实例中,我们需要向计算机(PC)发送数据,同时还要接受计算机(PC)发送过来的数据,所以我们需要选择可以实现TTL电平和RS232电平之间的双向电平转换的芯片。这里我们选择MAX3232芯片。同时以MAX3232芯片为例,介绍串口电平转换芯片的输入/输出工作原理。

MAX3232芯片的引脚排列我们可以在学习板的原理图上查找到。其引脚主要分为5个部分:

● 外接电容:共需5个外接电容(均为无极性的104电容),功能是进行电压匹配和电源去耦。

● TTL的输入:两路TTL电平的输入引脚9,12。 ● TTL的输出:两路TTL电平的输出引脚10,11。

● RS-232的输入:两路RS-232电平的输入引脚8,13。 ● RS-232的输出:两路RS-232电平的输出引脚7,14。 在MAX3232芯片内部,自动实现了TTL电平和RS232电平的双向转换,自动的调节了单片机的TTL电平和计算机的RS232电平之间的匹配问题。当然,我们还可以选择其他的串口电平转换芯片。

(3)电平转换芯片与单片机和计算机之间的连接

在学习板的原理图中,我们已经看到了,单片机的串口发送(TXD)和接收(RXD)引脚分别与串口转换芯片的11、12管脚相连。计算机串口的2、3脚分别与串口转换芯片的13、14管脚相连。

(4)单片机与单片机之间进行串行通信时需要电平转换芯片吗?

我们已经从前面了解到,正是由于单片机和RS232的电平信号不同,才需要电平转换芯片,对于两个单片机而言,由于两者都是TTL电平,所以也就不必使用电平转换电路。

两个单片机的串口引脚可以直接用导线相连,不过需要注意的是,二者的TXD和RXD需要相互反接才能正常工作,也就是其中一个单片机的RXD要接到另一个单片机的TXD,而它的TXD要接到另一个单片机的RXD,这样才能使其中一个单片机发送数据,而另一个单片机从接收端接收发送过来的数据。另外还需要设置两个单片机的波特率和通信格式等的一致。

3、ATmega16单片机的串口寄存器介绍

ATmega16单片机的串口寄存器主要有六个寄存器,分别是: ● USART数据寄存器UDR:发送和接收的数据寄存器。

● USART波特率寄存器UBRRL、UBRRH:分别存储波特率的低位和高位。 ● USART控制和状态寄存器UCSRA:主要设置接受和发送的数据校验情况。 ● USART控制和状态寄存器UCSRB:主要设置串口接收和发送的中断使能等。 ● USART控制和状态寄存器UCSRC:主要设置接受和发送的数据格式。 4、ATmega16单片机的串口寄存器设置

寄存器在不同模式下的设置各不相同,混在一起介绍不容易记住。在这里只介绍本实例中用到的寄存器设置。 (1)

USART 发送数据缓冲寄存器和 USART 接收数据缓冲寄存器共享相同的 I/O 地址,称为 USART 数据寄存器或 UDR。将数据写入 UDR 时实际操作的是发送数据缓冲器存器(TXB),读 UDR时实际返回的是接收数据缓冲寄存器 (RXB) 的内容。

在 5、6、7 位字长模式下,未使用的高位被发送器忽略,而接收器则将它们设置为 0。 只有当UCSRA寄存器的UDRE标志置位后才可以对发送缓冲器进行写操作。如果UDRE没有置位,那么写入 UDR 的数据会被 USART 发送器忽略。当数据写入发送缓冲器后若移位寄存器为空,发送器将把数据加载到发送移位寄存器。然后数据串行地从 TxD 引脚输出。

接收缓冲器包括一个两级 FIFO,一旦接收缓冲器被寻址 FIFO 就会改变它的状态。因此不要对这一存储单元使用读-修改-写指令(SBI和CBI)。使用位查询指令(SBIC和SBIS)时也要小心,因为这也有可能改变 FIFO 的状态。

具体在编写程序的时候,我们可以不必理会过多,只要知道接收串口数据的时候,把UDR中的数据送到我们定义的接收变量中,发送数据的时候,把要发送的数据送入UDR中就可以了。

(2)

该寄存器主要是发送、接收结束的结束标志,以及各种数据错误检查方式。在一般的串口通信中,我们可以不必关心。一般我们只关心第五位的设置。

●Bit 5 – UDRE: USART数据寄存器空

UDRE标志指出发送缓冲器(UDR)是否准备好接收新数据。UDRE为1说明缓冲器为空,已准备。

在非中断方式发送数据的时候,每发送一个字节都要检测缓冲期是否为空,即检测UDRE是否为1,只有在UDRE为1的情况下,才能向缓冲器UDR中写入数据。在本例中我们就用查询的方式发送数据,所以要检测这一位是否为1.

(3)

该寄存器主要设置接受和发送寄存器的使能以及接收和发送中断标志,在本例中我们只是采用查询方式发送一个字节,所以只要使能发送功能即可。另外还有字符长度设置位,我们在下一个寄存器的介绍中一并介绍。

● Bit 3 – TXEN: 发送使能

置位后将启动将启动 USART 发送器。TxD 引脚的通用端口功能被 USART 功能所取代。 TXEN 清零后,只有等到所有的数据发送完成后发送器才能够真正禁止,即发送移位寄存器与发送缓冲寄存器中没有要传送的数据。发送器禁止后,TxD引脚恢复其通用I/O功能。

● Bit 2 – UCSZ2: 字符长度

UCSZ2与UCSRC寄存器的UCSZ1:0结合在一起可以设置数据帧所包含的数据位数(字符长度)。

(4)

UCSRC寄存器与UBRRH寄存器共用相同的I/O地址。对该寄存器的访问,由BIT位选择。 ? Bit 7 – URSEL: 寄存器选择

通过该位选择访问 UCSRC 寄存器或 UBRRH 寄存器。当读 UCSRC 时,该位为 1 ;当写 UCSRC 时, URSEL 为 1。

? Bit 6 – UMSEL: USART模式选择

通过这一位来选择同步或异步工作模式。

? Bit 5:4 – UPM1:0: 奇偶校验模式

这两位设置奇偶校验的模式并使能奇偶校验。如果使能了奇偶校验,那么在发送数据,发送器都会自动产生并发送奇偶校验位。对每一个接收到的数据,接收器都会产生一奇偶值,并与 UPM0 所设置的值进行比较。如果不匹配,那么就将 UCSRA 中的 PE 置位。

? Bit 3 – USBS: 停止位选择

通过这一位可以设置停止位的位数。接收器忽略这一位的设置。

? Bit 2:1 – UCSZ1:0: 字符长度

UCSZ1:0与UCSRB寄存器的 UCSZ2结合在一起可以设置数据帧包含的数据位数(字符长度)。

? Bit 0 – UCPOL: 时钟极性

这一位仅用于同步工作模式。使用异步模式时,将这一位清零。UCPOL 设置了输出数据的改变和输入数据采样,以及同步时钟 XCK之间的关系。

本例中,我们使用异步通信模式,数据格式为:一位停止位,无校验,8位数据位。需要注意的是:在写这个寄存器的时候,需要将bit7位置1.

(5)

本文来源:https://www.bwwdw.com/article/krrf.html

Top