18B20划横线的程序看不懂,大神帮忙解释一下

2019-07-15 09:20发布

划横线的程序看不懂,大神帮忙解释一下。这个是18B20的写 的程序部分,这个for语句是什么意思?能执行18B20的什么?

E3D67C515ECF8D541D309F150A21781E.jpg
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
李雷
1楼-- · 2019-07-15 16:47
你把2进制0000 0001 左移多少次,它就变为0000 0000?再加上0000 0001 时它执行的一次,就是你FOR循环执行的次数。
勇哥-lzu
2楼-- · 2019-07-15 20:49
为什么要这样写?   怎么不用i++的写法?
人中狼
3楼-- · 2019-07-15 22:17
4楼正解,这样写应该是不用考虑到底循环多少次,到是第一次见,应该是可以避免边界问题,用i++的写法,根据初值的不同,判断循环终止的数值会不同
805570
4楼-- · 2019-07-15 23:33
 精彩回答 2  元偷偷看……
zhifubao
5楼-- · 2019-07-16 05:26
这个代码还是要截全一点,从你截取的部分看mask左移8次后就是0了。
fight281
6楼-- · 2019-07-16 10:25
这是一个写dat程序,内容应该是if(dat&mask)   循环8次,按位发送状态,是1就发一个1 ,是0就发一个0。 在总线通讯中经常用到。我在下边列出完整的程序 注释给你看。希望能帮到你。

完整的程序是:
        for(mask=0x01; mask!= 0; mask<<=1)  //进入按位赋值循环
        {
                IO_18B20 = 0;    //拉低引脚
                _nop_();
                _nop_();   
                if((mask&dat) == 0)   //按位与,mask的1在什么位置和对应的dat相与。
                        IO_18B20 = 0;
                else
                        IO_18B20 = 1;  //按位与的结果是1为真,否则为假。
                DelayX10us(6);
                IO_18B20 = 1;
        }

一周热门 更多>