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

发布者:博雅之士最新更新时间:2015-09-23 来源: eefocus关键字:AVR单片机  ATMEGA16  USART  串行通信 手机看文章 扫描二维码
随时随地手机看文章
五、ATMEGA16的USART与PC机串行通信

五—(01)、PC机发送字符给单片机控制发光管亮,同时将其传回PC机,其中单片机的发送和接收都采用查询方式(下一篇中有例程~)

1、USART的主要特点

通用同步和异步串行接收器和转发器(USART) 是一个高度灵活的串行通讯设备。主要特
点为:
• 全双工操作( 独立的串行接收和发送寄存器)
• 异步或同步操作
• 主机或从机提供时钟的同步操作
• 高精度的波特率发生器
• 支持5, 6, 7, 8, 或9 个数据位和1 个或2 个停止位
• 硬件支持的奇偶校验操作
• 数据过速检测
• 帧错误检测
• 噪声滤波,包括错误的起始位检测,以及数字低通滤波器
• 三个独立的中断:发送结束中断, 发送数据寄存器空中断,以及接收结束中断
• 多处理器通讯模式
• 倍速异步通讯模式

 2、异步串行收发器

USART 分为了三个主要部分: 时钟发生器,发送器和接收器。控制寄存器由三
个单元共享。时钟发生器包含同步逻辑,通过它将波特率发生器及为从机同步操作所使用
的外部输入时钟同步起来。XCK ( 发送器时钟) 引脚只用于同步传输模式。发送器包括一个写缓冲器,串行移位寄存器,奇偶发生器以及处理不同的帧格式所需的控制逻辑。写缓
冲器可以保持连续发送数据而不会在数据帧之间引入延迟。由于接收器具有时钟和数据
恢复单元,它是USART 模块中最复杂的。恢复单元用于异步数据的接收。除了恢复单
元,接收器还包括奇偶校验,控制逻辑,移位寄存器和一个两级接收缓冲器UDR。接收
器支持与发送器相同的帧格式,而且可以检测帧错误,数据过速和奇偶校验错误。

3、时钟产生

1)USART支持4种模式的时钟

时钟产生逻辑为发送器和接收器产生基础时钟。USART 支持4 种模式的时钟: 正常的异
步模式,倍速的异步模式,主机同步模式,以及从机同步模式。USART 控制位UMSEL
和状态寄存器C (UCSRC) 用于选择异步模式和同步模式。倍速模式( 只适用于异步模式
) 受控于UCSRA 寄存器的U2X。使用同步模式 (UMSEL = 1) 时,XCK 的数据方向寄存器
(DDR_XCK)决定时钟源是由内部产生(主机模式)还是由外部生产(从机模式)。仅在同步模
式下XCK 有效。

[转载]AVR单片机(学习ing)—(五)、ATMEGA16的USART与PC机串

[转载]AVR单片机(学习ing)—(五)、ATMEGA16的USART与PC机串

2)内部时钟用于异步模式和同步主机模式(这里我也不是很懂~~[转载]AVR单片机(学习ing)—(五)、ATMEGA16的USART与PC机串,专业术语太多,不过说白了就是波特率的计算公式呗,不过好好看看肯定能明白的)

USART 的波特率寄存器UBRR 和降序计数器相连接,一起构成可编程的预分频器或波特
率发生器。降序计数器对系统时钟计数,当其计数到零或UBRRL 寄存器被写时,会自动
装入UBRR 寄存器的值。当计数到零时产生一个时钟,该时钟作为波特率发生器的输出
时钟,输出时钟的频率为fosc/(UBRR+1)。发生器对波特率发生器的输出时钟进行2、8
或16 的分频,具体情况取决于工作模式。波特率发生器的输出被直接用于接收器与数据
恢复单元。数据恢复单元使用了一个有2、8或16个状态的状态机,具体状态数由UMSEL、
U2X 与 DDR_XCK 位设定的工作模式决定。
Table 60 给出了计算波特率(位/秒)以及计算每一种使用内部时钟源工作模式的UBRR值
的公式。

[转载]AVR单片机(学习ing)—(五)、ATMEGA16的USART与PC机串

3)倍速工作模式

