基于K60的DS18B20的读取

#define DQ_IO_LOW() gpio_set   (PTA8,0)
#define DQ_IO_HIGH() gpio_set  (PTA8,1)
#define DQ_IO_GET    gpio_get (PTA8)
#define DQ_get_IO()  gpio_ddr  (PTA8,GPI)
#define DQ_put_IO()  gpio_ddr  (PTA8,GPO)

void ds1820rst()/*ds1820复位*/

{
  char presence=1;
  while(presence)
   {
  DQ_put_IO();
  DQ_IO_HIGH();         //DQ复位
  pit_delay_us(PIT1,10);  //延时
  DQ_IO_LOW();          //DQ拉低
  pit_delay_us(PIT1,500); //精确延时大于480us
  DQ_IO_HIGH();          //拉高
  pit_delay_us(PIT1,50);
  DQ_get_IO();
  presence=DQ_IO_GET;
   }
  pit_delay_us(PIT1,500);
  DQ_put_IO();
  DQ_IO_HIGH();         //DQ复位
}
unsigned char ds1820rd()/*读数据*/
{
  unsigned char i=0;
  unsigned char dat = 0;


  for (i=8;i>0;i--)
  {
    DQ_put_IO();
    DQ_IO_HIGH();  //给脉冲信号
    pit_delay_us(PIT1,2);
    dat>>=1;
    DQ_IO_LOW();  //给脉冲信号
    pit_delay_us(PIT1,4);
    DQ_IO_HIGH();  //给脉冲信号
    pit_delay_us(PIT1,4);
    DQ_get_IO();
    if(DQ_IO_GET)
      dat|=0x80;
    pit_delay_us(PIT1,66);
  }
  DQ_put_IO();
  DQ_IO_HIGH();  //给脉冲信号
  return(dat);
}
void ds1820wr(unsigned char wdata)/*写数据*/
{
  unsigned char i=0;
  DQ_put_IO();


  for (i=8; i>0; i--)
  {
    DQ_IO_HIGH();
    pit_delay_us(PIT1,2);
    DQ_IO_LOW();
    pit_delay_us(PIT1,5);
    gpio_set(PTA8,wdata&0x01);
    pit_delay_us(PIT1,66);
    wdata>>=1;
  }
   DQ_IO_HIGH();
}
int read_temp()/*读取温度值并转换*/
{
  unsigned char a,b;
  float t;
  value1=0;
  ds1820rst();
  pit_delay_us(PIT1,2000);
  ds1820wr(0xcc);//*跳过读序列号*/
  ds1820wr(0x44);//*启动温度转换*/
  ds1820rst();
  ds1820wr(0xcc);//*跳过读序列号*/
  ds1820wr(0xbe);//*读取温度*/
  a=ds1820rd();
  b=ds1820rd();
  value=b;
  value<<=8;
  value=value|a;
  if(value>6348)
    value=65536-value;
  t=value*(0.0625)+0.5;
  temperature=t;
//  value=(unsigned int)(value*(0.625));
//  printf("水温值    %d.%d\n",value/10,value%100);
  return((int)(t*100));
  }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值