在本教程中,我们将建立两个ATMEGA8微控制器之间的串行通信。此处建立的通信是UART(通用异步接收器发送器)类型。通过这种串行通信,可以在两个微控制器之间共享数据,这在各种嵌入式系统中都是必需的。
所需组件
硬件: ATMEGA8(2个),电源(5v),AVR-ISP编程器,100uF电容器(跨电源连接),1KΩ电阻(两个),LED,按钮。
软体: Atmel studio 6.1,progisp或flash magic。
电路图及说明
让我们了解AVR微控制器中的串行通信。在这里,ATMEGA将数据串行发送到另一个ATMEGA。它具有其他通信模式,但是为了便于通信,我们选择RS232。第一个ATMEGA8的RS232引脚连接到第二个ATMEGA8的RXD引脚。
建立的数据通信被编程为具有:
- 八个数据位
- 两个停止位
- 没有奇偶校验位
- 波特率2400 BPS(每秒位数)
- 异步通信(两个ATMEGA8之间没有时钟共享)
因此,对于两个ATMEGA8,我们有两个不同的寄存器集,其中一个充当发送器,另一个充当接收器。
现在,对于两个ATmega微控制器之间的RS232接口,必须满足TRANSMITTER和RECEIVER的以下功能:
1.必须为TRANSMITTER启用第一个控制器的TXD引脚(数据接收功能),并且必须为RECEIVER启用第二个控制器的RXD引脚。
2.由于通信是串行的,因此我们需要知道何时接收到数据字节,以便我们可以停止程序,直到接收到完整的字节为止。这是通过使能数据接收完成中断来完成的。
3.数据以8位模式发送和接收到控制器。因此,两个字符将一次发送到控制器。
4.模块发送的数据中没有奇偶校验位,只有一个停止位。
以上功能在控制器寄存器中设置;我们将简要讨论它们,
暗灰色(UDRE):(发送方)启动时未设置此位,但在工作期间用于检查发送器是否准备发送。有关更多详细信息,请参见TRASMITTER SIDE上的程序。
浅灰色(RXC):(接收侧)该位在启动期间未设置,但在工作期间用于检查接收器是否准备好接收数据。有关更多详细信息,请参见“接收端”上的程序。
VOILET(TXEN):(发送器侧)将该位置1以使能发送器侧的发送器引脚。
红色(RXEN):(接收侧)该位表示接收数据功能,必须将该位置位以使控制器接收来自模块的数据,同时使能控制器的RXD引脚。
棕色(RXCIE):必须将其设置为成功接收数据后才能产生中断。通过启用此位,我们将在接收到8位数据后立即知道。我们将不在这里使用此位,因此将其保留下来。
PINK(URSEL):必须在设置UCSRC中的其他需要的位之后,在使能UCSRC中的其他位之前,将该位置1;必须禁用URSEL或将其置零。我们不会在这里使用此位,因此请不要理会它。
YELLOW(UCSZ0,UCSZ1,UCSZ2):(接收侧和发送侧)这三个位用于选择单次接收或发送的数据位的数量。
两个ATMEGA之间的通信建立为八位通信。通过使通信与表匹配,UCSZ0,UCSZ1变为1,UCSZ2变为零。
我们必须在接收和发送端都设置这些。
橙色(UMSEL):(接收侧和发送侧)此位根据系统是异步通信(均使用不同的时钟)还是同步通信(均使用相同的时钟)来设置。
两个控制器都不共享任何时钟。由于它们两个都使用自己的内部时钟。因此,我们需要在两个控制器中将UMSEL设置为0。
绿色(UPM1,UPM0):(接收侧和发送侧)这两个位是根据我们在通信中使用的位奇偶校验调整的。
ATMEGA被编程为无奇偶校验地发送数据,因为数据传输长度很小,我们可以清楚地预期没有数据丢失或错误。因此,我们此处未设置任何奇偶校验。因此,我们将UPM1,UPM0都设置为零或保留它们,因为默认情况下所有位均为0。
蓝色(USBS):(接收侧和发送侧)此位用于选择通信期间我们使用的停止位数量。
这里建立的通信是异步类型的,因此为了获得更准确的数据发送和接收,我们需要使用两个停止位,因此我们在两个控制器中都将USBS设置为“ 1”。
通过选择适当的UBRRH在控制器中设置波特率。
通过交叉参考波特率和CPU晶振频率选择UBRRH值。
因此,通过交叉引用,UBRR值被视为“ 25”,因此设置了波特率。
如电路中所示,在变送器侧连接了一个按钮。当按下此按钮时,TRANSMITTER发送八位数据,RECEIVER接收该数据。成功接收到该数据后,它会切换与之相连的LED的亮和灭,这表明两个控制器之间的数据传输成功。