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

📄 ds1820.c

📁 Wind sensor for control speed air flow.
💻 C
字号:
/*************************************************
  DS18S20 Module
*************************************************/
#include <iom8.h>
#include "DS1820.h"
#include "hard.h"

ds1820_t scratchPad;
//=========== ASM Function declaration ==========
unsigned char w1_dow_crc8(unsigned char *p,unsigned char);
extern unsigned char W1_INIT(void);
extern void W1_WRITE(unsigned char byte);
extern unsigned char W1_READ(void);
extern unsigned char W1_SEARCH(unsigned char, unsigned char *p);

//==================================================
unsigned char ds1820_search(unsigned char data, unsigned char *p)
{ unsigned char r; 
  r = W1_SEARCH(data,(unsigned char *)&p);
  return r; 
}
//==================================================       
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=(unsigned char *)&scratchPad;
  do *(p++)=W1_READ();
  while (++i<9);
  return 0;//!w1_dow_crc8(&scratchPad,9);
}
//===================================================
unsigned short ds1820_temperature_10(unsigned char *addr)
{ if(ds1820_select(addr)==0) return 9999;
  W1_WRITE(0x44);
  hardDelayShort(550);
  if(ds1820_read_spd(addr)==0) return 9999;
  W1_INIT();
  return (((unsigned short)scratchPad.temp_msb<<8)|scratchPad.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((scratchPad.temp_low!=temp_low) || (scratchPad.temp_high!=temp_high)) return 0;
  if(ds1820_select(addr)==0) return 0;
  W1_WRITE(0x48);
  hardDelayChar(15);
  return W1_INIT();
}

⌨️ 快捷键说明

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