⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds18b20.txt

📁 I-WIRE协议的DS18B20程序,用于温度测量
💻 TXT
字号:
/*================================================================
* 函 数 名: uchar read_ds18b20(void )
* 参 数: 无
* 功能描述: 读ds18b20 读一个字节操作
* 返 回 值: 无
================================================================*/
uchar read_ds18b20(void )
{
  idata uchar i,j,k;
  j=0;
  for(i=0;i<8;i++)
  {
    j=j>>1;
    ds_1820=0;
    k=1;
    k=1;
    k=1;
    k=1;
    ds_1820=1;
    k=1;
    k=1;
    k=1;
    k=1;
    if(ds_1820)
    {
      j=j | 0x80;
    }
    time(2);		//100US
  }
  return j;
}
/*================================================================
* 函 数 名:void write_ds18b20(uchar wdata)
* 参 数:   wdata
* 功能描述: 写ds1820
* 返 回 值:无
================================================================*/
void write_ds18b20(uchar wdata)
{
  idata uchar i,k;
  for(i=0;i<8;i++)
  {
    ds_1820=0;
    k=1;
    k=1;
    k=1;
    k=wdata & 1;		//低位在前
    if(k==1)
    {
      ds_1820=1;
    }
    else
    {
      ds_1820=0;
    }
    wdata=wdata>>1;
    time(1);		//50US
    ds_1820=1;
  }
}

/*================================================================
* 函 数 名:void reset_ds18b20(void )
* 参 数:   无
* 功能描述: 复位DS18B20
* 返 回 值:无
================================================================*/
void reset_ds18b20(void )
{
  ds_1820=0;
  time(10);		//复位脉冲至少480US
  ds_1820=1;
  time(5);		//从设备发送应答脉冲60-240US
}

/*================================================================
* 函 数 名:read_wendu()
* 参 数:   无
* 功能描述: 读取温度值
* 返 回 值:无
================================================================*/
void read_wendu(void )
{
  reset_ds18b20();		//初始化,所有通信都以初始化序列开始
  write_ds18b20(0xcc);		//直访ROM,发送功能命令前,必须送出合适的ROM命令
  write_ds18b20(0x44);		//温度转换
  reset_ds18b20();		//初始化
  write_ds18b20(0xcc);		//直访ROM
  write_ds18b20(0xbe);		//读取便栈寄存器,发出读数据命令后必须马上产生读时隙
  templ=read_ds18b20();		//读温度低位字节
  temph=read_ds18b20();		//读温度高位字节
  temp=temph*256+templ;		//temp是int型
  temperature=temp;
  if(temperature>0x8000)  //零下
  {
    polar=0;
    temperature=~temperature+1;		//补码转换为原码
  }
  else
  {
    polar=1;//零上
  }
  temperature=(temperature*5)/8;	//转换为十进制数据并放大十倍,先乘5再除8保证温度的精度
  if(temperature>999)			//使用默认分辨率12位,0.0625
  {
    temperature=999;			//DS1820温度范围是-55-----125
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -