给你写的launchpad430--18B20--系列1

技术说明

18B20的管脚及封装入下图所示:

注意:BOTTOM VIEW 表示从底部向上看!!!

1-Wire总线

  • 复位时序

/****************************************************************************
* 名    称:unsigned char DS18B20_Init(void)
* 功    能:对DS18B20进行初始化
* 入口参数:
* 出口参数:
* 说    明: 
****************************************************************************/
unsigned char DS18B20_Init(void)
{
  unsigned char result;
  DQ_OUT;
  DQ_L;   
  delay_us(500);   //总线拉低480us~960us,即主机发送复位脉冲
  DQ_IN;           //总线设为输入状态,等待18b20应答
  delay_us(60);   
  result=DQ_DATE;  //读取18b20应答信号
  delay_us(500);   //等待480us以上,保证总线释放
  return(result);  //返回0则初始化成功 
}

我们根据时序分析程序,有时序图可知,黑色实线是MCU的输出;灰色实线是DS18B20的输出。

在初始化阶段,首先由MCU发送一个大于480us的低电平,在DS18B20接收到此低电平约15~60us的时候,

就会返回一个60~240us的低电平,此时我们检测DS18B20的管脚,若是低电平表示初始化成功!!

  • 写时序

/****************************************************************************
* 名    称:void DS18B20_WriteBit(unsigned char Data)
* 功    能:给DS18B20单总线上写1Bit数
* 入口参数:
* 出口参数:
* 说    明: 
****************************************************************************/
void DS18B20_WriteBit(unsigned char Data)
{
  DQ_OUT;           //设置总线为输出
  DQ_L;             //产生写起始信号
  delay_us(15);     //15us后写入数据    
  if(Data) DQ_H; 
  else     DQ_L; 
  delay_us(60);     //延时60us~120us,保证总线释放
  DQ_IN;            //空闲状态总线保持输入状态
}

对照时序图,无论写‘1’还是‘0’,首先都有应该发送一个15us的低电平,然后根据写‘1’、‘0’置低/拉高电平并维持时间大于45us就行了!
  • 读时序

/****************************************************************************
* 名    称:unsigned char DS18B20_ReadBit(void)
* 功    能:从DS18B20单总线上读1Bit数
* 入口参数:
* 出口参数:
* 说    明: 
****************************************************************************/
unsigned char DS18B20_ReadBit(void)
{
  unsigned char result;
  DQ_OUT;     //设置总线为输出状态
  DQ_L;       //总线拉低,产生读起始信号
  _NOP();     //保证低电平在1us以上
              //15us内读取总线上数据
  DQ_IN;
  result=DQ_DATE;   //接收数据
  delay_us(60);     //延时60us,保证总线释放
  return(result);   //返回数据
}
对照时序图,无论是读‘1’还是‘0’,首先都有一个大于1us的低电平,然后18B20返回一个小于15us的低电平或者高电平分别代表
‘0’或者‘1’。
经过以上的分析,我们很容易就可以写出发送、接收一个字节的函数。
/****************************************************************************
* 名    称:unsigned char DS18B20_ReadByte(void)
* 功    能:从DS18B20单总线上读1Byte数
* 入口参数:
* 出口参数:
* 说    明: 
****************************************************************************/
unsigned char DS18B20_ReadByte(void)
{
  unsigned char i,result=0;
  for(i=0;i<8;i++)
  {
    result>>=1;
    if(DS18B20_ReadBit())  result|=0x80;
    else                   result&=0x7f;
  }
  return(result); 
}
/****************************************************************************
* 名    称:void DS18B20_WriteByte(unsigned char Data)
* 功    能:给DS18B20单总线上写1Byte数
* 入口参数:
* 出口参数:
* 说    明: 
****************************************************************************/
void DS18B20_WriteByte(unsigned char Data)
{
  unsigned char i;
  for(i=0;i<8;i++)
  {
    DS18B20_WriteBit(Data&0x01);
    Data>>=1;
  } 
}
18B20操作说明

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值