| 
 
| 《atmega128原理与开发应用指南》上的例子,接收9个数据位的帧 马老师给的例子如下:
 unsigned int USART_Receive(void)
 {unsigned char status,resh,resl;
 /*Wait for data to be received*/
 while (!(UCSRA&(1<<RXC)));
 /*Get status and 9th bit,then data from buffer*/
 status=UCSRA;
 resh=UCSRB;
 resl=UDR;
 /*IF error,return -1*/
 if(status&(1<<FE)|(1<<DOR)|(1<<PE)
 return -1;
 /*Filter the 9th bit,then return*/
 resh=(resh>>1)&0x01;
 Return ((resh<<8)|resl);
 }
 这个例子不懂的地方有两个
 1.关于return -1代表什么意思啊,是不返回的意思么
 2.resh=(resh>>1)&0x01;
 Return ((resh<<8)|resl);是什么意思啊
 既然resh=UCSRB,那么resh>>1就是把UCSRB的位1 RXB位右移1位,这样RXB位的数值就移动到了第0位上,在于0x01相&代表什么呢?这样一来,resh的值只有两种情况00000001或者00000000.不明白这样有什么用
 另外最后一步resh<<8的话,不就变成00000000.在于resl或,值不变啊。不是多余的么?干吗不直接写 Return resl
 在我们的avr问了,但是没人教我,希望这里有好心人,教教我,我真的看不懂,并非偷懒,很着急,初学avr好难
 
 | 
 |