这个句子是什么理解?
LDI R16,(1〈〈PB6)|(1〈〈PB7)|(1〈〈PB1)|(1〈〈PB0);PB6左移,又是怎么按位或?有点含糊。 原来如此!
LDI R16,(1<<PB6)|(1<<PB7)|(1<<PB1)|(1<<PB0)=
LDI R16,(00000001<<6)|(00000001<<7)|(00000001<<1)|(00000001<<0)=
LDI R16,01000000|10000000|00000010|00000001=
LDI R16,11000011=
R16=11000011=0xC3=195=O303
不好意思. 各位都认为自己的C很厉害,可是这样的语法就蒙了!
看一下INCLUDE进来的器件定义文件,那里面已经把PB7、PB6、....PB1、PB0定义为7、6、5、4、3、2、1、0了。“1<<PB6”表示把“00000001B左移6位”,这是C的语法。AVR的汇编系统采用了许多与C相同的语法表达,其目的是让懂C的人能比较快的掌握AVR汇编。
LDI R16,(1〈〈PB6)|(1〈〈PB7)|(1〈〈PB1)|(1〈〈PB0);
由AVR的汇编进行处理和编译,最后形成的汇编指令为:
LDI R16,11000011B;
熟悉的人可以马上看懂,就是R16寄存器的PB7、PB6、PB1、PB0四位为1,其它为0。这种用法在C中常用,主要是对I/O口寄存器进行设置。 谢谢指教!
页:
[1]