《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好难
|