通过设定UCSRA 寄存器的U2X 可以使传输速率加倍。该位只对异步工作模式有效。当
工作在同步模式时,设置该位为"0”。
设置该位把波特率分频器的分频值从16 降到8,使异步通信的传输速率加倍。此时接收
器只使用一半的采样数对数据进行采样及时钟恢复,因此在该模式下需要更精确的系统
时钟与更精确的波特率设置。发送器则没有这个要求。[page]

4)外部时钟(这些东西感觉都是扯淡的~~呵呵)

 同步从机操作模式由外部时钟驱动,如Figure 70 所示。
输入到XCK 引脚的外部时钟由同步寄存器进行采样,用以提高稳定性。同步寄存器的输
出通过一个边沿检测器,然后应用于发送器与接收器。这一过程引入了两个CPU 时钟周
期的延时,因此外部XCK 的最大时钟频率由以下公式限制:

fsck

要注意fosc 由系统时钟的稳定性决定,为了防止因频率漂移而丢失数据,建议保留足够的
裕量。

5)同步时钟操作

使用同步模式时(UMSEL = 1)XCK 引脚被用于时钟输入( 从机模式) 或时钟输出( 主机模
式)。时钟的边沿、数据的采样与数据的变化之间的关系的基本规律是:在改变数据输出
端TxD 的XCK 时钟的相反边沿对数据输入端RxD 进行采样。

4、帧格式

串行数据帧由数据字加上同步位( 开始位与停止位) 以及用于纠错的奇偶校验位构成。

1)数据帧格式

• 1 个起始位
• 5、 6、 7、 8 或9 个数据位
• 无校验位、奇校验或偶校验位
• 1或2 个停止位
数据帧以起始位开始;紧接着是数据字的最低位,数据字最多可以有9 个数据位,以数据
的最高位结束。如果使能了校验位,校验位将紧接着数据位,最后是结束位。当一个完整
的数据帧传输后,可以立即传输下一个新的数据帧,或使传输线处于空闲状态。Figure
72 所示为可能的数据帧结构组合。括号中的位是可选的。

[转载]AVR单片机(学习ing)—(五)、ATMEGA16的USART与PC机串

数据帧的结构由UCSRB 和 UCSRC 寄存器中的UCSZ2:0、 UPM1:0、USBS 设定。接
收与发送使用相同的设置。设置的任何改变都可能破坏正在进行的数据传送与接收。

USART的字长位UCSZ2:0确定了数据帧的数据位数;校验模式位UPM1:0用于使能与决
定校验的类型; USBS 位设置帧有一位或两位结束位。接收器忽略第二个停止位,因此
帧错误(FE) 只在第一个结束位为"0” 时被检测到。

2)校验位的计算

校验位的计算是对数据的各个位进行异或运算。如果选择了奇校验,则异或结果还需要取
反。校验位与数据位的关系如下:

[转载]AVR单片机(学习ing)—(五)、ATMEGA16的USART与PC机串

注意:校验位位于最后一个数据位与第一个停止位之间。

5、USART的寄存器及设置

1)USART I/O数据寄存器

[转载]AVR单片机(学习ing)—(五)、ATMEGA16的USART与PC机串

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 的状态(这些东西果断没有用过[转载]AVR单片机(学习ing)—(五)、ATMEGA16的USART与PC机串)。

 

2)USART控制和状态寄存器A

[转载]AVR单片机(学习ing)—(五)、ATMEGA16的USART与PC机串

