⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds18b.c

📁 ucosucos系统资料
💻 C
字号:
//ds18.c
#include<ds18b20.h>
#define NNOP_1uS  _NOP();_NOP();_NOP();_NOP();_NOP();_NOP();
unsigned char temp1[8];
void Delay10us(unsigned int n) 
{ 
while(n--) 
{ 


} 
} 

void delay(word useconds)
{
  
     for(;useconds>0;useconds--);
}


byte ow_reset(void )
{
     byte presence;
     P2DIR|=DQ;
      
     P2OUT&=~DQ;
     
   delay(900);          //480us
     P2OUT|=DQ;
    
     
     
     delay(4); 
   
      
           
                
   P2DIR&=~DQ;
      
     if((P2IN&DQ)==DQ)
     {
        presence=1;
     
     }
        else
        {
         presence=0;
        }
     delay(25);
     return presence;
}
void write_bit(unsigned char bitval)
{      
         P2DIR|=DQ;
          
           
          P2OUT&=~DQ;
           
         if((bitval&0x01)==1)
          {
             P2OUT|=DQ;
          }
           else
            P2OUT&=~(DQ);
            delay(20); 
         // P2OUT|=DQ;
           
         P2DIR&=~(DQ);
        delay(25);
          
}
unsigned char read_bit()

{
  byte i;
     byte value=0;
     for(i=2;i>0;i--)
     {
           value<<=1;
         //DQ=read_bit();
          P2DIR|=DQ;
           //P2OUT|=DQ;
          
        
          P2OUT&=~DQ;
        
            P2DIR&=~DQ;
         
       
          
          if((P2IN&DQ)==DQ)
               value|=0x01;
          delay(6);        
     }
     
     delay(25);
     return value;
          
}

byte read_byte(void)
{
     byte i;
     byte value=0;
     for(i=8;i>0;i--)
     {
          value>>=1;
         //DQ=read_bit();
          P2DIR|=DQ;
           //P2OUT|=DQ;
          _NOP();
          _NOP();
          _NOP();
          _NOP();
        
          P2OUT&=~DQ;
        
            P2DIR&=~DQ;
         _NOP();
       
         
       
          
          if((P2IN&DQ)==DQ)
               value|=0x80;
          delay(1);         
     } 
     delay(25);
     return value;
}
void write_byte(unsigned char val)
{
     byte i;
     for(i=8;i>0;i--)
     {
          P2DIR|=DQ;
          P2OUT&=~DQ;
           
         if((val&0x01)==1)
          {
             P2OUT|=DQ;
          }
           else
            P2OUT&=~(DQ);
            delay(20); 
         // P2OUT|=DQ;
         P2DIR&=~(DQ);
          val=val/2;
         
              
        
                  
     }
     delay(15);
}
int  Read_Temperature_jd(unsigned char *id)
{
     byte h,l;
     word t;
_DINT();
     ow_reset();
     /*write_byte(0x55);
     for(j=0;j<8;j++)
       {
        write_byte(*id++);
       }
id=id-8;*/

   write_byte(0xcc);   
     write_byte(0xbe);
     l=read_byte();
     h=read_byte();
     t=h;
     t<<=8;
     t+=l;

     
   /* delay(3000);
     delay(3000);
     delay(3000);
     delay(3000);
     delay(3000);
     delay(3000);
     delay(3000);
     delay(3000);*/
    ow_reset();
    /* write_byte(0x55);
  for(j=0;j<8;j++)
       {
        write_byte(*id++);
        }
id=id-8;*/
      
     
write_byte(0xcc);  
     write_byte(0x44);
_EINT();
     return t;
}
int  Read_Temperature(unsigned char *id)
{
     byte h,l,j,cpu_sr;
     word t;
OS_ENTER_CRITICAL();
        ow_reset();
        write_byte(0x55);
     for(j=0;j<8;j++)
       {
        write_byte(*id++);
       }
      id=id-8;
     write_byte(0x44);
      OSTimeDly(200);  
        ow_reset();
         write_byte(0x55);
     for(j=0;j<8;j++)
       {
        write_byte(*id++);
       }   
     id=id-8;
     write_byte(0xbe);
     l=read_byte();
     h=read_byte();
     t=h;
     t<<=8;
     t+=l;
    
     
       OS_EXIT_CRITICAL();
     return t;
}

int  Read_ZC(void)
{
    unsigned char i;
    
    

p_zc=zc;
   _DINT();
     ow_reset();
     write_byte(0xcc);
     write_byte(0xbe);
    
     for(i=0;i<8;i++)
    {
      
      *p_zc++=read_byte();
      
     
     
    }
    p_zc=zc;
     ow_reset();
_EINT();
    
     return (0);
}
unsigned char DS18b20_search_rom(unsigned char *id)
{
  unsigned char j,k,i; 


  union myb{
   struct b20_b
   {
    unsigned char b1:1;
    unsigned char b2:1;
   
   }b;
     unsigned char B;
           }myb1;
    //p_zc=zc;
  _DINT();
   if(ow_reset())return(2);
    _NOP();
_NOP();
 _NOP();
   write_byte(0xf0);
  
  for(j=8;j>0;j--)
   { 
    for(i=8;i>0;i--)
     {
  
   myb1.B=read_bit();
   
switch(myb1.B)
    {
     //case 0:write_bit(q);q>>=1;break;
     case 0:
             if((j*8-i)<*p_key)
             {
             write_bit(1);
             *p_key=j*8-i;
             
             k>>=1;
             k|=0x80;
              }    
            else 
            {
            write_bit(0);
            k>>=1;
            
            }
           *p_key++;
            break;
        /* case 0:
               write_bit(diff);
               k>>1;
               if(diff&0x01)
                k|=0x08
               diff>>1;
               break;*/
       
    case 1:write_bit(0);break;
     case 2:write_bit(1);break;
     case 3:_EINT();return err;
    }
   
   if(myb1.B!=0)
      {
       k>>=1;
      if(myb1.b.b2==1)
      k|=0x80;
      }

        }//for(i=0;i<8;i++)
      *id++=k;
   }//for(j=0;j<8;j++)
   p_key=key;
   _EINT();
return (4);
}
void search_rom()
{
  unsigned char T1;
 
T1=DS18b20_search_rom(ID4);
if(T1==2)
{
dis_str(4,1,"123");
}

if(key[1]!=0xff)
  {
   key[0]=0xff; 
dis_str(2,8,"ok"); 
  }

T1=DS18b20_search_rom(ID3);

if(key[1]==0xff)
  {
  dis_str(1,8,"err"); 
  }


T1=DS18b20_search_rom(ID2);

}
int  Read_ID(void)
{
    unsigned char i;
    
  

p_zc=zc;
   _DINT();
     ow_reset();
     write_byte(0x33);
     
    
     for(i=0;i<8;i++)
    {
      
      *p_zc++=read_byte();
      
     
     
    }
    
     ow_reset();
_EINT();
    
     return (0);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -