当前位置:我的异常网» 其他开发语言 » 高人看看,单片机C程序,温度值读不进去咋回事
高人看看,单片机C程序,温度值读不进去咋回事(3)
www.myexceptions.net 网友分享于:2013-12-29 浏览:10次
{
unsigned char x=0;
DQ = 1; //DQ复位
delay_18B20(4); //延时
DQ = 0; //DQ拉低
delay_18B20(100); //精确延时大于480us
DQ = 1; //拉高
delay_18B20(40);
}
uchar ds1820rd()/*读数据*/
{
unsigned char i=0;
unsigned char datb = 0;
for (i=8;i>0;i--)
{
DQ = 0; //给脉冲信号
datb>>=1;
DQ = 1; //给脉冲信号
if(DQ)
datb|=0x80;
delay_18B20(10);
}
return(datb);
}
/*************************************************************************************
/DS18B20写字节函数
*************************************************************************************/
void ds1820wr(uchar wdata)
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = wdata&0x01;
delay_18B20(10);
DQ = 1;
wdata>>=1;
}
}
/*************************************************************************************
/DS18B20读字节函数
*************************************************************************************/
read_temp()
{
uchar a,b;
ds1820rst();
ds1820wr(0xcc); //*跳过读序列号*/
ds1820wr(0x44); //*启动温度转换*/
ds1820rst();
ds1820wr(0xcc); //*跳过读序列号*/
ds1820wr(0xbe); //*读取温度*/
a=ds1820rd();
b=ds1820rd();
tvalue=b;
tvalue<<=8;
tvalue=tvalue|a;
if(tvalue<0x0fff)
tflag=0;
else
{
tvalue=~tvalue+1;
tflag=1;
}
tvalue=tvalue*(0.625); //温度值扩大10倍,精确到1位小数
return(tvalue);
}
/*************************************************************************************
/DS18B20读温度函数
*************************************************************************************/
/*void ds1820disp() //温度值显示
文章评论