|
发表于 2012-9-12 00:22:15
|
显示全部楼层
今天得到了别人的帮助 我来也帮助一下别人
//复位DS18B20,并检测设备是否存在
void DS18B20_Reset()
{
BYTE DN=0;
BYTE CCY = 1;
BYTE TR = app_real.Temp_Data[0] & 0xF0;
while (CCY)
{
DQ = 0; //送出低电平复位信号
DelayXus(240); //延时至少480us
DelayXus(240);
DQ = 1; //释放数据线
DelayXus(60); //等待60us
CCY = DQ; //检测存在脉冲
if(!CCY){
if(TR) //如果上次是DS18B20 ERR 后来又插入DS18B20
mark.SYS_PWR_Start=0x0; //放弃恢复后的第一次转换
app_real.Temp_Data[0] &= 0x0F;
}
DelayXus(240); //等待设备释放数据线
DelayXus(180);
if(DN++>128){ //只检测128次,若不加此判断,如果未接DS18B20,则程序会死循环于此
app_real.Temp_Data[0] |= 0x10; //DS18B20 ERR
CCY=0;
}
}
}
注意 (DN++>128) 只检测N多次啊 否则在没有插入DS18B20传感器 或者传感器失效的情况 系统别的外设 别想工作了啊 |
|