使用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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top