设置了一位在一个8位销,而不改变其他的比特
-
27-09-2019 - |
题
使用winAVR于以下代码。
我有一个8位销这里,我需要或它与00000010或0x02设定的第7位。
现在我必须做的是如下:
- 设置口B位7
- 等于1毫秒
- 清除港口B位7
- 等待19ms
但是,我不应该变化的另一位在这些步骤。
所以我必须:
- 读港口B
- 定位的需要
- 写修改后的价值回到港口的
- 清除位
- 写回港口B
所以我试码是:
B=PINB|0x02
Loop delay for 1ms
BP=PINB&0x00
Loop for 19ms
但我认为,其他位都会改变,在此过程中,我的问题是,我该如何操纵一点8位口没有改变另一位?
非常感谢!!
解决方案
你需要的 BP=PINB & ~0x02
该~操作人员是合乎逻辑的,没有。和操作者保留的位 其他的 比2.
其他提示
你使用按位反对设置的面罩,而且:
B = PINB & ~0x02
为选定位,按位反集点到零;所有其他人是一体的。那个不要改变价值PINB当And.
该网页有一个良好的摘要的若干技巧有位经营。 http://www.catonmat.net/blog/low-level-bit-hacks-you-absolutely-must-know
不隶属于 StackOverflow