首页 理论教育 零点起步:AVR单片机开发实例,数据发送与USART发送器

零点起步:AVR单片机开发实例,数据发送与USART发送器

时间:2023-10-17 理论教育 版权反馈
【摘要】:置位UCSRB寄存器的发送允许位TXEN将使能USART的数据发送。当整个数据帧移出发送移位寄存器,同时发送缓冲器中又没有新的数据时,发送结束标志TXC置位。当UCSRB上的发送结束中断使能位TXCIE与全局中断使能位均被置为“1”时,随着TXC标志位的置位,USART发送结束中断将被执行。

零点起步:AVR单片机开发实例,数据发送与USART发送器

置位UCSRB寄存器的发送允许位TXEN将使能USART的数据发送。使能后TxD引脚的通用I/O功能即被USART功能所取代,成为发送器的串行输出引脚。发送数据之前要设置好波特率、工作模式与帧结构。如果使用同步发送模式,施加于XCK引脚上的时钟信号即为数据发送的时钟。

1.发送5~8个数据位的帧

将需要发送的数据加载到发送缓存器将启动数据发送。加载过程即为CPU对UDR寄存器的写操作。当移位寄存器可以发送新一帧数据时,缓冲的数据将转移到移位寄存器。当移位寄存器处于空闲状态(没有正在进行的数据传输),或前一帧数据的最后一个停止位传送结束,它将加载新的数据。一旦移位寄存器加载了新的数据,就会按照设定的波特率完成数据的发送。

以下程序给出一个对UDRE标志采用轮询方式发送数据的例子。当发送的数据少于8位时,写入UDR相应位置的高几位将被忽略。当然,执行本段代码之前首先要初始化US-ART。在汇编代码中要发送的数据存放于R16。

C代码例程:

这个程序只是在载入新的要发送的数据前,通过检测UDRE标志等待发送缓冲器为空。如果使用了数据寄存器空中断,则数据写入缓冲器的操作在中断程序中进行。

2.发送9个数据位的帧

如果发送9个数据位的帧(UCSZ=7),应先将数据的第9位写入寄存器UCSRB的TXB8,然后再将低8位数据写入发送数据寄存器UDR。以下程序给出发送9位数据的数据帧例子。在汇编代码中要发送的数据存放在R17:R16寄存器中。

C代码例程:

第9位数据在多机通信中用于表示地址帧,在同步通信中可以用于协议处理。

3.传送标志位与中断(www.xing528.com)

USART发送器有两个标志位:USART数据寄存器空标志UDRE及传输结束标志TXC,两个标志位都可以产生中断。

数据寄存器空UDRE标志位表示发送缓冲器是否可以接受一个新的数据。该位在发送缓冲器空时被置“1”;当发送缓冲器包含需要发送的数据时清零。为与将来的器件兼容,写UCSRA寄存器时该位要写“0”。

当UCSRB寄存器中的数据寄存器空中断使能位UDRIE为“1”时,只要UDRE被置位(且全局中断使能),就将产生USART数据寄存器空中断请求。对寄存器UDR执行写操作将清零UDRE。当采用中断方式的传输数据时,在数据寄存器空中断服务程序中必须写一个新的数据到UDR以清零UDRE;或者是禁止数据寄存器空中断。否则一旦该中断程序结束,一个新的中断将再次产生。

当整个数据帧移出发送移位寄存器,同时发送缓冲器中又没有新的数据时,发送结束标志TXC置位。TXC在传送结束中断执行时自动清零,也可在该位写“1”来清零。TXC标志位对于采用如RS-485标准的半双工通信接口十分有用。在这些应用里,一旦传送完毕,应用程序必须释放通信总线并进入接收状态。

当UCSRB上的发送结束中断使能位TXCIE与全局中断使能位均被置为“1”时,随着TXC标志位的置位,USART发送结束中断将被执行。一旦进入中断服务程序,TXC标志位即被自动清零,中断处理程序不必执行TXC清零操作。

4.校验位

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

5.禁止发送

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

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