* @retval None
* @author PWH
* @date 2022/10
*/
static bool DS18B20_Online_Check(PORT_TypeDef PORTx, PIN_TypeDef PINx)
{
uint32_t wait = 0;
DS18B20\_PIN\_MODE\_OUT(PORTx, PINx);
PORT\_SetBit(PORTx, PINx);
DELAY\_US(10);
PORT\_ClrBit(PORTx, PINx);
DELAY\_US(700);
PORT\_SetBit(PORTx, PINx);
DS18B20\_PIN\_MODE\_IN(PORTx, PINx);
DELAY\_US(30);
if (!DS18B20\_PIN\_GET(PORTx, PINx)) //有应答
{
UserTimer\_Reset(&wait);
while (!DS18B20\_PIN\_GET(PORTx, PINx) && UserTimer\_Read(&wait) < 2); //等待应答信号结束,最长等待1~2ms
if (DS18B20\_PIN\_GET(PORTx, PINx))
return true;
else
return false;
}
else
{
return false;
}
}
/**
* @brief
* @note
* @param None
* @retval None
* @author PWH
* @date 2022/10
*/
static void DS18B20_Write(PORT_TypeDef PORTx, PIN_TypeDef PINx, uint8_t val)
{
uint8_t i;
DS18B20\_PIN\_MODE\_OUT(PORTx, PINx);
PORT\_SetBit(PORTx, PINx);
for (i = 0; i < 8; i++)
{
PORT\_SetBit(PORTx, PINx);
DELAY\_US(4);
PORT\_ClrBit(PORTx, PINx);
DELAY\_US(1);
if (val & 0x01)
PORT\_SetBit(PORTx, PINx);
else
PORT\_ClrBit(PORTx, PINx);
DELAY\_US(66);
val >>= 1;
}
PORT\_SetBit(PORTx, PINx);
}
/**
* @brief 读2个bit
* @note
* @param None
* @retval None
* @author PWH
* @date 2022/10
*/
static uint8_t DS18B20_Read2Bit(PORT_TypeDef PORTx, PIN_TypeDef PINx)
{
uint8_t i;
uint8_t val = 0;
DS18B20\_PIN\_MODE\_OUT(PORTx, PINx);
PORT\_SetBit(PORTx, PINx);
for (i = 0; i < 2; i++)
{
val <<= 1;
DS18B20\_PIN\_MODE\_OUT(PORTx, PINx);
PORT\_SetBit(PORTx, PINx);
DELAY\_US(4);
PORT\_ClrBit(PORTx, PINx);
DELAY\_US(1);
PORT\_SetBit(PORTx, PINx);
DS18B20\_PIN\_MODE\_IN(PORTx, PINx);
DELAY\_US(5);
if (DS18B20\_PIN\_GET(PORTx, PINx))
val |= 0x01;
DELAY\_US(60);
}
DS18B20\_PIN\_MODE\_OUT(PORTx, PINx);
PORT\_SetBit(PORTx, PINx);
return val;
}
/**
* @brief
* @note
* @param None