zoukankan      html  css  js  c++  java
  • DS18B20配置

    复位脉冲:

      先拉低至少480us,以产生复位脉冲,接着释放4.7k电阻为高,延时15~60us,

    进入接收。

    1 void DS18B20_Rst(void)       
    2 {                 
    3     DS18B20_IO_OUT();     //SET PG11 OUTPUT
    4     DS18B20_DQ_OUT=0;     //拉低DQ
    5     delay_us(750);        //拉低750us
    6     DS18B20_DQ_OUT=1;     //DQ=1 
    7     delay_us(15);         //15US
    8 }

    应答脉冲:

      然后在拉低总线为60~240us,产生低电平应答脉冲(接收)。

     1 u8 DS18B20_Check(void)        
     2 {   
     3     u8 retry=0;
     4     DS18B20_IO_IN();    //SET PG11 INPUT     
     5     while (DS18B20_DQ_IN&&retry<200)
     6     {
     7         retry++;
     8         delay_us(1);
     9     };     
    10     if(retry>=200)return 1;
    11     else retry=0;
    12     while (!DS18B20_DQ_IN&&retry<240)
    13     {
    14         retry++;
    15         delay_us(1);
    16     };
    17     if(retry>=240)return 1;        
    18     return 0;
    19 }

    写时序:

      写1:先低电平延时2us,在释放总线延时60us。写0:先低电平60us,在释放

    总线延时2us。

     1 void DS18B20_Write_Byte(u8 dat)     
     2  {             
     3     u8 j;
     4     u8 testb;
     5     DS18B20_IO_OUT();    //SET PG11 OUTPUT;
     6     for (j=1;j<=8;j++) 
     7     {
     8         testb=dat&0x01;
     9         dat=dat>>1;
    10         if (testb) 
    11         {
    12             DS18B20_DQ_OUT=0;    // Write 1
    13             delay_us(2);                            
    14             DS18B20_DQ_OUT=1;
    15             delay_us(60);             
    16         }
    17         else 
    18         {
    19             DS18B20_DQ_OUT=0;    // Write 0
    20             delay_us(60);             
    21             DS18B20_DQ_OUT=1;
    22             delay_us(2);                          
    23         }
    24     }
    25 }

    读时序:

      主机输出低电平2us,然后在释放总线延时12us,接着在读取数据是0还是1,并

    且延时50us。先读一个字节,然后在读一个位。

     1 u8 DS18B20_Read_Bit(void)      
     2 {
     3     u8 data;
     4     DS18B20_IO_OUT();    //SET PG11 OUTPUT
     5     DS18B20_DQ_OUT=0; 
     6     delay_us(2);
     7     DS18B20_DQ_OUT=1; 
     8     DS18B20_IO_IN();    //SET PG11 INPUT
     9     delay_us(12);
    10     if(DS18B20_DQ_IN)data=1;
    11     else data=0;     
    12     delay_us(50);           
    13     return data;
    14 }
  • 相关阅读:
    对图像边缘进行随机均匀采样的C#算法实现
    [淡藤]最近几年在Chinapub上买的书
    重新认识C#: 玩转指针
    又是一年春来到
    需求定律在起着作用
    haha, 愚人节听鱼人歌
    名字就叫奥格工作室!
    effective c++ 第六章
    com 名字对象(1)IBindCtx
    com 名字对象(2)创建名字对象(IMoniker)
  • 原文地址:https://www.cnblogs.com/zengsf/p/7537925.html
Copyright © 2011-2022 走看看