kegaank 发表于 2006-9-5 10:11:55

这个句子是什么理解?

LDI R16,(1〈〈PB6)|(1〈〈PB7)|(1〈〈PB1)|(1〈〈PB0);

PB6左移,又是怎么按位或?有点含糊。

kegaank 发表于 2006-9-9 19:30:07

原来如此!

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

不好意思.

machao 发表于 2006-9-11 17:59:17

各位都认为自己的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口寄存器进行设置。

kegaank 发表于 2006-9-11 19:07:13

谢谢指教!
页: [1]
查看完整版本: 这个句子是什么理解?