ds1820.c

来自「CVAVR的函数库的源代码。开发AVR的编译器CodeVision AVR最新版」· C语言 代码 · 共 68 行

C
68
字号
/*
  CodeVisionAVR C Compiler
  (C) 1998-2005 Pavel Haiduc, HP InfoTech S.R.L.

  Dallas Semiconductor DS1820 1 Wire bus temperature sensor functions
*/

#include <delay.h>
#include <ds1820.h>

struct __ds1820_scratch_pad_struct __ds1820_scratch_pad;
       
unsigned char ds1820_select(unsigned char *addr)
{
unsigned char i;
if (w1_init()==0) return 0;
if (addr)
   {
   w1_write(0x55);
   i=0;
   do
     w1_write(*(addr++));
   while (++i<8);
   }
else w1_write(0xcc);
return 1;
}

unsigned char ds1820_read_spd(unsigned char *addr)
{
unsigned char i;
unsigned char *p;
if (ds1820_select(addr)==0) return 0;
w1_write(0xbe);
i=0;
p=(char *) &__ds1820_scratch_pad;
do
  *(p++)=w1_read();
while (++i<9);
return !w1_dow_crc8(&__ds1820_scratch_pad,9);
}

int ds1820_temperature_10(unsigned char *addr)
{
if (ds1820_select(addr)==0) return -9999;
w1_write(0x44);
delay_ms(550);
if (ds1820_read_spd(addr)==0) return -9999;
w1_init();
return (((int)__ds1820_scratch_pad.temp_msb<<8)|
       __ds1820_scratch_pad.temp_lsb)*5;
}

unsigned char ds1820_set_alarm(unsigned char *addr,signed char temp_low,signed char temp_high)
{
if (ds1820_select(addr)==0) return 0;
w1_write(0x4e);
w1_write(temp_high);
w1_write(temp_low);
if (ds1820_read_spd(addr)==0) return 0;
if ((__ds1820_scratch_pad.temp_low!=temp_low) ||
   (__ds1820_scratch_pad.temp_high!=temp_high)) return 0;
if (ds1820_select(addr)==0) return 0;
w1_write(0x48);
delay_ms(15);
return w1_init();
}

⌨️ 快捷键说明

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