添加收藏夹  设为首页  深圳服务热线:13751165337  13692101218
51电子网联系电话:13751165337
位置:首页 > IC型号导航 > 首字符A型号页 > 首字符A的型号第82页 > ATMEGA323 > ATMEGA323 PDF资料 > ATMEGA323 PDF资料1第85页
ATmega323(L)
接收帧与9数据
如果9位字符时( UCSZ = 7 )第九位必须从RXB8位读
UCSRB
读取低8位从UDR 。此规则适用于FE ,DOR
和PE状态标志位。读取UCSRA状态,然后从UDR的数据。阅读
该UDR I / O位置会改变的接收FIFO缓冲区,因此状态
的TXB8 , FE,DOR及UPE位,其中所有被存储在FIFO中,会发生变化。
下面的代码示例展示了一个简单的USART接收函数,说明如何处理
9位数据及状态位。
汇编代码例程
(1)
USART_Receive :
;
等待要接收的数据
SBIS
UCSRA , RXC
RJMP
USART_Receive
;
获取地位和第九位,然后从缓冲区中的数据
in
in
in
R18 , UCSRA
R17 , UCSRB
R16 , UDR
;
如果错误,则返回-1
ANDI
r18,(1<<FE)|(1<<DOR)|(1<<PE)
BREQ
USART_ReceiveNoError
LDI
LDI
R17, HIGH (-1)的
R16, LOW (-1)的
USART_ReceiveNoError :
;
过滤器的第九位,然后返回
LSR
r17
ANDI
R17 ,为0x01
RET
C代码示例
(1)
无符号整型
USART_Receive (
空间
)
{
无符号字符型
状态, RESH ,器RES1 ;
/*
等待要接收的数据
*/
{ } ( ( UCSRA & ( 1<<RXC ) ) ! ) ;
/*
获取地位和第九位,则数据
*/
/*
从缓冲区
*/
状态= UCSRA ;
RESH = UCSRB ;
器RES1 = UDR ;
/*
如果错误,则返回-1
*/
if
(状态& ( 1<<FE ) | ( 1<<DOR ) | ( 1<<PE ) )
回报
-1;
/*
过滤器的第九位,然后返回
*/
RESH = ( RESH >> 1 ) &为0x01 ;
回报
( ( RESH << 8 ) |器RES1 ) ;
}
注意:
1.本代码假定的头文件包含。
85
1457G–AVR–09/03

深圳市碧威特网络技术有限公司