Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在8位引脚中设置一位,而不更改其他位_C_Assembly_Bit Manipulation_Winavr_Motordriver - Fatal编程技术网

C 在8位引脚中设置一位,而不更改其他位

C 在8位引脚中设置一位,而不更改其他位,c,assembly,bit-manipulation,winavr,motordriver,C,Assembly,Bit Manipulation,Winavr,Motordriver,将winAVR用于以下代码 我这里有一个8位PIN,我需要使用00000010或0x02设置第7位 现在我要做的是: 设置端口B的第7位 等待1ms 清除端口B第7位 等19毫秒 但是,我不应该在这些步骤中更改其他部分 因此,我必须: 读取端口B 需要设置位 将修改后的值写回端口 清除位 回写到端口B 所以我的测试代码是: B=PINB|0x02 Loop delay for 1ms BP=PINB&0x00 Loop for 19ms 但是我认为在这个过程中其他的位会被改变,

将winAVR用于以下代码

我这里有一个8位PIN,我需要使用00000010或0x02设置第7位

现在我要做的是:

  • 设置端口B的第7位
  • 等待1ms
  • 清除端口B第7位
  • 等19毫秒
但是,我不应该在这些步骤中更改其他部分

因此,我必须:

  • 读取端口B
  • 需要设置位
  • 将修改后的值写回端口
  • 清除位
  • 回写到端口B
所以我的测试代码是:

B=PINB|0x02
Loop delay for 1ms
BP=PINB&0x00
Loop for 19ms
但是我认为在这个过程中其他的位会被改变,我的问题是,我应该如何在不改变其他位的情况下操作8位端口的一位呢


非常感谢

您需要~code>BP=PINB&~0x02运算符不符合逻辑。and运算符只保留除2以外的位。

您需要的
BP=PINB&~0x02
运算符是非逻辑的。and运算符只保留除2以外的位。

使用设置掩码的逐位求反,并且:

B = PINB & ~0x02
对于所选位,按位求反将该位设置为零;其他的都是一个。
这些值在and时不会改变PINB中的值。

使用设置掩码的位求反,并且:

B = PINB & ~0x02
对于所选位,按位求反将该位设置为零;其他的都是一个。
这些运算符在AND时不会改变PINB中的值。

本页很好地总结了使用位运算符的几种技巧

本页很好地总结了使用位运算符的几种技巧

谢谢你们的回答,你们两人都解释得很好,但本先回答了。谢谢你们的回答,你们两人都解释得很好,但本先回答了。