• Bit 7 – RXC: USART 接收结束
接收缓冲器中有未读出的数据时RXC 置位,否则清零。接收器禁止时,接收缓冲器被刷
新,导致RXC 清零。RXC 标志可用来产生接收结束中断( 见对RXCIE 位的描述)。
• Bit 6 – TXC: USART 发送结束
发送移位缓冲器中的数据被送出,且当发送缓冲器 (UDR) 为空时TXC 置位。执行发送结
束中断时TXC 标志自动清零,也可以通过写1 进行清除操作。TXC 标志可用来产生发送
结束中断( 见对TXCIE 位的描述)。
• Bit 5 – UDRE: USART 数据寄存器空
UDRE标志指出发送缓冲器(UDR)是否准备好接收新数据。UDRE为1说明缓冲器为空,已
准备好进行数据接收。UDRE标志可用来产生数据寄存器空中断(见对UDRIE位的描述)。
复位后UDRE 置位,表明发送器已经就绪。
• Bit 4 – FE: 帧错误
如果接收缓冲器接收到的下一个字符有帧错误,即接收缓冲器中的下一个字符的第一个
停止位为0,那么FE 置位。这一位一直有效直到接收缓冲器(UDR) 被读取。当接收到的
停止位为1 时, FE 标志为0。对UCSRA 进行写入时,这一位要写0。
• Bit 3 – DOR: 数据溢出
数据溢出时DOR 置位。当接收缓冲器满( 包含了两个数据),接收移位寄存器又有数据,
若此时检测到一个新的起始位,数据溢出就产生了。这一位一直有效直到接收缓冲器
(UDR) 被读取。对UCSRA 进行写入时,这一位要写0。
• Bit 2 – PE: 奇偶校验错误
当奇偶校验使能(UPM1 = 1),且接收缓冲器中所接收到的下一个字符有奇偶校验错误时
UPE 置位。这一位一直有效直到接收缓冲器 (UDR) 被读取。对UCSRA 进行写入时,这一
位要写0。
• Bit 1 – U2X: 倍速发送
这一位仅对异步操作有影响。使用同步操作时将此位清零。
此位置1 可将波特率分频因子从16 降到8,从而有效的将异步通信模式的传输速率加倍。
• Bit 0 – MPCM: 多处理器通信模式
设置此位将启动多处理器通信模式。MPCM 置位后, USART 接收器接收到的那些不包
含地址信息的输入帧都将被忽略。发送器不受MPCM设置的影响。[page]

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

[转载]AVR单片机(学习ing)—(五)、ATMEGA16的USART与PC机串

• 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

[转载]AVR单片机(学习ing)—(五)、ATMEGA16的USART与PC机串

• Bit 7 – URSEL: 寄存器选择
通过该位选择访问UCSRC 寄存器或UBRRH 寄存器。当读UCSRC 时,该位为1 ;当
写UCSRC 时, URSEL 为1。
• Bit 6 – UMSEL: USART 模式选择
通过这一位来选择同步或异步工作模式。

[转载]AVR单片机(学习ing)—(五)、ATMEGA16的USART与PC机串

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

[转载]AVR单片机(学习ing)—(五)、ATMEGA16的USART与PC机串

• Bit 3 – USBS: 停止位选择
通过这一位可以设置停止位的位数。接收器忽略这一位的设置。[转载]AVR单片机(学习ing)—(五)、ATMEGA16的USART与PC机串

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

[转载]AVR单片机(学习ing)—(五)、ATMEGA16的USART与PC机串

• Bit 0 – UCPOL: 时钟极性
这一位仅用于同步工作模式。使用异步模式时,将这一位清零。UCPOL 设置了输出数据
的改变和输入数据采样,以及同步时钟XCK 之间的关系。[转载]AVR单片机(学习ing)—(五)、ATMEGA16的USART与PC机串

5)USART波特率寄存器

[转载]AVR单片机(学习ing)—(五)、ATMEGA16的USART与PC机串

• 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吧~~我看了看好多啊~~~[转载]AVR单片机(学习ing)—(五)、ATMEGA16的USART与PC机串

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 模块的初始
化代码组合到一起。[page]

7、数据发送—USART发送器

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

1)发送5 到8 位数据位的帧

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

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

