当前位置:文档之家› DS18B20操作时序详解

DS18B20操作时序详解

1.DS18B20复位程序分析
单片机发送复位脉冲低电平保持至少480us 释放总线进入接收状态,等待15us-60us DS18B20发出存在脉冲脉冲持续60-240us void reset()
{
uint i;//i 定义为uchar型
ds=0;
i=103;
while(i>0)i--;
ds=1;
while(i>0)i--;//在这里不做存在检测
}
2.DS18B20写程序
时序分析:
单片机由高电平拉低至低电平产生写时间隙
15us之后就需要将所需要写的位送到总线上面
DS18B20在开始之后的15-60us内对总线进行采样(注意采样时间)uint dswrite(uchar dat)
{
uchar i;
uint j;
sbit tempbyte;
for(i=0;i<8;i++)
{
tempbyte=dat&0x01;
dat>>=1;//从最低位开始每一位送到tempbyte临时位
//总线拉低为低电平
if(tempbyte)//写1
{
ds=0;
j++;
j++;//延时个13us
ds=1;
j=8;
while(j>0)j--//延时个71us
}
else
{
ds=0;
j=8;
while(j>0)j--;
ds=1;
j++;j++;//保证大于1us-
}
}
}
3.DS18B20读时序
时序分析
单片机从高电平拉低至低电平
低电平保持4us后将总线拉高产生读时间隙
读时间在4us后到15us之前(注意一定在15us之前)读时间才有效从拉低总线60us-120us之间释放总线(注意是在这个时间间隙之间,严格按照时序操作)
bit tempbit()
{
uint j;
bit dat;
ds=0;
j++;//延时个4us
ds=1;
j++;j++;//仿真结果在8.86us左右
dat=ds;//确保在15us之前
j=8;
while(j>0)j--;
ds=1;
return dat;
}
uchar dsread()//用uchar 来装读到的数据足够
{
uchar i,j,dat;
for(i=0;i<8;i++)
{
j=tempbit();
dat=(j<<7)|(dat>>1);//因为首先读到是低位的数据,后面读的数据加到高位,并依
//此往低位挪动}
return dat;
}。

相关主题