我想知道我怎么能接受一个8位变量,
把它分成8个布尔型,形成一个“for”循环。
例如:
void byteWrite(byte byteIn)
{
for(int i=0; i<8; i++)
{
PORTA |= 128; // STHP ON
if(?)
PORTB |= 4; //STCP ON
else
PORTB &=11;// STCP OFF
_delay_ms(1);
PORTA &= 63; // STHP OFF
_delay_ms(1);
}
PORTB |= 2; // DS ON
_delay_ms(1);
PORTB &= 1; // DS OFF
}
谢谢。
最佳答案
按位和,与班次一起使用:
if((byteIn & (1 << i)) != 0)
这只需为循环中的每个步骤计算位掩码
(1 << i)
,并使用按位和(&
运算符)检查是否设置了byteIn
中的相应位。这是一件很平常的事。
如果您担心在每次迭代时重新计算掩码,可以使用常量掩码
1
(即只检查最右边的位),而不是在每次迭代时移位byteIn
:if((byteIn & 1) != 0)
...
else
...
byteIn >>= 1;
最后一行向右移动
byteIn
一位,以便在下一次迭代时检查下一位这可能更快,因为它在机器代码中稍微简单一些(特别是对于较小的处理器,这看起来像PIC代码)。请注意,上面的两个解决方案都是从最低有效(最右)位开始迭代的,如果这不合适,您当然需要反转它。