void USART_Transmit( unsigned char data )
{

while ( !( UCSRA & (1< ;

UDR = data;
}

2)发送9位数据的帧

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

void USART_Transmit( unsigned int data )
{

while ( !( UCSRA & (1< ;

UCSRB &= ~(1< if ( data & 0x0100 )
UCSRB |= (1<
UDR = data;
}

第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 & (1< return -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 标志,否则只要中断处理程序一结束,一个
新的中断就会产生。

4)接受错误标志

USART 接收器有三个错误标志::帧错误(FE)、数据溢出(DOR) 及奇偶校验错(UPE)。它
们都位于寄存器UCSRA。错误标志与数据帧一起保存在接收缓冲器中。由于读取UDR
会改变缓冲器, UCSRA 的内容必须在读接收缓冲器(UDR) 之前读入。错误标志的另一
个同一性是它们都不能通过软件写操作来修改。 但是为了保证与将来产品的兼容性,对
执行写操作是必须对这些错误标志所在的位置写"0“。所有的错误标志都不能产生中断。
帧错误标志(FE) 表明了存储在接收缓冲器中的下一个可读帧的第一个停止位的状态。停
止位正确( 为1) 则FE 标志为0,否则FE 标志为1。 这个标志可用来检测同步丢失、传
输中断,也可用于协议处理。UCSRC 中USBS 位的设置不影响FE 标志位,因为除了第
一位,接收器忽略所有其他的停止位。 为了与以后的器件相兼容,写UCSRA 时这一位必
须置0。
数据溢出标志(DOR) 表明由于接收缓冲器满造成了数据丢失。当接收缓冲器满( 包含了
两个数据),接收移位寄存器又有数据,若此时检测到一个新的起始位,数据溢出就产生
了。DOR 标志位置位即表明在最近一次读取UDR 和下一次读取UDR 之间丢失了一个或
更多的数据帧。 为了与以后的器件相兼容,写UCSRA 时这一位必须置0。当数据帧成功
地从移位寄存器转入接收缓冲器后, DOR 标志被清零。
奇偶校验错标志 (UPE) 指出,接收缓冲器中的下一帧数据在接收时有奇偶错误。 如果不
使能奇偶校验,那么UPE 位应清零。为了与以后的器件相兼容,写UCSRA 时这一位必
须置0。

5)奇偶校验器

奇偶校验模式位UPM1置位将启动奇偶校验器。校验的模式(偶校验还是奇校验)由UPM0
确定。奇偶校验使能后,校验器将计算输入数据的奇偶并把结果与数据帧的奇偶位进行比
较。 校验结果将与数据和停止位一起存储在接收缓冲器中。这样就可以通过读取奇偶校
验错误标志位(UPE) 来检查接收的帧中是否有奇偶错误。
如果下一个从接收缓冲器中读出的数据有奇偶错误,并且奇偶校验使能(UPM1 = 1),则
UPE 置位。直到接收缓冲器(UDR) 被读取,这一位一直有效。

6)禁止接收器

与发送器对比,禁止接收器即刻起作用。正在接收的数据将丢失。禁止接收器(RXEN 清
零) 后,接收器将不再占用RxD 引脚;接收缓冲器FIFO 也会被刷新。缓冲器中的数据将
丢失。

7)刷新接收缓冲器

禁止接收器时缓冲器FIFO 被刷新,缓冲器被清空。导致未读出的数据丢失。如果由于出
错而必须在正常操作下刷新缓冲器,则需要一直读取UDR 直到RXC 标志清零。下面的
代码展示了如何刷新接收缓冲器。

void USART_Flush( void )
{
unsigned char dummy;
while ( UCSRA & (1< }

关键字:AVR单片机  ATMEGA16  USART  串行通信 引用地址:AVR单片机(学习ing)-ATMEGA16的USART与PC机串行通信

上一篇:AVR单片机(学习ing)-ATMEGA16的定时/计数器
下一篇:avr单片机的TWI两线串行接口

推荐阅读最新更新时间:2024-03-16 14:32

PC机与单片机串行通信中实现命令批处理
    摘要: 介绍PC机与MCS-51单片机通信批处理命令的实现思想、方法、通信协议和C51程序平台。为PC机与单片机间串行通信程序设计提供一种方法上的新思路。     关键词: 批处理 MCS-51单片机 通信协议 在PC机与MCS-51单片机之间进行串行通信时,基本是一对一的,即用PC机向单片机每发1条命令,就等待单片机的1条返回信息。这样可能把大量时间浪费在PC机与单片机的通信过程中了。为此笔者经过实践,设计出可以批处理执行PC机发给单片机的命令,就像DOS操作系统中的批处理命令一样,可连续批处理信息,结果当然提高了系统速度。文中提供了部分平台式C51软件源代码,以供大家参考。 1 通信协议
[工业控制]
AVR单片机全系列性能参数表
AVR单片机全系列性能参数表 包括:tiny11,tiny12,tiny13,tiny15L,tiny2313,tiny26,tiny26L,tiny28L,tiny28V,90S1200, 90S2313 Mega128,Mega128L,Mega16,Mega16L,Mega162,Mega162L,Mega162V, Mega169,Mega169L,Mega169V,Mega32,Mega32L 包括:Mega48,Mega88,Mega168,Mega64,Mega64L,Mega8,Mega8L,Mega8515, Mega8515L,Mega8535,Mega8535L
[单片机]
<font color='red'>AVR单片机</font>全系列性能参数表
XMEGA128学习笔记5-串口USART
Xmega128的串口非常强大,最多能支持8个串口。串口又有四种模式: 1、异步 2、同步 3、IRDA红外模式 4、SPI主模式 今天我们就使用CVAVR代码向导生成简单串口测试程序,实现每1s打印“HELLO WORLD”字符串,同时能将接收到数据回显到串口调试助手上。 第一步:打开中断,因为我们需要实现串口回显的功能。 第二步:从开发板的原理图可以看到串口是在PC2和PC3脚,所以需要设置GPIO,经过CVAVR的提示PC3初始输出电平为1能够更加稳定: 第三步设置串口:使能接收和发送功能,并开启接收中断。 第四步:最后生成代码,加入以下代码: 最后编译下载,复位后可以看到效果图:
[单片机]
XMEGA128学习笔记5-串口<font color='red'>USART</font>
怎样学好AVR单片机
  随着各IC厂商推出各种高性能的单片机,51单片机已经远远不能满足大家对高性能单片机的需求。目前很多公司和学校已经开始转向AVR单片机了,相信在未来几年,AVR将会非常兴旺,所以学习AVR单片机将会很有前途。   相比经典的51系列来说,AVR单片机突出的优点主要有以下几点:   一、速度快。AVR是精简指令集单片机,其速度可以达到1MIPS/秒,理论上是传统的51的12倍,实际上在10倍左右。   二、片上资源丰富。MEGA系列片上具备JTAG仿真和下载功能。片内含有看门狗电路、片内程序Flash、片内数据RAM、同步串行接口SPI、异步串口UART、内嵌AD转换器、EEPROM、模拟比较器、PWM定时计数器、TWI(
[单片机]
STM32串口USART1中断接收和中断发送
  先贴出中断函数:    view plain copy   void USART1_IRQHandler(void){   IF (USART_GetiTStatus(USART1, USART_IT_RXNE) != RESET) {   USART_ClearITPendingBit(USART1, USART_IT_RXNE);   USART1_Buffer =USART_ReceiveData(USART1); //USART1_Buffesh是一个自己定义的接收数组   if(i 3){   SendFlag = 1;   }   }   if(USART_GetITStatus(USART1, USART_I
[单片机]
AVR单片机-- I/O口的使用
简介:本文章主要通过程序控制实现按键控制LED 灯的亮灭,按一下亮,再按一下灭,如此循环往复,并学习AVR 单片机的I/O口如何配置为输入和输出。 //文件名:delay_rest.c //文件描述:实现按键控制LED 灯的亮灭,按一下亮,再按一 //下灭,如此循环往复。 //实验目的:学习AVR 单片机的I/O口如何配置为输入和输出 //当前版本号:V1.0 //--------------------------------------------------------------------- //----------------------------start------------------
[单片机]
MSP430学习笔记——USART
MSP430F149有两个USART通讯端口,其性能完全一样,每个通讯口可通过RS232和RS485等芯片转换,与之相应的串行接口电路通讯。MSP430F149支持串行异步和同步通讯,每种方式都具有独立的帧格式和独立的控制寄存器。 USART异步通信 MSP430串行异步通信模式通过两个引脚:接收引脚URXD和发送引脚UTXD与外界相连。异步帧格式由一个起始位,7或8个数据位,校验位(奇/偶/无),1个地址位,和1或2个停止位。从最低位开始发送和接收。异步模式下,传送数据以字符为单位。 在异步模式下,USART支持两种多机模式,即线路空闲和地址位多机模式。 (1)线路空闲多机模式: 在这种模式下,数据块被空闲时间
[单片机]
MSP430学习笔记——<font color='red'>USART</font>
串行通信联网技术在冶金自动化监控领域发展与应用
近些年来,冶金行业的自动化系统的应用发展得越来越快,生产中各环节的监控系统应用也越来越多。由于串行通讯方式实现方便,系统费用低,所以许多监控系统大都采用串行通讯技术来实现。但因以太网及现场总线的广泛应用,一些与PLC等控制设备连接的监控系统,多采用以太网及现场总线的通讯方式。其实现场总线与RS485在物理界面上是一致的,只是各种现场总线有自己的通讯协议而已。总体来讲,串行通讯技术的应用非常广泛,尤其是支持串口设备联入以太网的接口装置,会使串口设备的联网更加方便、应用也会更加广泛。   生产运营各环节中的串行通讯设备联网状况   在冶金行业中,串行通讯技术主要应用于以下三个方面:   (1) 生产工艺过程监控系统;   
[工业控制]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved