这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 初次接触DS18B20,有许多语句不懂,麻烦大家帮帮忙,谢谢

共24条 2/3 1 2 3 跳转至
助工
2013-07-26 12:33:19     打赏
11楼
原来我还以为就我一个人不会了,哈哈。
读的时候在主机把线拉低到15US末尾的时候读,因为每次只能读一位,所以一个字节的话要读8次,如果才开始读一个字节的最低位,那么就把这个位和0x01与,但是ds18b20才开始读的是一个字节的最高位,所以要和0x80与一下,如果为0,则与的结果为0,如果为1则与的结果为1。
  uchar Read_18B20(void){
    uchar i;
    uchar temp = 0;

    _DINT();
    for(i = 0;i < 8;i++)
    {
        temp >>= 1;
        DQ0;
        DelayNus(6);            //延时6us
        DQ1;
        DelayNus(8);            //延时9us
        DQ_in;
        _NOP();
        if(DQ_val)   temp |= 0x80;
        DelayNus(45);           //延时45us
        DQ_out;
        DQ1;
        DelayNus(10);           //延时10us
    }
    _EINT();

    return  temp;
}这是老板给我的代码,希望对你有帮助。

高工
2013-07-26 16:25:26     打赏
12楼

1-wire器件。

将器件寄存器中8位数据,按位缓存下来。

DQ从0变化到1,就可以从器件中读出1位,具体可参考18B20的时序。


高工
2013-07-29 09:00:09     打赏
13楼
原来我还以为就我一个人不会了,哈哈。
读的时候在主机把线拉低到15US末尾的时候读,因为每次只能读一位,所以一个字节的话要读8次,如果才开始读一个字节的最低位,那么就把这个位和0x01与,但是ds18b20才开始读的是一个字节的最高位,所以要和0x80与一下,如果为0,则与的结果为0,如果为1则与的结果为1。
  uchar Read_18B20(void){
    uchar i;
    uchar temp = 0;

    _DINT();
    for(i = 0;i < 8;i++)
    {
        temp >>= 1;
        DQ0;
        DelayNus(6);            //延时6us
        DQ1;
        DelayNus(8);            //延时9us
        DQ_in;
        _NOP();
        if(DQ_val)   temp |= 0x80;
        DelayNus(45);           //延时45us
        DQ_out;
        DQ1;
        DelayNus(10);           //延时10us
    }
    _EINT();

    return  temp;
}这是老板给我的代码,希望对你有帮助。

助工
2013-07-30 09:01:52     打赏
14楼
  dat>>=1;
共8次循环,每次将Dat的所有位右移1位,比如dat=0x02,,所有的右移一次就是0x01吧。。。
     dat|=0x80; 这句话就是dat=dat|0x80,,,,0x80也就是最高位为1,剩下是0,,,,不管data原来是什么数据,,和0x80求或之后最高位一定是1,就是把这个数据的最高位强行置1,配合上边的移位指令,就可以把8个数据组合成一个8位的数据。。。

助工
2013-07-31 09:06:31     打赏
15楼
没事多看看基础的知识吧

助工
2013-08-01 09:01:57     打赏
16楼
谢谢您的解答

助工
2013-08-02 09:04:33     打赏
17楼
谢谢,连图都附上了,学习中。

助工
2013-08-05 09:12:30     打赏
18楼

助工
2013-08-06 09:05:45     打赏
19楼
 学习了

高工
2013-08-06 09:25:17     打赏
20楼
不错不错,讨论的很细致,学习了

共24条 2/3 1 2 3 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]