コード例 #1
0
ファイル: DS18B20.c プロジェクト: meterhu/stm32F4
/*************************************************************************************************
 *
 *         函数名称: 
 *
 *         函数功能: 读18B20的一个字节
 *
 *         入口参数: 
 *
 *         出口参数: 无
 *
 *             说明:
 *
 *************************************************************************************************/
uint8_t DS18B20ReadByte (void)     
{
    
    uint8_t i;
    uint8_t u;
        

    for (u = 0, i = 0; i < 8; i++)
    {
    
         _D_DIS_INT(); ////
    
        DQ_OUT(0);
        DelayUS(10);   // <= 15
                    
        u >>= 1;
        
        DQ_OUT(1);    //////////////////// 
        
        DelayUS(5); 
              
        if (DQ_IN())
        {
            u |= 0x80;
        }
                
        _D_ENA_INT();  ////
        
        DelayUS(_DEBUG_R_TMPTR_TM_DLY);  /////40
        
        DQ_OUT(1);
        DelayUS(4);  
        
                
        
    }
    
    return(u);
    
}
コード例 #2
0
ファイル: DS18B20.c プロジェクト: meterhu/stm32F4
/*************************************************************************************************
 *
 *         函数名称: 
 *
 *         函数功能: 向18B20写入一个字节
 *
 *         入口参数: 
 *
 *         出口参数: 无
 *
 *             说明:
 *
 *************************************************************************************************/
void DS18B20WriteByte (uint8_t wr)  
{
    uint8_t i;
    

    for (i = 0; i < 8; i++)
    {  

        _D_DIS_INT();////
      

        DQ_OUT(0);
        
        DelayUS(10);   // <= 15
                        
        DQ_OUT(wr & 0x01);
        
        _D_ENA_INT();////
     
        
        DelayUS(20);   //延时 >15 us(写周期不少于15us) 
                    
        
        DQ_OUT(1);    
        
        
        wr >>= 1;
        
        DelayUS(4);   //延时 2 us 
               
    }
    
    DelayUS(2);
    
    
    
}
コード例 #3
0
ファイル: ds1820.c プロジェクト: vjval1974/Brew-Machine-MkIV
static void ds1820_write_bit(uint8_t bit){

    DQ_OUT();
    DQ_SET(); // make sure bus is high
    portENTER_CRITICAL();
    DQ_RESET(); // pull low for 2us
    delay_us(2);
    if (bit){
        DQ_IN();
    }
    else DQ_RESET();
    delay_us(60);
    portEXIT_CRITICAL();
    DQ_IN(); // return bus
}
コード例 #4
0
ファイル: ds1820.c プロジェクト: vjval1974/Brew-Machine-MkIV
static unsigned char ds1820_reset(void)
{
    portENTER_CRITICAL();
    DQ_OUT();
    DQ_SET();
    DQ_RESET();
    delay_us(500);
    DQ_IN();
    delay_us(60);
    if (DQ_READ()!= 0)
    {
        portEXIT_CRITICAL();
        return PRESENCE_ERROR;
    }
    portEXIT_CRITICAL();
    delay_us(240); 
    return NO_ERROR;
}
コード例 #5
0
ファイル: ds1820.c プロジェクト: vjval1974/Brew-Machine-MkIV
static uint8_t ds1820_read_bit(void){
    uint8_t bit;
    delay_us(1);
    DQ_OUT();
    DQ_SET(); // make sure bus is high
    portENTER_CRITICAL();
    DQ_RESET(); // pull low for 2us
    delay_us(1);
    DQ_IN(); // give bus back to DS1820;
    delay_us(5); 
    bit = DQ_READ();
    delay_us(56);
    //DQ_OUT();
    //DQ_SET();
    portEXIT_CRITICAL();
    if (bit) 
        return 1;
    else return 0; 
}
コード例 #6
0
ファイル: DS18B20.c プロジェクト: meterhu/stm32F4
/*************************************************************************************************
 *
 *         函数名称: 
 *
 *         函数功能: 18B20初始化
 *
 *         入口参数: 
 *
 *         出口参数: 无
 *
 *             说明:
 *
 *************************************************************************************************/
uint8_t Init18B20(void)
{
    
    //volatile  UINT32  in;
    ///volatile  UINT32  timer_us2;
    ///char  buff[20];
    volatile  uint32_t  TmptrIOTmOut = 0;
    

 
//      min-480us        |-------------------->min-480us<-------------------|
//      max-960us        |->15-60us<-|------->60-240us<--------|
//                        ___________
// |                     |           |                         |XXXXXXXXXXXX|      
// |_____________________|           |_________________________|XXXXXXXXXXXX|
    
    _D_DIS_INT();
    DQ_OUT(1);
    _NOP();
    _NOP(); 
      
    DQ_OUT(0);
    
    
    DelayUS(600);   //
    
    //切换到输入口, 外部上拉至高, 释放总线
    DQ_OUT(1);
    
    
    //以下操作由DS18B20引起
    ///BEGIN_TIMER_uS();
    
    TmptrIOTmOut = 0;
    
    while (DQ_IN())
    {
        TmptrIOTmOut++;
        if (TmptrIOTmOut++ > 4000)  //超时处理
        {
        	return FALSE_P;
        
        }        
        
    }
    

    ///timer_us1 = GET_TIMER_uS(); 
    
      
   /// BEGIN_TIMER_uS();
    TmptrIOTmOut = 0;       
    while (!DQ_IN())
    {
        if (TmptrIOTmOut++ > 4000)  //超时处理
        {
        	return FALSE_P;
        
        }    
        
    } 
    
    _D_ENA_INT();
   
    
    DelayUS(600);    //
    
    return 1;
    
          
    
}