18B20详细介绍及程序 下载本文

_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++)