微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > AVR单片机(学习ing)-ATMEGA16的USART与PC机串行通信

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

时间:11-27 来源:互联网 点击:

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

3)传送标志位与中断

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功能。

8、数据接收—USART接收器

置位UCSRB 寄存器的接收允许位(RXEN) 即可启动USART 接收器。接收器使能后RxD
的普通引脚功能被USART 功能所取代,成为接收器的串行输入口。进行数据接收之前首
先要设置好波特率、操作模式及帧格式。 如果使用同步操作, XCK 引脚上的时钟被用为
传输时钟。

1)以5 到8 个数据位的方式接收数据帧

一旦接收器检测到一个有效的起始位,便开始接收数据。起始位后的每一位数据都将以所
设定的波特率或XCK 时钟进行接收,直到收到一帧数据的第一个停止位。接收到的数据
被送入接收移位寄存器。第二个停止位会被接收器忽略。 接收到第一个停止位后,接收移
位寄存器就包含了一个完整的数据帧。这时移位寄存器中的内容将被转移到接收缓冲器
中。通过读取UDR 就可以获得接收缓冲器的内容的。
以下程序给出一个对RXC 标志采用轮询方式接收数据的例子。当数据帧少于8 位时,从
UDR 读取的相应的高几位为0。当然,执行本段代码之前首先要初始化USART。

unsigned char USART_Receive( void )
{

while ( !(UCSRA & (1;

return UDR;
}

在读缓冲器并返回之前,函数通过检查RXC 标志来等待数据送入接收缓冲器。

2)以9 个数据位的方式接收帧

如果设定了9 位数据的数据帧(UCSZ=7),在从UDR 读取低8 位之前必须首先读取寄存
器UCSRB 的RXB8 以获得第9 位数据。这个规则同样适用于状态标志位FE、DOR 及
UPE。状态通过读取UCSRA获得,数据通过UDR获得。读取UDR存储单元会改变接收缓
冲器FIFO 的状态,进而改变同样存储在FIFO 中的TXB8、 FE、DOR 及UPE 位。
接下来的代码示例展示了一个简单的USART接收函数,说明如何处理9位数据及状态位。

unsigned int USART_Receive( void )
{
unsigned char status, resh, resl;

while ( !(UCSRA & (1;

status = UCSRA;
resh = UCSRB;
resl = UDR;

if ( status & (1return -1;

resh = (resh >> 1) & 0x01;
return ((resh < 8) | resl);
}

上述例子在进行任何计算之前将所有的I/O寄存器的内容读到寄存器文件中。 这种方法优
化了对接收缓冲器的利用。它尽可能早地释放了缓冲器以接收新的数据。、

3)接收结束标志及中断

USART 接收器有一个标志用来指明接收器的状态。

接收结束标志(RXC) 用来说明接收缓冲器中是否有未读出的数据。 当接收缓冲器中有未
读出的数据时,此位为1,当接收缓冲器空时为0( 即不包含未读出的数据)。如果接收器
被禁止(RXEN = 0),接收缓冲器会被刷新,从而使RXC 清零。
置位UCSRB 的接收结束中断使能位(RXCIE) 后,只要RXC 标志置位( 且全局中断只能
) 就会产生USART 接收结束中断。使用中断方式进行数据接收时,数据接收结束中断服
务程序程序必须从UDR 读取数据以清RXC 标志,否则只要中断处理程序一结束,一个
新的中断就会产生。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top