本帖最后由 xyp749192072 于 2010-5-2 13:57 编辑
uchar reset()
{ uchar flag,i;
lo=1;
lo=0;
for(i=200;i>0;i--); //延时 802 us time=1+2*i
for(i=200;i>0;i--);
lo=1;
for(i=120;i>0;i--);// 延时 201 us
flag=lo;
for(i=160;i>0;i--)// 延时 321 us 满足 最小周期
return flag;
}
void write_bit(uchar wei)
{
uchar i;
_nop_(); //连续写之间最少1us回复时间
lo=1;
lo=0; //写时间隙
_nop_();
_nop_(); //拉低至少1us
lo=wei; //向数据线写数据
for( i=30;i>0;i--);//满足最小、最大写周期
}
uchar read_bit()
{
uchar flag,i;
_nop_(); //连续读之间至少1us的回复时间
lo=1;
lo=0; //读时间隙
_nop_();
_nop_();
lo=1; //释放数据线,写数据
for(i=3;i>0;i--); //延时几us,使数据稳定
flag=lo; //向数据线写数据
for(i=30;i>0;i--); //延时 满足最小读周期
return flag;
}
void write_byte(uchar date)
{ uchar i,kk;
for(i=0;i<8;i++)
{
kk=(date>>i)&0x01;
write_bit(kk);
}
}
uchar read_byte()
{
uchar i,kk;
kk=0;
for(i=0;i<8;i++)
kk=kk+(read_bit()<<i);
return kk;
void main()
{
while(1)
{
reset() ; //总线复位
write_byte(jump_ROM); //跳跃命令
write_byte(start); //启动温度转换
reset(); //总线复位
write_byte(jump_ROM); //跳跃命令
write_byte(read_EEROM); //读命令
TMPL = read_byte(); //温度低字节
TMPH = read_byte(); //高字节
temp = TMPH; //不考虑零下温度
temp <<= 8;
temp = temp | TMPL;
temp = TMPL / 16 + TMPH * 16;
display(temp);//显示温度
}
}
问题:芯片资料说DS18B20写时间隙为60~120us,那读时间隙呢,最小60us,最大有限制吗? |