ds18b20读写
时间:10-02
整理:3721RD
点击:
用arm系统写了几天ds18b20的程序代码,最后仿真的时候没有温度显示,经过检测后觉得是对ds18b20的读写程序有问题,请问有人能帮忙解决下么void write_ds18b20(uint8 dat) //写数据
{
uint8 i;
IO0DIR|=DQ;
for(i=0;i<8;i++)
{
IO0CLR|=DQ;
delay_us(2);
if(dat&0x01)
{
IO0SET|=DQ;
delay_us(10);
} else
{
IO0CLR|=DQ;
delay_us(10);
}
delay_us(3);
dat=dat>>1;
}
IO0SET|=DQ;
}
uint8 read_ds18b20() //读数据
{
uint i=0,readat=0;
for(i=0;i<8;i++)
{
IO0DIR|=DQ;
IO0CLR|=DQ;
delay2us; //1us
readat>>=1;
IO0SET|=DQ; //置高
IO0DIR&=(~DQ); //设置端口输入,让ds18b20将数据传输到总线上
if(IO0PIN&DQ) readat|=0x80; //主机开始采样
delay_us(12);
}
return readat;
}
{
uint8 i;
IO0DIR|=DQ;
for(i=0;i<8;i++)
{
IO0CLR|=DQ;
delay_us(2);
if(dat&0x01)
{
IO0SET|=DQ;
delay_us(10);
} else
{
IO0CLR|=DQ;
delay_us(10);
}
delay_us(3);
dat=dat>>1;
}
IO0SET|=DQ;
}
uint8 read_ds18b20() //读数据
{
uint i=0,readat=0;
for(i=0;i<8;i++)
{
IO0DIR|=DQ;
IO0CLR|=DQ;
delay2us; //1us
readat>>=1;
IO0SET|=DQ; //置高
IO0DIR&=(~DQ); //设置端口输入,让ds18b20将数据传输到总线上
if(IO0PIN&DQ) readat|=0x80; //主机开始采样
delay_us(12);
}
return readat;
}
是这样,对DS18B20 出现的问题,最关键的就是延时 ,所以,我建议,好好查查 延时到底是多少,需要符合数据手册上的
