📄 ds18b20驱动.h
字号:
/*****************************************
*微秒延时子程序
*****************************************/
void Delay_us(uchar Times)
{
for(;Times!=0;Times--)
{
_nop_();
}
}
sbit WD =P2^0;
/*******************************************************************************************
** 函数名称: resetDS18B20
** 功能描述: DS18B20初始化
*******************************************************************************************/
void resetDS18B20(void)
{
unsigned char errTime;
while(1)
{
WD=1;
errTime=0;
WD=0;
Delay_us(142); //250us
Delay_us(142); //250us复位低电平480us~960us
WD=1;
while(WD)
{
Delay_us(2);//延时5us
errTime++;
if(errTime>20)
{
Error_Alarm(TempResError);
continue;
}
}
errTime=0;
while(!WD)
{
Delay_us(5);//延时10us
errTime++;
if(errTime>30)
{
Error_Alarm(TempResError);
break;
}
}
break;
}
}
/*******************************************************************************************
** 函数名称: readByteDS18B20(void)
** 功能描述: 读DS18B20一个字节
*******************************************************************************************/
unsigned char readByteDS18B20(void)
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
{
WD = 0; // 给脉冲信号
dat>>=1;
WD = 1; // 给脉冲信号
if(WD)
dat|=0x80;
Delay_us(16); //延时30us
}
return(dat);
}
/*******************************************************************************************
** 函数名称: writeByteDS18B20
** 功能描述: 写DS18B20一个字节
*******************************************************************************************/
void writeByteDS18B20(unsigned char wb)
{
unsigned char i;
for (i=8;i>0;i--)
{
WD = 0;
WD = wb&0x01;
Delay_us(24); //延时45us
WD = 1;
wb>>=1;
}
}
/*******************************************************************************************
** 函数名称: readTempDS18B20(void)
** 功能描述: 读DS18B20温度
*******************************************************************************************/
void StartTemShift(void)
{
resetDS18B20();
writeByteDS18B20(0xcc); //跳过ROM
writeByteDS18B20(0x44); /*启动温度转换*/
}
/*******************************************************************************************
** 函数名称: readTempDS18B20(void)
** 功能描述: 读DS18B20温度
*******************************************************************************************/
unsigned int readTempDS18B20(void)
{
unsigned char tempL,tempH;
unsigned int Temp;
resetDS18B20();
writeByteDS18B20(0xcc); //跳过ROM
writeByteDS18B20(0xbe); //读数据
tempL=readByteDS18B20();
tempH=readByteDS18B20();
Temp=(tempH<<8)|tempL;
StartTemShift();//启动温度转换
return(Temp);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -