永发信息网

DS18B20读取温度为0 初始化和读取程序部分如下:

答案:2  悬赏:10  手机版
解决时间 2021-04-16 00:10
  • 提问者网友:我一贱你就笑
  • 2021-04-15 08:52
//************************************
//初始化ds18b20
//************************************
bit resetpulse(void)
{
DQ=0;
delay(40);//延时500us
DQ=1;
delay(4);//延时60us
return(DQ);//读取P3.7的状态
}
void ds18b20_init(void)
{
while(1)
{
if(!resetpulse()) //收到ds18b20的应答信号
{
DQ=1;
delay(40);//延时240us
break;
}
else
resetpulse();//否则再发复位信号
}
}
//************************************
//读ds18b20一位
//************************************
uchar read_bit(void)
{
DQ=0;
_nop_();
_nop_();
DQ=1;
delay(2);
return(DQ);
}
//************************************
//读ds18b20一个字节
//************************************
uchar read_byte(void)
{
uchar i,m,receive_data;
m=1;
receive_data=0;
for(i=0;i<8;i++)
{
if(read_bit())
{
receive_data=receive_data+(m< }
delay(7);
}
return(receive_data);
}
//************************************
//向ds18b20写一位
//************************************
void write_bit(uchar bitval)
{
DQ=0;
if(bitval==1)
DQ=1;
delay(5);
DQ=1;
}
//************************************
//向DS18B20写一个字节命令
//************************************
void write_byte(uchar val)
{
uchar i,temp;
for(i=0;i<8;i++)
{
temp=val>>i;//将val右移i位赋值给temp
temp=temp&0x01;//取temp最低位
write_bit(temp);
delay(5);
}
}
//*************************************
//64位的ROM序列号匹配
//*************************************
bit match_rom(uchar *rom)
{
uchar i;
ds18b20_init();
write_byte(0x55);
for(i=8;i>0;i--)
{
write_byte(*(rom+i-1));
}
return 1;
}

补充:
//************************************
//延时程序
//************************************
void delay(unsigned int N)
{
unsigned int i;
for(i=0;i}
最佳答案
  • 五星知识达人网友:神的生死簿
  • 2021-04-15 10:12
读取部分有问题
全部回答
  • 1楼网友:街头电车
  • 2021-04-15 10:22
估计你的显示程序有错,你这里没给出,简单测试一下,把最后的 return(temp); 换为 return(25); 看看是不是还是0,是0的画就是你显示的错了
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