使用winAVR获取以下代码。
我在这里得到一个8位PIN,我需要用00000010或0x02来设置第7位。
现在我要做的是以下内容:
但是,我不应该在这些步骤中更改其他位。
所以我必须:
所以我的测试代码是:
B=PINB|0x02
Loop delay for 1ms
BP=PINB&0x00
Loop for 19ms
但我认为在这个过程中其他位会被改变,我的问题是,我如何操作8位端口的一位而不改变其他位?
非常感谢!!
答案 0 :(得分:4)
你需要BP=PINB & ~0x02
〜运算符是逻辑NOT。和运算符只保留其他位而不是2。
答案 1 :(得分:1)
您使用设置掩码的按位否定,并使用AND:
B = PINB & ~0x02
对于所选位,按位否定将该位设置为零;所有其他人都是一个。 当ANDed时,那些不会改变PINB中的值。
答案 2 :(得分:0)
此页面对按位运算符的几个技巧进行了很好的总结。 http://www.catonmat.net/blog/low-level-bit-hacks-you-absolutely-must-know