AVR单片机里异步串行通信,这句是什么意思:UCSRC=(1<<URSEL)|(0<<UPM0)|(3<<UCSZ0)

请高手详细讲解。。。
三个或都讲一下~~~
还有为什么步直接赋初值UCSRC=0x86啊,多简单
这里面的UCSZ0 UPM0 URSEL 数值是多少
是他们的初值还是什么?

这个几个单词都是有define宏定义的,确实代表了几个数字,在头文件里有,ctrl+f自行搜索一下即可找到。你要是懒得找,我告诉你也行,他其实就是按照某位实际存在的位来定义的,例如UPM0位于bit4,那么头文件里肯定有#define UPM0 4,以此类推。
你问为什么不直接赋值,而通过这种貌似“复杂”的方式?
我来给你说下,举个例子,比如你打算把UCSZ1 、UCSZ0设为1、1(也即UCSZ=3,你懂得)其他全部设0(即0000 0110),那么就应该有UCSRC=0x06.
反过来,当你看到0x06这个数值的时候,你能一下子反应过来,知道UCSZ=3吗,我觉得很难做到。
但是那种“麻烦”的方式却能让读者一目了然就知道UCSRC的设定情况,比如
UCSRS=(3<<UCSZ0)。
实质就是UCSRS=(3<<1)=0000 0110。(因为UCSZ0位于bit1,因此UCSZ0就=1)
这种方式对于URSEL、UPM等等的设定非常重要,当你想要更改UCSRC寄存器设定的时候,你会发现,这种方式非常直观,而不必每次都去“计算或者口算或者心算”他们对应的16进制数
自己体会一下
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-11-23
需要帮你写程序吗

UCSRC=(1<<URSEL)|(0<<UPMO)|(3<<UCSZ0);是什么意思
解译如下:3化成二进制是11,UCSZ0在UCSRC中是第1位(注它还有第0位的UCPOL)意思是:把11左移1位,是UCSZ1及UCSZ0均为1,即定义数据为8位 希望可以帮到你

关于AVR单片机的程序问题
你这个问题其实和AVR单片机没关系,任何一个MCU都可以采用类似的代码。在C语言里,有值传递这个概念,这是因为编译器会优化程序,为变量做一个拷贝值。这样呢,cpu在计算这个值时,直接去取拷贝值,而不用去计算这个值的地址,然后寻址,再去取这个值,从而节省了一定的指令周期。但是,有一个隐患,这...

急求:单片机红外遥控器接受和发射电路图和程序设计,程序最好C语言编的...
UCSRC = BIT(URSEL) | 0x06; UBRRL = 0x33; \/\/set baud rate lo UBRRH = 0x00; \/\/set baud rate hi UCSRB = 0x18;}int putchar(char c) { if (_textmode && c == '\\n') putchar('\\r'); while (!(UCSRA & (1<<UDRE))) \/\/ UDRE, data register empty ; UDR = c; return c...

AVR Studio4中ATMEGA128串口程序发什么都显示的00
你不要对TXC0进行操作,只要这个TXC0=1,就会立马跳入中断中,进入中断TXC0会自动清零的。

error C2440: '=' : cannot convert from 'char [10]' to 'volatile u...
UCSRC="\/blog\/(1<";<URSEL)|(1<<USBS)|(3<<UCSZ0); 你这句是什么意思 我还真是看不懂。。 前面那东西哪来的啊 ? 你这是自己写的还是从什么地方copy的别人的程序?UCSRC = 1<<URSEL | 1<<USBS | 3 << UCSZO ; ??

相似回答