单片机移位问题

来源:百度知道 编辑:UC知道 时间:2024/05/07 05:27:28
单片机里头有个移位问题我搞不懂。

有这样一个for循环

for(i = 0; i < 8; i++)
{
if( _crol_(0x7f,i)&0x80)
SDA = 1;
else
SDA = 0;

CLK = 0;
CLK = 1;
}
这是流水灯实验中的一段代码。
功能是串入并出移位。把0x7f串入并出到各个二极管的端。由0x7f可以看到有一个端应该在移位完成后为0;

我不懂的地方是:
循环左移i位 然后和 0x80相与。
那么if括号中的条件总是真啊。那么SDA怎么会有被赋值为0的时候呢?

找个问题很初级,希望各位能详细赐教

谢谢
为什么0x7f和0x80按位与的结果是0
0x7f 是:0111 1111 0x80是:1111 0000
按位与应该是:0111 0000 怎么会是0呢?
就这里不懂 请详细解释一下
谢谢

单片机是8位保存数据的
0x80是10000000
不是11110000

_crol_是自编的移位函数吧,
第一次循环就是if条件为0,当i=0时,0x7f左移0位,此时0x7F与0x80按位与结果是0,因此SDA=0;

因为传输的数据是0x7F,数据本身二进位0的个数就一个。因此执行时也就SDA
只有一次是0,当然如果你传输的是0x01那就多了。

呵呵,此程序是i2c通信中的吧。