关于马老师书上“接收9个数据位的帧”那两句代码的理解
unsigned int USART_Receive(void){
unsigned char status,resh,resl;
while(! ( UCSRA &(1<<RXC) ) );
status=UCSRB;
resl=UDR;
if ( status & (1<<FE) | (1<<DOR) | (1<<PE) )
return -1;
resh = ( resh >> 1)& 0x01; // 保存resh中的RXB8到resh即resh =B 0000 000 RXB8
return( ( resh <<8 ) | resl ); //因为函数返回值是unsigned int,所以,在执行return的时候,resh和rel均变为unsigned int类型,所以resh=0000 000 RXB80000 0000,rel也是16位
}
不知道分析的对不对。。。。。不然,( resh <<8 ) 就溢出了
C语言的功底问题。。。。我急需要恶补 resh 都没有初始化,酱油党? takashiki 发表于 2014-10-23 11:29
resh 都没有初始化,酱油党?
第一句unsigned char status,resh,resl; 木有人回复?
这段代码来自M16原文器件手册中的(LZ还少打了一行代码),我自己没有使用过。意思是对的,如果不放心,可以加上类型强制转换。
9位数据帧的情况极少使用,第9位数据用于多机通信的方式我也不推荐使用,这个在我的书中已经有详细说明。 machao 发表于 2014-10-26 20:50
这段代码来自M16原文器件手册中的(LZ还少打了一行代码),我自己没有使用过。意思是对的,如果不放心,可 ...
谢谢老师。我也看到了数据手册了。老师真的很细心。。。。。。。C语言要下点功夫了 takashiki 发表于 2014-10-23 11:29
resh 都没有初始化,酱油党?
兄台好眼力。 马老师又出现了。。。
页:
[1]