示例#1
0
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
}
示例#2
0
static void ds1820_convert(void){
    int code = 0;
    portENTER_CRITICAL();
    code = ds1820_reset();
    if (code!= NO_ERROR)
      ds1820_error(code);

    ds1820_write_byte(SKIP_ROM); 
    ds1820_write_byte(CONVERT_TEMP);
    ds1820_reset();
    portEXIT_CRITICAL();
    DQ_IN();
       
}
示例#3
0
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;
}
示例#4
0
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; 
}
示例#5
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);
    
}
示例#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;
    
          
    
}