_nop_();
_nop_();
if(ds==0)
flag=1; //detect 18b20 success else
flag=0; //detect 18b20 fail
TempDelay(20); //存在检测低电平时间:60~240us,所以延时约140us
_nop_();
_nop_();
ds=1; //再次拉高总线,让总线处于空闲状态
}
bit ds_read_bit(void) //读一位 {
bit dat;
ds=0; //单片机(微处理器)将总线拉低
_nop_(); //读时隙起始于微处理器将总线拉低至少1us
ds=1; //拉低总线后接着释放总线,让从机18b20能够接管总线,输出有效数据
_nop_();
_nop_(); //小延时一下,读取18b20上的数据 ,因为从ds18b20上
输出的数据
//在读\时间隙\下降沿出现15us内有效
dat=ds; //主机读从机18b20输出的数据,这些数据在读时隙的下降沿出现//15us内有效
TempDelay(10); //所有读\时间隙\必须60~120us,这里77us
return(dat); //返回有效数据 }
uchar ds_read_byte(void ) //读一字节 {
uchar value,i,j;
value=0; //一定别忘了给初值
for(i=0;i<8;i++)
{
j=ds_read_bit();
value=(j<<7)|(value>>1); //这一步的说明在一个word文档里面 }
return(value); //返回一个字节的数据 }
void ds_write_byte(uchar dat) //写一个字节 {
uchar i;
bit onebit; //一定不要忘了,onebit是一位
for(i=1;i<=8;i++)