新闻中心

EEPW首页>嵌入式系统>设计应用> AVR单片机(学习ing)-ATMEGA16的USART与PC机串行通信

AVR单片机(学习ing)-ATMEGA16的USART与PC机串行通信

作者: 时间:2016-11-27 来源:网络 收藏

3)USART控制和状态寄存器B



• Bit 7 – RXCIE: 接收结束中断使能
置位后使能RXC 中断。当RXCIE 为1,全局中断标志位SREG 置位, UCSRA 寄存器
的RXC 亦为1 时可以产生USART 接收结束中断。

• Bit 6 – TXCIE: 发送结束中断使能
置位后使能TXC 中断。当TXCIE 为1,全局中断标志位SREG 置位,UCSRA 寄存器的
TXC 亦为1 时可以产生USART 发送结束中断。
• Bit 5 – UDRIE: USART 数据寄存器空中断使能
置位后使能UDRE 中断。当UDRIE 为1,全局中断标志位SREG 置位,UCSRA 寄存器
的UDRE 亦为1 时可以产生USART 数据寄存器空中断。
• Bit 4 – RXEN: 接收使能
置位后将启动USART 接收器。RxD 引脚的通用端口功能被USART 功能所取代。禁止
接收器将刷新接收缓冲器,并使 FE、DOR 及PE 标志无效。
• Bit 3 – TXEN: 发送使能
置位后将启动将启动USART 发送器。TxD 引脚的通用端口功能被USART 功能所取代。
TXEN 清零后,只有等到所有的数据发送完成后发送器才能够真正禁止,即发送移位寄存
器与发送缓冲寄存器中没有要传送的数据。发送器禁止后,TxD引脚恢复其通用I/O功能。
• Bit 2 – UCSZ2: 字符长度
UCSZ2与UCSRC寄存器的UCSZ1:0结合在一起可以设置数据帧所包含的数据位数(字符
长度)。
• Bit 1 – RXB8: 接收数据位 8
对9 位串行帧进行操作时,RXB8 是第9 个数据位。读取UDR 包含的低位数据之前首先
要读取RXB8。
• Bit 0 – TXB8: 发送数据位8
对9 位串行帧进行操作时,TXB8 是第9 个数据位。写UDR 之前首先要对它进行写操作。

4)USART控制和转台寄存器C



• 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 之间的关系。

5)USART波特率寄存器



• Bit 15 – URSEL: 寄存器选择
通过该位选择访问UCSRC 寄存器或UBRRH 寄存器。当读UBRRH 时,该位为0 ;当
写UBRRH 时, URSEL 为0。
• Bit 14:12 – 保留位
这些位是为以后的使用而保留的。为了与以后的器件兼容,写UBRRH 时将这些位清零。
• Bit 11:0 – UBRR11:0: USART 波特率寄存器
这个12 位的寄存器包含了USART 的波特率信息。其中UBRRH 包含了USART 波特率
高4 位,UBRRL 包含了低8 位。波特率的改变将造成正在进行的数据传输受到破坏。写
UBRRL 将立即更新波特率分频器。

不同晶振的波特率还是去看datasheet吧~~我看了看好多啊~~~

6、USART的初始化

进行通信之前首先要对USART 进行初始化。初始化过程通常包括波特率的设定,帧结构
的设定,以及根据需要使能接收器或发送器。对于中断驱动的USART 操作,在初始化时
首先要清零全局中断标志位( 全局中断被屏蔽)。
重新改变USART 的设置应该在没有数据传输的情况下进行。TXC 标志位可以用来检验
一个数据帧的发送是否已经完成, RXC 标志位可以用来检验接收缓冲器中是否还有数据
未读出。在每次发送数据之前( 在写发送数据寄存器UDR 前)TXC 标志位必须清零。
以下是USART 初始化程序示例。例程采用了轮询( 中断被禁用) 的异步操作,而且帧结
构是固定的。波特率作为函数参数给出。在汇编程序里波特率参数保存于寄存器r17:r16。
当写入UCSRC 寄存器时,由于UBRRH 与UCSRC 共用I/O 地址,URSEL 位(MSB) 必
须置位。

void USART_Init( unsigned int baud )
{

UBRRH = (unsigned char)(baud>>8);
UBRRL = (unsigned char)baud;

UCSRB = (1<
UCSRC = (1< }

更高级的初始化程序可将帧格式作为参数、禁止中断等等。然而许多应用程序使用固定的
波特率与控制寄存器。此时初始化代码可以直接放在主程序中,或与其它I/O 模块的初始
化代码组合到一起。



评论


技术专区

关闭