Exemple #1
0
//写一个字节到DS18B20
//dat:要写入的字节
void DS18B20_Write_Byte(u8 dat)     
 {             
    u8 j;
    u8 testb;
	DS18B20_IO_OUT();//SET PA0 OUTPUT;
    for (j=1;j<=8;j++) 
	{
        testb=dat&0x01;
        dat=dat>>1;
        if (testb) 
        {
            DS18B20_DQ_OUT=0;// Write 1
            wait_us(2);                            
            DS18B20_DQ_OUT=1;
            wait_us(60);             
        }
        else 
        {
            DS18B20_DQ_OUT=0;// Write 0
            wait_us(60);             
            DS18B20_DQ_OUT=1;
            wait_us(2);                          
        }
    }
}
u8 DS18B20_Read_Bit(void)                      // read one bit

{

    u8 data;

       DS18B20_IO_OUT();//SET PA0 OUTPUT		//wl

    DS18B20_DQ_OUT=0;

       delay_us(2);

    DS18B20_DQ_OUT=1;

       DS18B20_IO_IN();//SET PA0 INPUT			//wl

       delay_us(12);

       if(DS18B20_DQ_IN)
	   
	   data=1;

    else data=0;   

    delay_us(50);          

    return data;

}
Exemple #3
0
//复位DS18B20
void DS18B20_Rst(void)	   
{                 
		DS18B20_IO_OUT(); //SET PA0 OUTPUT
    DS18B20_DQ_OUT=0; //拉低DQ
    wait_us(750);    //拉低750us
    DS18B20_DQ_OUT=1; //DQ=1 
		wait_us(15);     //15US
}
Exemple #4
0
void DS18B20_Rst(void)	   
{              
	DS18B20_IO_OUT(); //SET PA0 OUTPUT
    DS18B20_DQ_OUT=0; //set low DQ
    delay_us(550);    //for750us
    DS18B20_DQ_OUT=1; //DQ=1 
	delay_us(15);     //15US
}
Exemple #5
0
void OWWrite_bit(u8 v)
{
	if (v & 1) {
		
		DS18B20_IO_OUT();//SET PA0 OUTPUT
		DS18B20_DQ_OUT=0;
		delay_us(10);
		DS18B20_DQ_OUT=1;
		delay_us(55);
	} else {
		
		DS18B20_IO_OUT();//SET PA0 OUTPUT
		DS18B20_DQ_OUT=0;
		delay_us(65);
		DS18B20_DQ_OUT=1;
		delay_us(5);
	}
}
//从DS18B20读取一个位
//返回值:1/0
uint8_t DS18B20_Read_Bit(void) 			 // read one bit
{
    uint8_t data;
	DS18B20_IO_OUT();//SET PA0 OUTPUT
    DS18B20_DQ_OUT=0; 
	wait_us(2);
    DS18B20_DQ_OUT=1; 
	DS18B20_IO_IN();//SET PA0 INPUT
	wait_us(12);
	if(DS18B20_DQ_IN)data=1;
    else data=0;	 
    wait_us(50);           
    return data;
}
u8 DS18B20_Init(void)

{

       RCC->APB2ENR|=1<<2;    //使能PORTA口时钟		//wl

       DS18B20_IO_OUT();//PORTA.0 推挽输出		   	//wl

       GPIOA->ODR|=1;      //输出1				//wl

       DS18B20_Rst();

       return DS18B20_Check();

} 
void DS18B20_Rst(void)        

{                

    DS18B20_IO_OUT();   //SET PA0 OUTPUT					//wl

    DS18B20_DQ_OUT=0; //拉低DQ								//wl

    delay_us(750);                  //拉低750us				 //wl

    DS18B20_DQ_OUT=1; //DQ=1							 //wl

       delay_us(15);                   //15US			   //wl

}
Exemple #9
0
void DS18B20_Write_Addr(u32 dath,u32 datl)     
 {             
    
	u8 j;
    u8 testb;
	DS18B20_IO_OUT();//SET PA0 OUTPUT;

    for (j=1;j<=32;j++) 
	{
        testb=dath&0x01;
        dath=dath>>1;
        if (testb) 
        {
            DS18B20_DQ_OUT=0;// Write 1
            delay_us(2);                            
            DS18B20_DQ_OUT=1;
            delay_us(60);             
        }
        else 
        {
            DS18B20_DQ_OUT=0;// Write 0
            delay_us(60);             
            DS18B20_DQ_OUT=1;
            delay_us(2);                          
        }
    }
	for (j=1;j<=32;j++) 
	{
        testb=datl&0x01;
        datl=datl>>1;
        if (testb) 
        {
            DS18B20_DQ_OUT=0;// Write 1
            delay_us(2);                            
            DS18B20_DQ_OUT=1;
            delay_us(60);             
        }
        else 
        {
            DS18B20_DQ_OUT=0;// Write 0
            delay_us(60);             
            DS18B20_DQ_OUT=1;
            delay_us(2);                          
        }
    }
}